예제 #1
0
        /// <summary>
        /// Draw this handle according to the handle's style.
        /// </summary>
        /// <param name="g"></param>
        /// <param name="view"></param>
        /// <remarks>
        /// Handles never have shadows, but their outlines and fills
        /// can be specified by the <see cref="P:Northwoods.Go.GoShape.Pen" /> and
        /// <see cref="P:Northwoods.Go.GoShape.Brush" /> properties.
        /// Hollow handles (those with a <see cref="P:Northwoods.Go.GoHandle.GoObject" />.<c>NoHandle</c>
        /// <see cref="P:Northwoods.Go.GoHandle.HandleID" />), should have no <see cref="P:Northwoods.Go.GoShape.Brush" />.
        /// </remarks>
        public override void Paint(Graphics g, GoView view)
        {
            RectangleF bounds = Bounds;

            switch (Style)
            {
            case GoHandleStyle.None:
                break;

            default:
                GoShape.DrawRectangle(g, view, Pen, Brush, bounds.X, bounds.Y, bounds.Width, bounds.Height);
                break;

            case GoHandleStyle.Ellipse:
                GoShape.DrawEllipse(g, view, Pen, Brush, bounds.X, bounds.Y, bounds.Width, bounds.Height);
                break;

            case GoHandleStyle.Diamond:
            {
                PointF[] array2 = view.AllocTempPointArray(4);
                array2[0].X = bounds.X + bounds.Width / 2f;
                array2[0].Y = bounds.Y;
                array2[1].X = bounds.X + bounds.Width;
                array2[1].Y = bounds.Y + bounds.Height / 2f;
                array2[2].X = array2[0].X;
                array2[2].Y = bounds.Y + bounds.Height;
                array2[3].X = bounds.X;
                array2[3].Y = array2[1].Y;
                GoShape.DrawPolygon(g, view, Pen, Brush, array2);
                view.FreeTempPointArray(array2);
                break;
            }

            case GoHandleStyle.TriangleTopLeft:
            case GoHandleStyle.TriangleTopRight:
            case GoHandleStyle.TriangleBottomRight:
            case GoHandleStyle.TriangleBottomLeft:
            case GoHandleStyle.TriangleMiddleTop:
            case GoHandleStyle.TriangleMiddleRight:
            case GoHandleStyle.TriangleMiddleBottom:
            case GoHandleStyle.TriangleMiddleLeft:
            {
                PointF[] array = view.AllocTempPointArray(3);
                ComputeTrianglePoints(array);
                GoShape.DrawPolygon(g, view, Pen, Brush, array);
                view.FreeTempPointArray(array);
                break;
            }
            }
        }
