Exemple #1
0
 /// <summary>Draws a rectangle with rounded corners</summary>
 public static void DrawRectangleRounded(this Graphics gfx, Pen pen, RectangleF rect, float radius)
 {
     gfx.DrawPath(pen, Gdi.RoundedRectanglePath(rect, radius));
 }
Exemple #2
0
 /// <summary>Fill a rectangle with rounded corners</summary>
 public static void FillRectangleRounded(this Graphics gfx, Brush brush, RectangleF rect, float radius)
 {
     gfx.FillPath(brush, Gdi.RoundedRectanglePath(rect, radius));
 }
Exemple #3
0
        /// <summary>Generates the boundary of the hint balloon</summary>
        private GraphicsPath GeneratePath(bool region_border)
        {
            var width  = Width + (region_border ? 1 : 0);
            var height = Height + (region_border ? 1 : 0);
            var cr     = Math.Max(1, CornerRadius);

            GraphicsPath path;

            if (TipLength == 0 || TipBaseWidth == 0)
            {
                path = Gdi.RoundedRectanglePath(new RectangleF(0, 0, width, height), cr);
            }
            else
            {
                var tip_length = TipLength;
                var tip_width  = Math_.Clamp(width - 2 * (tip_length + cr), Math.Min(5, TipBaseWidth), TipBaseWidth);

                // Find the corner to start from
                path = new GraphicsPath();
                switch (TipCorner)
                {
                default:
                    Debug.Assert(false, "Unknown corner");
                    break;

                case ETipCorner.TopLeft:
                    path.AddLine(0, 0, tip_length + cr + tip_width, tip_length);
                    path.AddArc(width - tip_length - cr, tip_length, cr, cr, 270f, 90f);
                    path.AddArc(width - tip_length - cr, height - tip_length - cr, cr, cr, 0f, 90f);
                    path.AddArc(tip_length, height - tip_length - cr, cr, cr, 90f, 90f);
                    path.AddArc(tip_length, tip_length, cr, cr, 180f, 90f);
                    path.AddLine(tip_length + cr, tip_length, 0, 0);
                    break;

                case ETipCorner.TopRight:
                    path.AddLine(width, 0, width - tip_length - cr, tip_length);
                    path.AddArc(width - tip_length - cr, tip_length, cr, cr, 270f, 90f);
                    path.AddArc(width - tip_length - cr, height - tip_length - cr, cr, cr, 0f, 90f);
                    path.AddArc(tip_length, height - tip_length - cr, cr, cr, 90f, 90f);
                    path.AddArc(tip_length, tip_length, cr, cr, 180f, 90f);
                    path.AddLine(tip_length + cr, tip_length, width - tip_length - cr - tip_width, tip_length);
                    path.AddLine(width - tip_length - cr - tip_width, tip_length, width, 0);
                    break;

                case ETipCorner.BottomLeft:
                    path.AddLine(0, height, tip_length + cr, height - tip_length);
                    path.AddArc(tip_length, height - tip_length - cr, cr, cr, 90f, 90f);
                    path.AddArc(tip_length, tip_length, cr, cr, 180f, 90f);
                    path.AddArc(width - tip_length - cr, tip_length, cr, cr, 270f, 90f);
                    path.AddArc(width - tip_length - cr, height - tip_length - cr, cr, cr, 0f, 90f);
                    path.AddLine(width - tip_length - cr, height - tip_length, tip_length + cr + tip_width, height - tip_length);
                    path.AddLine(tip_length + cr + tip_width, height - tip_length, 0, height);
                    break;

                case ETipCorner.BottomRight:
                    path.AddLine(width, height, width - tip_length - cr - tip_width, height - tip_length);
                    path.AddArc(tip_length, height - tip_length - cr, cr, cr, 90f, 90f);
                    path.AddArc(tip_length, tip_length, cr, cr, 180f, 90f);
                    path.AddArc(width - tip_length - cr, tip_length, cr, cr, 270f, 90f);
                    path.AddArc(width - tip_length - cr, height - tip_length - cr, cr, cr, 0f, 90f);
                    path.AddLine(width - tip_length - cr, height - tip_length, width, height);
                    break;
                }
            }
            return(path);
        }