private void ChangeRectangleSize(int growSize, FanartControlImage img) { Rectangle pos = new Rectangle(); pos.X = img.Position.X - (m_thumbSize.X / 2) - (growSize / 2); pos.Y = img.Position.Y - (m_thumbSize.Y / 2) - (growSize / 2); pos.Width = m_thumbSize.X + growSize; pos.Height = m_thumbSize.Y + growSize; img.Rectangle = pos; }
private void UpdatePosition() { if (m_mouseDownClosestDegree >= 0 && m_mouseDownClosestDegree < 360) { FanartControlImage img = m_imagePositions[0]; img.Degree = m_mouseDownClosestDegree; float size = CalcSize(m_mouseDownClosestDegree);//how PointF p = m_elipse[m_mouseDownClosestDegree]; m_imagePositions[0].Rectangle = new Rectangle((int)(p.X - (m_thumbSize.X / 2) * size), (int)(p.Y - (m_thumbSize.Y / 2) * size), (int)(m_thumbSize.X * size), (int)(m_thumbSize.Y * size)); //m_imagePositions[0].Position.X = 10;// = (int)m_elipse[m_mouseDownClosestDegree].X; //m_imagePositions[0].Position.Y = } }
private void Draw(Rectangle rect, Graphics g) { //draw debug output if (m_imagePositions.Count > m_selectedIndex && m_selectedIndex > 0) { g.DrawString("Current: " + m_imagePositions[m_selectedIndex].Degree + ", Nearest: " + m_mouseDownClosestDegree + ", Position: " + m_position, SystemFonts.DefaultFont, SystemBrushes.HotTrack, 10, 10); } //draw the ellipse PointF prev = PointFromEllipse(m_elipseRect, 0); for (int i = 1; i < 360; i++) { PointF next = PointFromEllipse(m_elipseRect, i); g.DrawLine(new Pen(new SolidBrush(Color.Black), 5), prev, next); prev = next; } if (m_imagePositions.Count > 0) { FanartControlImage fci = m_imagePositions[0]; if (fci.Image != null) { g.DrawImage(fci.CreateFramedImage(), fci.Rectangle); } else { g.FillRectangle(new SolidBrush(FrameColor), fci.Rectangle); g.DrawRectangle(new Pen(Color.Black), fci.Rectangle); } } //Draw a red dot representing the closest match if (m_mouseDownClosestDegree != -99) { g.DrawEllipse(new Pen(new SolidBrush(Color.Red)), m_elipse[m_mouseDownClosestDegree].X - 5, m_elipse[m_mouseDownClosestDegree].Y - 5, 10, 10); } return; /*rect.Inflate(-5, -5); * prev = PointFromEllipse(m_elipseRect, 0); * for (int i = 1; i < 360; i++) * { * PointF next = PointFromEllipse(m_elipseRect, i); * g.DrawLine(new Pen(new SolidBrush(Color.Black), 5), prev, next); * prev = next; * } * for (int i = 0; i < m_numberOfImages; i++) * { * //Draw the border * if (m_imagePositions.Count > i) * { * * * //g.DrawRectangle(new Pen(new SolidBrush(Color.Black)), img.Rectangle); * } * } * m_imagePositions.Sort(delegate(FanartControlImage i1, FanartControlImage i2) { return i1.Position.Y.CompareTo(i2.Position.Y); }); * foreach (FanartControlImage fci in m_imagePositions) * { * if (fci.Image != null) * { * g.DrawImage(fci.CreateFramedImage(), fci.Rectangle); * * } * else * { * g.FillRectangle(new SolidBrush(FrameColor), fci.Rectangle); * g.DrawRectangle(new Pen(Color.Black), fci.Rectangle); * } * } * * m_imagePositions.Sort(delegate(FanartControlImage i1, FanartControlImage i2) { return i1.Index.CompareTo(i2.Index); }); * * if (m_mouseDownClosestDegree != -99) * { * g.DrawEllipse(new Pen(new SolidBrush(Color.Red)), * m_elipse[m_mouseDownClosestDegree].X - 5, * m_elipse[m_mouseDownClosestDegree].Y - 5, 10, 10); * } */ }
private void UpdateRectanglePositions(int _position) { if (_position < 0) { _position += 360; } if (_position >= 0 && _position < 360) { m_position = _position; //Console.WriteLine("Change pos to : " + _position); //PointF p; //int degr = 360 / m_numberOfImages; double degr = 0.0; int index = 1; //first image if (m_imagePositions.Count == 0) { m_imagePositions.Add(new FanartControlImage(index)); } m_imagePositions[0].Degree = 0; Point p = new Point((int)m_elipse[0].X, (int)m_elipse[0].Y); m_imagePositions[0].Position = p; m_imagePositions[0].Rectangle = new Rectangle((p.X - m_thumbSize.X / 2), (p.Y - m_thumbSize.Y / 2), m_thumbSize.X, m_thumbSize.Y); for (int i = 1; i < 360; i++) { int growSize = 0; double growMultiplier = 1; if (m_imagePositions.Count <= index) { m_imagePositions.Add(new FanartControlImage(index)); } FanartControlImage img = m_imagePositions[index]; img.Degree = i; if (img.Degree > 0 && img.Degree <= 90) {//right-down portion of elipse //size grows growSize = (int)((double)img.Degree * GROWING_MULTIPLIER); growMultiplier = img.Degree * GROWING_MULTIPLIER / 100; //Console.WriteLine(i + ": " + img.Degree + "°, Growsize: " + growSize); } else if (img.Degree > 90 && img.Degree <= 180) { growSize = (int)(((double)(90 - (img.Degree - 90))) * GROWING_MULTIPLIER); //Console.WriteLine(i + ": " + img.Degree + "°, Growsize: " + growSize); } else if (img.Degree > 180 && img.Degree <= 270) { growSize = (int)((img.Degree - 180) * ((-1) * GROWING_MULTIPLIER)); } else if (img.Degree > 270 && img.Degree <= 360) { growSize = (int)((90 - (img.Degree - 270)) * ((-1) * GROWING_MULTIPLIER)); } PointF pos = m_elipse[i]; int width = (int)((m_thumbSize.Y + m_distance) * growMultiplier); int height = (int)((m_thumbSize.X) * growMultiplier); if (!m_imagePositions[index - 1].Rectangle.IntersectsWith(new Rectangle((int)(pos.X - (width / 2.0)), (int)(pos.Y - (height / 2.0)), width, height))) {//the two images don't intersect -> use this degree ChangeRectangleSize(growSize, img); m_imagePositions[index].Degree = (int)(m_position + degr); m_imagePositions[index].Position = new Point((int)pos.X, (int)pos.Y); m_imagePositions[index].Rectangle = new Rectangle((int)(pos.X - m_thumbSize.X / 2.0), (int)(pos.Y - m_thumbSize.Y / 2.0), m_thumbSize.X, m_thumbSize.Y); } } } }
public int CompareTo(object obj) { FanartControlImage image = (FanartControlImage)obj; return(this.Position.Y.CompareTo(image.Position.Y)); }
private void ChangeRectangleSize(int growSize, FanartControlImage img) { Rectangle pos = new Rectangle(); pos.X = img.Position.X - (m_thumbSize.X / 2) - (growSize / 2); pos.Y = img.Position.Y - (m_thumbSize.Y / 2) - (growSize / 2); pos.Width = m_thumbSize.X + growSize; pos.Height = m_thumbSize.Y + growSize; img.Rectangle = pos; }