예제 #2
0
        /// <summary>
        /// The appearance of this handle depends on the <see cref="P:Northwoods.Go.IGoCollapsible.Collapsible" />
        /// and <see cref="P:Northwoods.Go.IGoCollapsible.IsExpanded" /> properties.
        /// </summary>
        /// <param name="g"></param>
        /// <param name="view"></param>
        /// <remarks>
        /// If the parent is not <see cref="P:Northwoods.Go.IGoCollapsible.Collapsible" />,
        /// this draws a circle inside the rectangle.
        /// Otherwise, the appearance depends on the value of <see cref="P:Northwoods.Go.GoCollapsibleHandle.Style" />.
        /// </remarks>
        protected virtual void PaintHandle(Graphics g, GoView view)
        {
            IGoCollapsible goCollapsible = FindCollapsible();

            if (goCollapsible == null)
            {
                return;
            }
            RectangleF bounds = Bounds;

            if (goCollapsible.Collapsible)
            {
                float num  = bounds.X + bounds.Width / 2f;
                float num2 = bounds.Y + bounds.Height / 2f;
                switch (Style)
                {
                case GoCollapsibleHandleStyle.PlusMinus:
                {
                    float num9  = Bordered ? (bounds.Width / 4f) : 0f;
                    float num10 = Bordered ? (bounds.Height / 4f) : 0f;
                    GoShape.DrawLine(g, view, Pen, bounds.X + num9, num2, bounds.X + bounds.Width - num9, num2);
                    if (!goCollapsible.IsExpanded)
                    {
                        GoShape.DrawLine(g, view, Pen, num, bounds.Y + num10, num, bounds.Y + bounds.Height - num10);
                    }
                    break;
                }

                case GoCollapsibleHandleStyle.TriangleRight:
                {
                    float    num7   = Bordered ? (bounds.Width / 6f) : 0f;
                    float    num8   = Bordered ? (bounds.Height / 6f) : 0f;
                    PointF[] array3 = view.AllocTempPointArray(3);
                    if (goCollapsible.IsExpanded)
                    {
                        array3[0].X = bounds.X + num7;
                        array3[0].Y = bounds.Y + num8;
                        array3[1].X = bounds.X + bounds.Width - num7;
                        array3[1].Y = num2;
                        array3[2].X = bounds.X + num7;
                        array3[2].Y = bounds.Y + bounds.Height - num8;
                    }
                    else
                    {
                        array3[0].X = bounds.X + num7;
                        array3[0].Y = bounds.Y + num8;
                        array3[1].X = bounds.X + bounds.Width - num7;
                        array3[1].Y = bounds.Y + num8;
                        array3[2].X = num;
                        array3[2].Y = bounds.Y + bounds.Height - num8;
                    }
                    SolidBrush solidBrush2 = new SolidBrush(GoShape.GetPenColor(Pen, Color.Black));
                    GoShape.DrawPolygon(g, view, null, solidBrush2, array3);
                    solidBrush2.Dispose();
                    view.FreeTempPointArray(array3);
                    break;
                }

                case GoCollapsibleHandleStyle.TriangleUp:
                {
                    float    num5   = Bordered ? (bounds.Width / 6f) : 0f;
                    float    num6   = Bordered ? (bounds.Height / 6f) : 0f;
                    PointF[] array2 = view.AllocTempPointArray(3);
                    if (goCollapsible.IsExpanded)
                    {
                        array2[0].X = bounds.X + num5;
                        array2[0].Y = bounds.Y + bounds.Height - num6;
                        array2[1].X = bounds.X + bounds.Width - num5;
                        array2[1].Y = bounds.Y + bounds.Height - num6;
                        array2[2].X = num;
                        array2[2].Y = bounds.Y + num6;
                    }
                    else
                    {
                        array2[0].X = bounds.X + num5;
                        array2[0].Y = bounds.Y + num6;
                        array2[1].X = bounds.X + bounds.Width - num5;
                        array2[1].Y = bounds.Y + num6;
                        array2[2].X = num;
                        array2[2].Y = bounds.Y + bounds.Height - num6;
                    }
                    SolidBrush solidBrush = new SolidBrush(GoShape.GetPenColor(Pen, Color.Black));
                    GoShape.DrawPolygon(g, view, null, solidBrush, array2);
                    solidBrush.Dispose();
                    view.FreeTempPointArray(array2);
                    break;
                }

                case GoCollapsibleHandleStyle.ChevronUp:
                {
                    float    num3  = Bordered ? (bounds.Width / 6f) : 0f;
                    float    num4  = Bordered ? (bounds.Height / 6f) : 0f;
                    PointF[] array = view.AllocTempPointArray(3);
                    if (goCollapsible.IsExpanded)
                    {
                        array[0].X = bounds.X + num3;
                        array[0].Y = num2;
                        array[1].X = num;
                        array[1].Y = bounds.Y + num4;
                        array[2].X = bounds.X + bounds.Width - num3;
                        array[2].Y = num2;
                        GoShape.DrawLines(g, view, Pen, array);
                        array[0].X = bounds.X + num3;
                        array[0].Y = bounds.Y + bounds.Height - num4;
                        array[1].X = num;
                        array[1].Y = num2;
                        array[2].X = bounds.X + bounds.Width - num3;
                        array[2].Y = bounds.Y + bounds.Height - num4;
                        GoShape.DrawLines(g, view, Pen, array);
                    }
                    else
                    {
                        array[0].X = bounds.X + num3;
                        array[0].Y = bounds.Y + num4;
                        array[1].X = num;
                        array[1].Y = num2;
                        array[2].X = bounds.X + bounds.Width - num3;
                        array[2].Y = bounds.Y + num4;
                        GoShape.DrawLines(g, view, Pen, array);
                        array[0].X = bounds.X + num3;
                        array[0].Y = num2;
                        array[1].X = num;
                        array[1].Y = bounds.Y + bounds.Height - num4;
                        array[2].X = bounds.X + bounds.Width - num3;
                        array[2].Y = num2;
                        GoShape.DrawLines(g, view, Pen, array);
                    }
                    view.FreeTempPointArray(array);
                    break;
                }
                }
            }
            else
            {
                GoShape.DrawEllipse(g, view, Pen, null, bounds.X + bounds.Width / 4f, bounds.Y + bounds.Height / 4f, bounds.Width / 2f, bounds.Height / 2f);
            }
        }