public static void RenderBorder(Graphics g, Rectangle rect, Color borderColor,
            ButtonBorderType borderType, int radius, RoundStyle roundType)
        {
            rect.Width--;
            rect.Height--;

            bool simpleRect = (borderType == ButtonBorderType.Rectangle && (roundType == RoundStyle.None || radius < 2));
            SmoothingMode newMode = simpleRect ? SmoothingMode.HighSpeed : SmoothingMode.AntiAlias;

            using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, newMode))
            {
                using (Pen p = new Pen(borderColor))
                {
                    if (simpleRect)
                    {
                        g.DrawRectangle(p, rect);
                    }
                    else if (borderType == ButtonBorderType.Ellipse)
                    {
                        g.DrawEllipse(p, rect);
                    }
                    else
                    {
                        using (GraphicsPath path = GraphicsPathHelper.CreateRoundedRect(rect, radius, roundType, false))
                        {
                            g.DrawPath(p, path);
                        }
                    }
                }
            }
        }
 internal static void RenderBackgroundInternal(
    Graphics g,
    Rectangle rect,
    Color baseColor,
    Color borderColor,
    Color innerBorderColor,
    RoundStyle style,
    int roundWidth,
    bool drawBorder,
    bool drawGlass,
    LinearGradientMode mode)
 {
     RenderBackgroundInternal(
          g,
          rect,
          baseColor,
          borderColor,
          innerBorderColor,
          style,
          8,
          0.45f,
          drawBorder,
          drawGlass,
          mode);
 }
        public static GraphicsPath CreatePath(Rectangle rect, int radius, RoundStyle style, bool correction)
        {
            GraphicsPath path = new GraphicsPath();
            int radiusCorrection = correction ? 1 : 0;
            switch (style)
            {
                case RoundStyle.None:
                    path.AddRectangle(rect);
                    break;

                case RoundStyle.All:
                    path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f);
                    path.AddArc((rect.Right - radius) - radiusCorrection, rect.Y, radius, radius, 270f, 90f);
                    path.AddArc((rect.Right - radius) - radiusCorrection, (rect.Bottom - radius) - radiusCorrection, radius, radius, 0f, 90f);
                    path.AddArc(rect.X, (rect.Bottom - radius) - radiusCorrection, radius, radius, 90f, 90f);
                    break;

                case RoundStyle.Left:
                    path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f);
                    path.AddLine(rect.Right - radiusCorrection, rect.Y, rect.Right - radiusCorrection, rect.Bottom - radiusCorrection);
                    path.AddArc(rect.X, (rect.Bottom - radius) - radiusCorrection, radius, radius, 90f, 90f);
                    break;

                case RoundStyle.Right:
                    path.AddArc((rect.Right - radius) - radiusCorrection, rect.Y, radius, radius, 270f, 90f);
                    path.AddArc((rect.Right - radius) - radiusCorrection, (rect.Bottom - radius) - radiusCorrection, radius, radius, 0f, 90f);
                    path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y);
                    break;

                case RoundStyle.Top:
                    path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f);
                    path.AddArc((rect.Right - radius) - radiusCorrection, rect.Y, radius, radius, 270f, 90f);
                    path.AddLine(rect.Right - radiusCorrection, rect.Bottom - radiusCorrection, rect.X, rect.Bottom - radiusCorrection);
                    break;

                case RoundStyle.Bottom:
                    path.AddArc((rect.Right - radius) - radiusCorrection, (rect.Bottom - radius) - radiusCorrection, radius, radius, 0f, 90f);
                    path.AddArc(rect.X, (rect.Bottom - radius) - radiusCorrection, radius, radius, 90f, 90f);
                    path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
                    break;

                case RoundStyle.BottomLeft:
                    path.AddArc(rect.X, (rect.Bottom - radius) - radiusCorrection, radius, radius, 90f, 90f);
                    path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
                    path.AddLine(rect.Right - radiusCorrection, rect.Y, rect.Right - radiusCorrection, rect.Bottom - radiusCorrection);
                    break;

                case RoundStyle.BottomRight:
                    path.AddArc((rect.Right - radius) - radiusCorrection, (rect.Bottom - radius) - radiusCorrection, radius, radius, 0f, 90f);
                    path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y);
                    path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
                    break;
            }
            path.CloseFigure();
            return path;
        }
示例#4
0
 public static void CreateRegion(Control control, Rectangle bounds, int radius, RoundStyle roundStyle)
 {
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(bounds, radius, roundStyle, true))
     {
         Region region = new Region(path);
         path.Widen(Pens.White);
         region.Union(path);
         if (control.Region != null)
         {
             control.Region.Dispose();
         }
         control.Region = region;
     }
 }
示例#5
0
 /// <summary>
 /// 
 /// </summary>
 void Awake()
 {
     //When you start from room scene, return to lobby for connect to server first.
     if (!PhotonNetwork.connected || PhotonNetwork.room == null)
     {
         Application.LoadLevel(0);
         return;
     }
     isFinish = false;
     if ((string)PhotonNetwork.room.customProperties[PropiertiesKeys.RoomRoundKey] == "1")
     {
         m_RoundStyle = RoundStyle.Rounds;
     }
     else
     {
         m_RoundStyle = RoundStyle.OneMacht;
     }
     GetTime();
 }
示例#6
0
        public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect,
            int ownerRadius, RoundStyle ownerRoundTye, GlassPosition position,
            float angle, float glassLengthFactor, Color glassColor, int alpha1, int alpha2)
        {
            if (!(glassLengthFactor > 0 && glassLengthFactor < 1))
                throw new ArgumentException("glassLengthFactor must be between 0 and 1, but not include 0 and 1. ",
                    "glassLengthFactor");

            Rectangle rect = CalcGlassRect(ownerRect, position, glassLengthFactor);
            RoundStyle round = CalcRoundStyle(position, ownerRadius, ownerRoundTye);
            if (rect.Width < 1 || rect.Height < 1)
                return;

            BasicBlockPainter.RenderLinearGradientBackground(
                g,
                rect,
                Color.FromArgb(alpha1, glassColor),
                Color.FromArgb(alpha2, glassColor),
                angle,
                ownerRadius,
                round);
        }
示例#7
0
 internal static void RenderBackgroundInternal(
     Graphics g,
     Rectangle rect,
     Color baseColor,
     Color borderColor,
     Color innerBorderColor,
     RoundStyle style,
     bool drawBorder,
     bool drawGlass,
     System.Drawing.Drawing2D.LinearGradientMode mode)
 {
     RenderBackgroundInternal(
         g,
         rect,
         baseColor,
         borderColor,
         innerBorderColor,
         style,
         8,
         drawBorder,
         drawGlass,
         mode);
 }
 public static void RenderFlatBackground(Graphics g, Rectangle rect, Color backColor,
     ButtonBorderType borderType, int radius, RoundStyle roundType)
 {
     SmoothingMode newMode;
     bool simpleRect = (borderType == ButtonBorderType.Rectangle && (roundType == RoundStyle.None || radius < 2));
     if (simpleRect)
     {
         newMode = SmoothingMode.HighSpeed;
     }
     else
     {
         newMode = SmoothingMode.AntiAlias;
         rect.Width--;
         rect.Height--;
     }
     using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, newMode))
     {
         using (SolidBrush sb = new SolidBrush(backColor))
         {
             if (simpleRect)
             {
                 g.FillRectangle(sb, rect);
             }
             else if (borderType == ButtonBorderType.Ellipse)
             {
                 g.FillEllipse(sb, rect);
             }
             else
             {
                 using (GraphicsPath path = GraphicsPathHelper.CreateRoundedRect(rect, radius, roundType, false))
                 {
                     g.FillPath(sb, path);
                 }
             }
         }
     }
 }
示例#9
0
        internal void RenderScrollBarArrowInternal(Graphics g, Rectangle rect, Color baseColor,
                                                   Color borderColor, Color innerBorderColor, Color arrowColor, RoundStyle roundStyle,
                                                   bool drawBorder, bool drawGlass, ArrowDirection arrowDirection, LinearGradientMode mode)
        {
            RenderHelper.RenderBackgroundInternal(g, rect, baseColor, borderColor, innerBorderColor,
                                                  roundStyle, 0, .45F, drawBorder, drawGlass, mode);

            using (var brush = new SolidBrush(arrowColor))
            {
                RenderArrowInternal(g, rect, arrowDirection, brush);
            }
        }
示例#10
0
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye,
     GlassPosition position, float angle, float glassLengthFactor)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye,
         position, angle, glassLengthFactor, Color.White, 220, 60);
 }
        /// <summary>
        /// 建立带有圆角样式的路径。取横向一半顶部(用于按钮玻璃效果)
        /// </summary>
        /// <param name="rect">用来建立路径的矩形。</param>
        /// <param name="_radius">圆角的大小。</param>
        /// <param name="style">圆角的样式。</param>
        /// <param name="correction">是否把矩形长宽减 1,以便画出边框。</param>
        /// <returns>建立的路径。</returns>
        public static GraphicsPath CreatePathHalf(
            Rectangle rect, int radius, RoundStyle style, bool correction)
        {
            GraphicsPath path = new GraphicsPath();
            int radiusCorrection = correction ? 1 : 0;
            switch (style)
            {
                case RoundStyle.None:
                    path.AddRectangle(new Rectangle(rect.X, rect.Y, rect.Width - radiusCorrection, rect.Height/2 - radiusCorrection));
                    break;
                case RoundStyle.All:
                    //顺时针
                    path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);

                    path.AddArc(
                        rect.Right - radius - radiusCorrection,
                        rect.Y,
                        radius,
                        radius,
                        270,
                        90);
                    path.AddLine(rect.Right - radiusCorrection,
                        rect.Y + rect.Height / 2 - radiusCorrection,
                        rect.X,
                        rect.Y + rect.Height / 2 - radiusCorrection);

                   
                    break;
                case RoundStyle.Left:
                    path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);

                    path.AddLine(
                        rect.Right - radiusCorrection, rect.Y,
                        rect.Right - radiusCorrection, rect.Y + rect.Height / 2 - radiusCorrection);
                    path.AddLine(                        
                        rect.Right - radiusCorrection, rect.Y + rect.Height / 2 - radiusCorrection,
                        rect.X, rect.Y + rect.Height / 2 - radiusCorrection);
                    
                    break;
                case RoundStyle.Right:
                    path.AddArc(
                        rect.Right - radius - radiusCorrection,
                        rect.Y,
                        radius,
                        radius,
                        270,
                        90);
                    path.AddLine(rect.Right - radiusCorrection, rect.Y + rect.Height / 2 - radiusCorrection,
                        rect.X, rect.Y + rect.Height / 2 - radiusCorrection);
                    path.AddLine(rect.X, rect.Y + rect.Height / 2 - radiusCorrection, 
                        rect.X, rect.Y);
                    break;
                case RoundStyle.Top:
                    path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
                    path.AddArc(
                        rect.Right - radius - radiusCorrection,
                        rect.Y,
                        radius,
                        radius,
                        270,
                        90);
                    path.AddLine(
                        rect.Right - radiusCorrection, rect.Y + rect.Height / 2 - radiusCorrection,
                        rect.X, rect.Y + rect.Height / 2 - radiusCorrection);
                    break;
                case RoundStyle.Bottom:
                    path.AddRectangle(new Rectangle(rect.X, rect.Y, rect.Width - radiusCorrection, rect.Height / 2 - radiusCorrection));

                    break;
            }
            path.CloseFigure();

            return path;
        }
        public static GraphicsPath CreateRoundedRect(Rectangle rect, int radius, RoundStyle type, bool shorten)
        {
            GraphicsPath path = new GraphicsPath();

            if (shorten)
            {
                rect.Width--;
                rect.Height--;
            }

            if (radius < 2)
                type = RoundStyle.None;

            Rectangle rectTopLeft = new Rectangle(rect.X, rect.Y, radius, radius);
            Rectangle rectTopRight = new Rectangle(rect.Right - radius, rect.Y, radius, radius);
            Rectangle rectBottomLeft = new Rectangle(rect.X, rect.Bottom - radius, radius, radius);
            Rectangle rectBottomRight = new Rectangle(rect.Right - radius, rect.Bottom - radius, radius, radius);
            Point p1 = new Point(rect.X, rect.Y);
            Point p2 = new Point(rect.Right, rect.Y);
            Point p3 = new Point(rect.Right, rect.Bottom);
            Point p4 = new Point(rect.X, rect.Bottom);

            switch (type)
            {
                case RoundStyle.None:
                    path.AddRectangle(rect);
                    break;
                case RoundStyle.All:
                    path.AddArc(rectTopLeft, 180, 90);
                    path.AddArc(rectTopRight, 270, 90);
                    path.AddArc(rectBottomRight, 0, 90);
                    path.AddArc(rectBottomLeft, 90, 90);
                    break;
                case RoundStyle.Top:
                    path.AddArc(rectTopLeft, 180, 90);
                    path.AddArc(rectTopRight, 270, 90);
                    path.AddLine(p3, p4);
                    break;
                case RoundStyle.Bottom:
                    path.AddArc(rectBottomRight, 0, 90);
                    path.AddArc(rectBottomLeft, 90, 90);
                    path.AddLine(p1, p2);
                    break;
                case RoundStyle.Left:
                    path.AddArc(rectBottomLeft, 90, 90);
                    path.AddArc(rectTopLeft, 180, 90);
                    path.AddLine(p2, p3);
                    break;
                case RoundStyle.Right:
                    path.AddArc(rectTopRight, 270, 90);
                    path.AddArc(rectBottomRight, 0, 90);
                    path.AddLine(p4, p1);
                    break;
                default:
                    break;
            }
            path.CloseFigure();
            return path;
        }
示例#13
0
        public static GraphicsPath CreateRoundedRect(Rectangle rect, int radius, RoundStyle type, bool shorten)
        {
            GraphicsPath path = new GraphicsPath();

            if (shorten)
            {
                rect.Width--;
                rect.Height--;
            }

            if (radius < 2)
            {
                type = RoundStyle.None;
            }

            Rectangle rectTopLeft     = new Rectangle(rect.X, rect.Y, radius, radius);
            Rectangle rectTopRight    = new Rectangle(rect.Right - radius, rect.Y, radius, radius);
            Rectangle rectBottomLeft  = new Rectangle(rect.X, rect.Bottom - radius, radius, radius);
            Rectangle rectBottomRight = new Rectangle(rect.Right - radius, rect.Bottom - radius, radius, radius);
            Point     p1 = new Point(rect.X, rect.Y);
            Point     p2 = new Point(rect.Right, rect.Y);
            Point     p3 = new Point(rect.Right, rect.Bottom);
            Point     p4 = new Point(rect.X, rect.Bottom);

            switch (type)
            {
            case RoundStyle.None:
                path.AddRectangle(rect);
                break;

            case RoundStyle.All:
                path.AddArc(rectTopLeft, 180, 90);
                path.AddArc(rectTopRight, 270, 90);
                path.AddArc(rectBottomRight, 0, 90);
                path.AddArc(rectBottomLeft, 90, 90);
                break;

            case RoundStyle.Top:
                path.AddArc(rectTopLeft, 180, 90);
                path.AddArc(rectTopRight, 270, 90);
                path.AddLine(p3, p4);
                break;

            case RoundStyle.Bottom:
                path.AddArc(rectBottomRight, 0, 90);
                path.AddArc(rectBottomLeft, 90, 90);
                path.AddLine(p1, p2);
                break;

            case RoundStyle.Left:
                path.AddArc(rectBottomLeft, 90, 90);
                path.AddArc(rectTopLeft, 180, 90);
                path.AddLine(p2, p3);
                break;

            case RoundStyle.Right:
                path.AddArc(rectTopRight, 270, 90);
                path.AddArc(rectBottomRight, 0, 90);
                path.AddLine(p4, p1);
                break;

            default:
                break;
            }
            path.CloseFigure();
            return(path);
        }
        public static void RenderFlatBackground(Graphics g, Rectangle rect, Color backColor,
                                                ButtonBorderType borderType, int radius, RoundStyle roundType)
        {
            SmoothingMode newMode;
            bool          simpleRect = (borderType == ButtonBorderType.Rectangle && (roundType == RoundStyle.None || radius < 2));

            if (simpleRect)
            {
                newMode = SmoothingMode.HighSpeed;
            }
            else
            {
                newMode = SmoothingMode.AntiAlias;
                rect.Width--;
                rect.Height--;
            }
            using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, newMode))
            {
                using (SolidBrush sb = new SolidBrush(backColor))
                {
                    if (simpleRect)
                    {
                        g.FillRectangle(sb, rect);
                    }
                    else if (borderType == ButtonBorderType.Ellipse)
                    {
                        g.FillEllipse(sb, rect);
                    }
                    else
                    {
                        using (GraphicsPath path = GraphicsPathHelper.CreateRoundedRect(rect, radius, roundType, false))
                        {
                            g.FillPath(sb, path);
                        }
                    }
                }
            }
        }
示例#15
0
 public static void CreateRegion(Control control, Rectangle bounds, int radius, RoundStyle roundStyle)
 {
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(bounds, radius, roundStyle, true))
     {
         Region region = new Region(path);
         path.Widen(Pens.White);
         region.Union(path);
         if (control.Region != null)
         {
             control.Region.Dispose();
         }
         control.Region = region;
     }
 }
 private void DrawBorder(Graphics g, Rectangle rect, RoundStyle roundStyle, int radius, CCSkinMain frm)
 {
     g.SmoothingMode = SmoothingMode.HighQuality;
     rect.Width--;
     rect.Height--;
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, radius, roundStyle, false))
     {
         using (Pen pen = new Pen(this.ColorTable.Border))
         {
             g.DrawPath(pen, path);
         }
     }
     rect.Inflate(-1, -1);
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, radius, roundStyle, false))
     {
         using (Pen pen = new Pen(this.ColorTable.InnerBorder))
         {
             g.DrawPath(pen, path);
         }
     }
 }
示例#17
0
 internal static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         --rect.Width;
         --rect.Height;
     }
     using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
     {
         Color[] colorArray = new Color[4]
         {
             RenderHelperStrip.GetColor(baseColor, 0, 35, 24, 9),
             RenderHelperStrip.GetColor(baseColor, 0, 13, 8, 3),
             baseColor,
             RenderHelperStrip.GetColor(baseColor, 0, 35, 24, 9)
         };
         linearGradientBrush.InterpolationColors = new ColorBlend()
         {
             Positions = new float[4]
             {
                 0.0f,
                 basePosition,
                 basePosition + 0.05f,
                 1f
             },
             Colors = colorArray
         };
         if (style != RoundStyle.None)
         {
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 g.FillPath((Brush)linearGradientBrush, path);
             if (drawGlass)
             {
                 RectangleF glassRect = (RectangleF)rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                     glassRect.Height = (float)(((double)rect.Height - (double)rect.Height * (double)basePosition) * 2.0);
                 }
                 else
                 {
                     glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                     glassRect.Width = (float)(((double)rect.Width - (double)rect.Width * (double)basePosition) * 2.0);
                 }
                 ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
                 if ((int)baseColor.A > 0)
                 {
                     Rectangle rect1 = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rect1.Height = (int)((double)rect1.Height * (double)basePosition);
                     }
                     else
                     {
                         rect1.Width = (int)((double)rect.Width * (double)basePosition);
                     }
                     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect1, roundWidth, RoundStyle.Top, false))
                     {
                         using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(128, (int)byte.MaxValue, (int)byte.MaxValue, (int)byte.MaxValue)))
                             g.FillPath((Brush)solidBrush, path);
                     }
                 }
             }
             if (!drawBorder)
             {
                 return;
             }
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen = new Pen(borderColor))
                     g.DrawPath(pen, path);
             }
             rect.Inflate(-1, -1);
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen = new Pen(innerBorderColor))
                     g.DrawPath(pen, path);
             }
         }
         else
         {
             g.FillRectangle((Brush)linearGradientBrush, rect);
             if (drawGlass)
             {
                 RectangleF glassRect = (RectangleF)rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                     glassRect.Height = (float)(((double)rect.Height - (double)rect.Height * (double)basePosition) * 2.0);
                 }
                 else
                 {
                     glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                     glassRect.Width = (float)(((double)rect.Width - (double)rect.Width * (double)basePosition) * 2.0);
                 }
                 ControlPaintEx.DrawGlass(g, glassRect, 200, 0);
                 if ((int)baseColor.A > 80)
                 {
                     Rectangle rect1 = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rect1.Height = (int)((double)rect1.Height * (double)basePosition);
                     }
                     else
                     {
                         rect1.Width = (int)((double)rect.Width * (double)basePosition);
                     }
                     using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(128, (int)byte.MaxValue, (int)byte.MaxValue, (int)byte.MaxValue)))
                         g.FillRectangle((Brush)solidBrush, rect1);
                 }
             }
             if (!drawBorder)
             {
                 return;
             }
             using (Pen pen = new Pen(borderColor))
                 g.DrawRectangle(pen, rect);
             rect.Inflate(-1, -1);
             using (Pen pen = new Pen(innerBorderColor))
                 g.DrawRectangle(pen, rect);
         }
     }
 }
示例#18
0
        internal void RenderBackgroundInternal(
            Graphics g,
            Rectangle rect,
            Color baseColor,
            Color borderColor,
            Color innerBorderColor,
            RoundStyle style,
            int roundWidth,   //圆角半径
            float basePosition,
            bool drawBorder,
            bool drawGlass,
            LinearGradientMode mode)
        {
            if (drawBorder)//是否画边框
            {
                rect.Width--;
                rect.Height--;
            }

            using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
            {
                Color[] colors = new Color[4];
                colors[0] = GetColor(baseColor, 0, 35, 24, 9);
                colors[1] = GetColor(baseColor, 0, 0, 0, 0);
                colors[2] = baseColor;
                colors[3] = GetColor(baseColor, 0, 0, 0, 0);

                ColorBlend blend = new ColorBlend();
                blend.Positions           = new float[] { 0.0f, basePosition, basePosition, 1.0f };
                blend.Colors              = colors;
                brush.InterpolationColors = blend;
                if (style != RoundStyle.None)
                {
                    using (GraphicsPath path =
                               GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                    {
                        g.FillPath(brush, path);
                    }

                    if (baseColor.A > 80)
                    {
                        Rectangle rectTop = rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            // rectTop.Height = (int)(rectTop.Height * basePosition);
                        }
                        else
                        {
                            // rectTop.Width = (int)(rect.Width * basePosition);
                        }
                        using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(
                                   rectTop, roundWidth, RoundStyle.Top, false))
                        {
                            using (SolidBrush brushAlpha =
                                       new SolidBrush(Color.FromArgb(80, 255, 255, 255)))
                            {
                                g.FillPath(brushAlpha, pathTop);
                            }
                        }
                    }
                }
            }
        }
示例#19
0
 internal void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         rect.Width--;
         rect.Height--;
     }
     if (rect.Width > 0 && rect.Height > 0)
     {
         using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
         {
             Color[] colors = new Color[]
             {
                 this.GetColor(baseColor, 0, 35, 24, 9),
                 this.GetColor(baseColor, 0, 13, 8, 3),
                 baseColor,
                 this.GetColor(baseColor, 0, 68, 69, 54)
             };
             brush.InterpolationColors = new ColorBlend
             {
                 Positions = new float[]
                 {
                     0f,
                     basePosition,
                     basePosition + 0.05f,
                     1f
                 },
                 Colors = colors
             };
             if (style != RoundStyle.None)
             {
                 using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     g.FillPath(brush, path);
                 }
                 if (baseColor.A > 80)
                 {
                     Rectangle rectTop = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectTop.Height = (int)((float)rectTop.Height * basePosition);
                     }
                     else
                     {
                         rectTop.Width = (int)((float)rect.Width * basePosition);
                     }
                     using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(rectTop, roundWidth, RoundStyle.Top, false))
                     {
                         using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255)))
                         {
                             g.FillPath(brushAlpha, pathTop);
                         }
                     }
                 }
                 if (drawGlass)
                 {
                     RectangleF glassRect = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                         glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f;
                     }
                     else
                     {
                         glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                         glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f;
                     }
                     this.DrawGlass(g, glassRect, 170, 0);
                 }
                 if (drawBorder)
                 {
                     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                     {
                         using (Pen pen = new Pen(borderColor))
                         {
                             g.DrawPath(pen, path);
                         }
                     }
                     rect.Inflate(-1, -1);
                     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                     {
                         using (Pen pen = new Pen(innerBorderColor))
                         {
                             g.DrawPath(pen, path);
                         }
                     }
                 }
             }
             else
             {
                 g.FillRectangle(brush, rect);
                 if (baseColor.A > 80)
                 {
                     Rectangle rectTop = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectTop.Height = (int)((float)rectTop.Height * basePosition);
                     }
                     else
                     {
                         rectTop.Width = (int)((float)rect.Width * basePosition);
                     }
                     using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255)))
                     {
                         g.FillRectangle(brushAlpha, rectTop);
                     }
                 }
                 if (drawGlass)
                 {
                     RectangleF glassRect = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                         glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f;
                     }
                     else
                     {
                         glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                         glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f;
                     }
                     this.DrawGlass(g, glassRect, 200, 0);
                 }
                 if (drawBorder)
                 {
                     using (Pen pen = new Pen(borderColor))
                     {
                         g.DrawRectangle(pen, rect);
                     }
                     rect.Inflate(-1, -1);
                     using (Pen pen = new Pen(innerBorderColor))
                     {
                         g.DrawRectangle(pen, rect);
                     }
                 }
             }
         }
     }
 }
示例#20
0
 internal static void DrawGradientRoundRect(Graphics g, Rectangle rect, Color begin, Color end, Color border, Color innerBorder, Blend blend, LinearGradientMode mode, int radios, RoundStyle roundStyle, bool drawBorder, bool drawInnderBorder)
 {
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, radios, roundStyle, true))
     {
         using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rect, begin, end, mode))
         {
             linearGradientBrush.Blend = blend;
             g.FillPath((Brush)linearGradientBrush, path);
         }
         if (drawBorder)
         {
             using (Pen pen = new Pen(border))
                 g.DrawPath(pen, path);
         }
     }
     if (!drawInnderBorder)
     {
         return;
     }
     rect.Inflate(-1, -1);
     using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, radios, roundStyle, true))
     {
         using (Pen pen = new Pen(innerBorder))
             g.DrawPath(pen, path);
     }
 }
示例#21
0
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye, GlassPosition.Top, 90f);
 }
示例#22
0
        internal static void RenderBackgroundInternal3(
            Graphics g,
            Rectangle rect,
            Color baseColor,
            Color borderColor,
            Color innerBorderColor,
            RoundStyle style,
            int roundWidth,
            float basePosition,
            bool drawBorder,
            bool drawGlass,
            LinearGradientMode mode)
        {
            if (drawBorder)
            {
                rect.Width--;
                rect.Height--;
            }
            if (rect.Width < 1 || rect.Height < 1)
            {
                return;
            }
            using (LinearGradientBrush brush = new LinearGradientBrush(
                       rect, Color.Transparent, Color.Transparent, mode))
            {
                FillBrush(brush, baseColor, borderColor, basePosition, drawGlass);
                if (style != RoundStyle.None)
                {
                    using (GraphicsPath path =
                               GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                    {
                        g.FillPath(brush, path);
                    }

                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 170, 0);

                        if (baseColor.A > 0)
                        {
                            Rectangle rectTop = rect;

                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(
                                       rectTop, roundWidth, RoundStyle.Top, false))
                            {
                                using (SolidBrush brushAlpha =
                                           new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                                {
                                    g.FillPath(brushAlpha, pathTop);
                                }
                            }
                        }
                    }

                    if (drawBorder)
                    {
                        using (GraphicsPath path =
                                   GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(borderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }

                        rect.Inflate(-1, -1);
                        using (GraphicsPath path =
                                   GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(innerBorderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }
                    }
                }
                else
                {
                    g.FillRectangle(brush, rect);
                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 200, 0);

                        if (baseColor.A > 80)
                        {
                            Rectangle rectTop = rect;
                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (SolidBrush brushAlpha =
                                       new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                            {
                                g.FillRectangle(brushAlpha, rectTop);
                            }
                        }
                    }

                    if (drawBorder)
                    {
                        using (Pen pen = new Pen(borderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }

                        rect.Inflate(-1, -1);
                        using (Pen pen = new Pen(innerBorderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }
                    }
                }
            }
        }
示例#23
0
 internal void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     RenderBackgroundInternal(g, rect, baseColor, borderColor, innerBorderColor, style, 8, 0.45f, drawBorder, drawGlass, mode);
 }
示例#24
0
 private static RoundStyle CalcRoundStyle(GlassPosition pos, int radius, RoundStyle ownerStyle)
 {
     if (radius < 2 || ownerStyle == RoundStyle.None)
         return RoundStyle.None;
     switch (pos)
     {
         case GlassPosition.Fill:
             return ownerStyle;
         case GlassPosition.Top:
             if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Top)
                 return RoundStyle.Top;
             else
                 return RoundStyle.None;
         case GlassPosition.Bottom:
             if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Bottom)
                 return RoundStyle.Bottom;
             else
                 return RoundStyle.None;
         case GlassPosition.Left:
             if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Left)
                 return RoundStyle.Left;
             else
                 return RoundStyle.None;
         case GlassPosition.Right:
             if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Right)
                 return RoundStyle.Right;
             else
                 return RoundStyle.None;
         default:
             return RoundStyle.None;
     }
 }
示例#25
0
 /// <summary>
 ///     画边框与背景
 /// </summary>
 internal void RenderBackGroundInternal(
     Graphics g,
     Rectangle rect,
     RoundStyle style,
     int roundWidth
     )
 {
     if (ControlStates != ControlState.Normal || AlwaysShowBorder)
     {
         rect.Width--;
         rect.Height--;
         if (style != RoundStyle.None)
         {
             using (var path = DrawHelper.CreateRoundPath(rect, roundWidth, style, false))
             {
                 if (ControlStates != ControlState.Normal)
                 {
                     using (
                         var brush = (ControlStates == ControlState.Pressed)
                             ? new LinearGradientBrush(rect, BaseColorEnd, BaseColor,
                                                       LinearGradientMode.ForwardDiagonal)
                             : new LinearGradientBrush(rect, BaseColor, BaseColorEnd, LinearGradientMode.Vertical)
                         )
                     {
                         if (!ShowSpliteButton)
                         {
                             g.FillPath(brush, path);
                         }
                         else
                         {
                             if (CurrentMousePosition == ButtonMousePosition.Button)
                             {
                                 using (
                                     var buttonpath = DrawHelper.CreateRoundPath(ButtonRect, roundWidth,
                                                                                 RoundStyle.Left, true))
                                 {
                                     g.FillPath(brush, buttonpath);
                                 }
                             }
                             else
                             {
                                 using (
                                     var splitepath = DrawHelper.CreateRoundPath(SpliteButtonRect, roundWidth,
                                                                                 RoundStyle.Right, true))
                                 {
                                     g.FillPath(brush, splitepath);
                                 }
                             }
                         }
                     }
                 }
                 using (var pen = new Pen(_borderColor))
                 {
                     g.DrawPath(pen, path);
                 }
             }
             rect.Inflate(-1, -1);
             using (var path = DrawHelper.CreateRoundPath(rect, roundWidth, style, false))
             {
                 using (var pen = new Pen(InnerBorderColor))
                 {
                     g.DrawPath(pen, path);
                 }
             }
         }
         else
         {
             if (ControlStates != ControlState.Normal)
             {
                 using (
                     var brush = (ControlStates == ControlState.Pressed)
                         ? new LinearGradientBrush(rect, BaseColorEnd, BaseColor,
                                                   LinearGradientMode.ForwardDiagonal)
                         : new LinearGradientBrush(rect, BaseColor, BaseColorEnd, LinearGradientMode.Vertical))
                 {
                     if (!ShowSpliteButton)
                     {
                         g.FillRectangle(brush, rect);
                     }
                     else
                     {
                         if (CurrentMousePosition == ButtonMousePosition.Button)
                         {
                             g.FillRectangle(brush, ButtonRect);
                         }
                         else
                         {
                             g.FillRectangle(brush, SpliteButtonRect);
                         }
                     }
                 }
             }
             using (var pen = new Pen(_borderColor))
             {
                 g.DrawRectangle(pen, rect);
             }
             rect.Inflate(-1, -1);
             using (var pen = new Pen(InnerBorderColor))
             {
                 g.DrawRectangle(pen, rect);
             }
         }
     }
 }
示例#26
0
        internal void RenderScrollBarArrowInternal(
         Graphics g,
         Rectangle rect,
         //Color baseColor,
         //Color borderColor,
         //Color innerBorderColor,
         Color arrowColor,
         RoundStyle roundStyle,
         bool drawBorder,
         bool drawGlass,
         ArrowDirection arrowDirection,
         LinearGradientMode mode)
        {
            //RenderHelper.RenderBackgroundInternal(
            //   g,
            //   rect,
            //   baseColor,
            //   borderColor,
            //   innerBorderColor,
            //   roundStyle,
            //   0,
            //   .45F,
            //   drawBorder,
            //   drawGlass,
            //   mode);

            using (SolidBrush brush = new SolidBrush(arrowColor))
            {
                RenderArrowInternal(
                    g,
                    rect,
                    arrowDirection,
                    brush);
            }
        }
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye,
                                         RectangleGlassPosition position, float angle)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye, position, angle, 0.5f);
 }
示例#28
0
 public static void CreateRegion(IntPtr hWnd, int radius, RoundStyle roundStyle, bool redraw)
 {
     Win32.Struct.RECT lpRect = new Win32.Struct.RECT();
     Win32.NativeMethods.GetWindowRect(hWnd, ref lpRect);
     Rectangle rect = new Rectangle(System.Drawing.Point.Empty, lpRect.Size);
     if (roundStyle != RoundStyle.None)
     {
         using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, radius, roundStyle, true))
         {
             using (Region region = new Region(path))
             {
                 path.Widen(Pens.White);
                 region.Union(path);
                 IntPtr windowDC = Win32.NativeMethods.GetWindowDC(hWnd);
                 try
                 {
                     using (Graphics graphics = Graphics.FromHdc(windowDC))
                     {
                         Win32.NativeMethods.SetWindowRgn(hWnd, region.GetHrgn(graphics), redraw);
                     }
                 }
                 finally
                 {
                     Win32.NativeMethods.ReleaseDC(hWnd, windowDC);
                 }
             }
             return;
         }
     }
     IntPtr hRgn = Win32.NativeMethods.CreateRectRgn(0, 0, rect.Width, rect.Height);
     Win32.NativeMethods.SetWindowRgn(hWnd, hRgn, redraw);
 }
示例#29
0
        /// <summary>
        /// 样式绘制圆角
        /// </summary>
        /// <param name="hWnd">控件句柄</param>
        /// <param name="radius">圆角</param>
        /// <param name="roundStyle">圆角样式</param>
        /// <param name="redraw">是否重画</param>
        public static void CreateRegion(
            IntPtr hWnd,
            int radius,
            RoundStyle roundStyle,
            bool redraw)
        {
            RECT bounds = new RECT();
            NativeMethods.GetWindowRect(hWnd, ref bounds);

            Rectangle rect = new Rectangle(
                Point.Empty, bounds.Size);

            if (roundStyle != RoundStyle.None)
            {
                using (GraphicsPath path =
                    GraphicsPathHelper.CreatePath(
                    rect, radius, roundStyle, true))
                {
                    using (Region region = new Region(path))
                    {
                        path.Widen(Pens.White);
                        region.Union(path);
                        IntPtr hDc = NativeMethods.GetWindowDC(hWnd);
                        try
                        {
                            using (Graphics g = Graphics.FromHdc(hDc))
                            {
                                NativeMethods.SetWindowRgn(hWnd, region.GetHrgn(g), redraw);
                            }
                        }
                        finally
                        {
                            NativeMethods.ReleaseDC(hWnd, hDc);
                        }
                    }
                }
            }
            else
            {
                IntPtr hRgn = NativeMethods.CreateRectRgn(0, 0, rect.Width, rect.Height);
                NativeMethods.SetWindowRgn(hWnd, hRgn, redraw);
            }
        }
 internal void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         rect.Width--;
         rect.Height--;
     }
     if ((rect.Width > 0) && (rect.Height > 0))
     {
         using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
         {
             Rectangle rectangle;
             SolidBrush brush2;
             RectangleF ef;
             Pen pen;
             Color[] colorArray = new Color[] { this.GetColor(baseColor, 0, 0x23, 0x18, 9), this.GetColor(baseColor, 0, 13, 8, 3), baseColor, this.GetColor(baseColor, 0, 0x44, 0x45, 0x36) };
             ColorBlend blend = new ColorBlend();
             float[] numArray = new float[4];
             numArray[1] = basePosition;
             numArray[2] = basePosition + 0.05f;
             numArray[3] = 1f;
             blend.Positions = numArray;
             blend.Colors = colorArray;
             brush.InterpolationColors = blend;
             if (style != RoundStyle.None)
             {
                 GraphicsPath path;
                 using (path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     g.FillPath(brush, path);
                 }
                 if (baseColor.A > 80)
                 {
                     rectangle = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectangle.Height = (int) (rectangle.Height * basePosition);
                     }
                     else
                     {
                         rectangle.Width = (int) (rect.Width * basePosition);
                     }
                     using (GraphicsPath path2 = GraphicsPathHelper.CreatePath(rectangle, roundWidth, RoundStyle.Top, false))
                     {
                         using (brush2 = new SolidBrush(Color.FromArgb(80, 0xff, 0xff, 0xff)))
                         {
                             g.FillPath(brush2, path2);
                         }
                     }
                 }
                 if (drawGlass)
                 {
                     ef = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         ef.Y = rect.Y + (rect.Height * basePosition);
                         ef.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                     }
                     else
                     {
                         ef.X = rect.X + (rect.Width * basePosition);
                         ef.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                     }
                     this.DrawGlass(g, ef, 170, 0);
                 }
                 if (drawBorder)
                 {
                     using (path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                     {
                         using (pen = new Pen(borderColor))
                         {
                             g.DrawPath(pen, path);
                         }
                     }
                     rect.Inflate(-1, -1);
                     using (path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                     {
                         using (pen = new Pen(innerBorderColor))
                         {
                             g.DrawPath(pen, path);
                         }
                     }
                 }
             }
             else
             {
                 g.FillRectangle(brush, rect);
                 if (baseColor.A > 80)
                 {
                     rectangle = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectangle.Height = (int) (rectangle.Height * basePosition);
                     }
                     else
                     {
                         rectangle.Width = (int) (rect.Width * basePosition);
                     }
                     using (brush2 = new SolidBrush(Color.FromArgb(80, 0xff, 0xff, 0xff)))
                     {
                         g.FillRectangle(brush2, rectangle);
                     }
                 }
                 if (drawGlass)
                 {
                     ef = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         ef.Y = rect.Y + (rect.Height * basePosition);
                         ef.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                     }
                     else
                     {
                         ef.X = rect.X + (rect.Width * basePosition);
                         ef.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                     }
                     this.DrawGlass(g, ef, 200, 0);
                 }
                 if (drawBorder)
                 {
                     using (pen = new Pen(borderColor))
                     {
                         g.DrawRectangle(pen, rect);
                     }
                     rect.Inflate(-1, -1);
                     using (pen = new Pen(innerBorderColor))
                     {
                         g.DrawRectangle(pen, rect);
                     }
                 }
             }
         }
     }
 }
示例#31
0
 /// <summary>
 ///
 /// </summary>
 public void SetFinalText(RoundStyle style, string winner)
 {
     FinalUI.SetActive(true);
     FinalUIText.text     = (style == RoundStyle.OneMacht) ? bl_GameTexts.FinalOneMatch : bl_GameTexts.FinalRounds;
     FinalWinnerText.text = string.Format("{0} {1}", winner, bl_GameTexts.FinalWinner);
 }
示例#32
0
 public static void CreateRegion(Control control, Rectangle bounds, int radius, RoundStyle roundStyle)
 {
     using (GraphicsPath path = CreatePath(bounds, radius, roundStyle, true))
     {
         Region region = new Region(path);
         path.Widen(Pens.White);
         region.Union(path);
         control.Region = region;
     }
 }
示例#33
0
 internal static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         rect.Width--;
         rect.Height--;
     }
     if ((rect.Width != 0) && (rect.Height != 0))
     {
         using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
         {
             Color[]    colorArray = new Color[] { GetColor(baseColor, 0, 0x23, 0x18, 9), GetColor(baseColor, 0, 13, 8, 3), baseColor, GetColor(baseColor, 0, 0x23, 0x18, 9) };
             ColorBlend blend      = new ColorBlend();
             float[]    numArray   = new float[4];
             numArray[1]               = basePosition;
             numArray[2]               = basePosition + 0.05f;
             numArray[3]               = 1f;
             blend.Positions           = numArray;
             blend.Colors              = colorArray;
             brush.InterpolationColors = blend;
             if (style != RoundStyle.None)
             {
                 using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     g.FillPath(brush, path);
                 }
                 if (drawGlass)
                 {
                     if (baseColor.A > 80)
                     {
                         Rectangle rectangle = rect;
                         if (mode == LinearGradientMode.Vertical)
                         {
                             rectangle.Height = (int)(rectangle.Height * basePosition);
                         }
                         else
                         {
                             rectangle.Width = (int)(rect.Width * basePosition);
                         }
                         using (GraphicsPath path2 = GraphicsPathHelper.CreatePath(rectangle, roundWidth, RoundStyle.Top, false))
                         {
                             using (SolidBrush brush2 = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                             {
                                 g.FillPath(brush2, path2);
                             }
                         }
                     }
                     RectangleF glassRect = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         glassRect.Y      = rect.Y + (rect.Height * basePosition);
                         glassRect.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                     }
                     else
                     {
                         glassRect.X     = rect.X + (rect.Width * basePosition);
                         glassRect.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                     }
                     ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
                 }
                 if (!drawBorder)
                 {
                     return;
                 }
                 using (GraphicsPath path3 = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     using (Pen pen = new Pen(borderColor))
                     {
                         g.DrawPath(pen, path3);
                     }
                 }
                 rect.Inflate(-1, -1);
                 using (GraphicsPath path4 = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     using (Pen pen2 = new Pen(innerBorderColor))
                     {
                         g.DrawPath(pen2, path4);
                     }
                     return;
                 }
             }
             g.FillRectangle(brush, rect);
             if (drawGlass)
             {
                 if (baseColor.A > 80)
                 {
                     Rectangle rectangle2 = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectangle2.Height = (int)(rectangle2.Height * basePosition);
                     }
                     else
                     {
                         rectangle2.Width = (int)(rect.Width * basePosition);
                     }
                     using (SolidBrush brush3 = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                     {
                         g.FillRectangle(brush3, rectangle2);
                     }
                 }
                 RectangleF ef2 = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     ef2.Y      = rect.Y + (rect.Height * basePosition);
                     ef2.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                 }
                 else
                 {
                     ef2.X     = rect.X + (rect.Width * basePosition);
                     ef2.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                 }
                 ControlPaintEx.DrawGlass(g, ef2, 200, 0);
             }
             if (drawBorder)
             {
                 using (Pen pen3 = new Pen(borderColor))
                 {
                     g.DrawRectangle(pen3, rect);
                 }
                 rect.Inflate(-1, -1);
                 using (Pen pen4 = new Pen(innerBorderColor))
                 {
                     g.DrawRectangle(pen4, rect);
                 }
             }
         }
     }
 }
示例#34
0
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye,
     GlassPosition position, float angle)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye, position, angle, 0.5f);
 }
        //画关闭按钮
        private void RenderSkinFormCloseBoxInternal(
            Graphics g,
            Rectangle rect,
            ControlBoxState state,
            bool active,
            bool minimizeBox,
            bool maximizeBox,
            CCSkinMain form)
        {
            Bitmap btm       = null;
            Color  baseColor = ColorTable.ControlBoxActive;

            if (state == ControlBoxState.Pressed)
            {
                btm       = (Bitmap)form.CloseDownBack;
                baseColor = ColorTable.ControlCloseBoxPressed;
            }
            else if (state == ControlBoxState.Hover)
            {
                btm       = (Bitmap)form.CloseMouseBack;
                baseColor = ColorTable.ControlCloseBoxHover;
            }
            else
            {
                btm       = (Bitmap)form.CloseNormlBack;
                baseColor = active ?
                            ColorTable.ControlBoxActive :
                            ColorTable.ControlBoxDeactive;
            }
            //绘制图片样式
            if (btm != null)
            {
                g.DrawImage(btm, rect);
            }
            else //绘制默认样式
            {
                RoundStyle roundStyle = minimizeBox || maximizeBox ?
                                        RoundStyle.BottomRight : RoundStyle.Bottom;

                using (AntiAliasGraphics antiGraphics = new AntiAliasGraphics(g))
                {
                    RenderHelper.RenderBackgroundInternal(
                        g,
                        rect,
                        baseColor,
                        baseColor,
                        ColorTable.ControlBoxInnerBorder,
                        roundStyle,
                        6,
                        .38F,
                        true,
                        false,
                        LinearGradientMode.Vertical);

                    using (Pen pen = new Pen(ColorTable.Border))
                    {
                        g.DrawLine(pen, rect.X, rect.Y, rect.Right, rect.Y);
                    }

                    using (GraphicsPath path = CreateCloseFlagPath(rect))
                    {
                        g.FillPath(Brushes.White, path);
                        using (Pen pen = new Pen(baseColor))
                        {
                            g.DrawPath(pen, path);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 建立带有圆角样式和标题的路径。
        /// </summary>
        /// <param name="rect">用来简历路径的矩形。</param>
        /// <param name="style">圆角样式。</param>
        /// <param name="radius">圆角大小。</param>
        /// <param name="tabSize">标题大小。</param>
        /// <param name="tabRound">标题是否圆角。</param>
        /// <param name="tabRadius">标题圆角大小。</param>
        /// <param name="correct">是否把矩形长宽减 1,以便画出边框。</param>
        /// <returns>简历的路径。</returns>
        public static GraphicsPath CreateGroupBoxTabGraphicsPath(Rectangle rect, RoundStyle style, float radius, Size tabSize, bool tabRound, float tabRadius, bool correct)
        {
            //校正
            if (correct)
            {
                rect.Width--;
                rect.Height--;
            }
            style    = (float.IsNaN(radius) || radius <= 0f) ? RoundStyle.None : style;
            tabRound = (float.IsNaN(tabRadius) || tabRadius <= 0f) ? false : tabRound;

            //定义
            GraphicsPath path        = new GraphicsPath();
            Rectangle    tabRect     = new Rectangle(rect.Location, tabSize);
            float        diameter    = radius * 2;
            float        tabDiameter = tabRadius * 2;
            Point        pt;

            //左上
            if ((style & RoundStyle.TopLeft) == 0)
            {
                pt = new Point(rect.X, rect.Y);
                path.AddLine(pt, pt);
            }
            else
            {
                path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
            }

            //Tab右上
            if (tabRound)
            {
                if (tabRadius > tabRect.Height)//不到90度
                {
                    double radians = Math.Acos((tabRadius - tabRect.Height) / tabRadius);
                    path.AddArc((float)(tabRect.Right - tabRadius * Math.Sin(radians) - tabRadius),
                                tabRect.Y, tabDiameter, tabDiameter, 270, (float)MathEx.ToDegrees(radians));
                }
                else//到90度
                {
                    path.AddArc(tabRect.Right - tabDiameter, tabRect.Y, tabDiameter, tabDiameter, 270, 90);

                    //Tab右下
                    pt = new Point(tabRect.Right, tabRect.Bottom);
                    path.AddLine(pt, pt);
                }
            }
            else
            {
                pt = new Point(tabRect.Right, tabRect.Y);
                path.AddLine(pt, pt);

                //Tab右下
                pt = new Point(tabRect.Right, tabRect.Bottom);
                path.AddLine(pt, pt);
            }

            //右上
            if ((style & RoundStyle.TopRight) == 0)
            {
                pt = new Point(rect.Right, tabRect.Bottom);
                path.AddLine(pt, pt);
            }
            else
            {
                path.AddArc(rect.Right - diameter, tabRect.Bottom, diameter, diameter, 270, 90);
            }

            //右下
            if ((style & RoundStyle.BottomRight) == 0)
            {
                pt = new Point(rect.Right, rect.Bottom);
                path.AddLine(pt, pt);
            }
            else
            {
                path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
            }

            //左下
            if ((style & RoundStyle.BottomLeft) == 0)
            {
                pt = new Point(rect.X, rect.Bottom);
                path.AddLine(pt, pt);
            }
            else
            {
                path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
            }

            //闭合返回
            path.CloseFigure();
            return(path);
        }
        public static void RenderLinearGradientBackground(Graphics g, Rectangle rect,
            Color color1, Color color2, float angle, int radius, RoundStyle roundType)
        {
            SmoothingMode newMode;
            bool simpleRect = (roundType == RoundStyle.None || radius < 2);
            if (simpleRect)
            {
                newMode = SmoothingMode.HighSpeed;
            }
            else
            {
                newMode = SmoothingMode.AntiAlias;
                rect.Width--;
                rect.Height--;
            }

            if (rect.Width < 1 || rect.Height < 1)
                return;

            using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, newMode))
            {
                using (LinearGradientBrush lb = new LinearGradientBrush(
                    rect, color1, color2, angle))
                {
                    if (simpleRect)
                    {
                        g.FillRectangle(lb, rect);
                    }
                    else
                    {
                        using (GraphicsPath path = GraphicsPathHelper.CreateRoundedRect(rect, radius, roundType, false))
                        {
                            g.FillPath(lb, path);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 创建路径。
        /// </summary>
        /// <param name="rect">用来创建路径的矩形。</param>
        /// <param name="cornerStyle">圆角弯曲样式。</param>
        /// <param name="roundStyle">圆角的样式。</param>
        /// <param name="radius">圆角半径。</param>
        /// <param name="correct">是否把矩形长宽减 1,以便画出边框。</param>
        /// <returns>创建的路径。</returns>
        public static GraphicsPath CreateGraphicsPath(Rectangle rect, CornerStyle cornerStyle, RoundStyle roundStyle, float radius, bool correct)
        {
            //-----------------校准-----------------
            if (correct)
            {
                rect.Width--;
                rect.Height--;
            }

            //-----------------定义返回值-----------------
            GraphicsPath path = new GraphicsPath();

            //-----------------特殊情况处理-----------------
            if (float.IsNaN(radius) || radius <= 0f)
            {
                path.AddRectangle(rect);
                return(path);
            }
            //-----------------临时变量定义-----------------
            float  diameter       = radius * 2;                                          //直径
            float  halfWidth      = rect.Width / 2f;                                     //宽度一半
            float  halfHeight     = rect.Height / 2f;                                    //高度一半
            PointF ptMiddleCenter = new PointF(rect.X + halfWidth, rect.Y + halfHeight); //中心点
            float  lrDegrees      = 0f;                                                  //半径大于半高,圆心角
            float  lrOffset       = 0f;                                                  //半径大于半高,圆弧到边距离

            if ((roundStyle & RoundStyle.All) != 0 && radius > halfHeight)
            {
                double lrRadian = Math.Acos((radius - halfHeight) / radius); //弧度
                lrDegrees = (float)MathEx.ToDegrees(lrRadian);               //角度
                lrOffset  = (float)(radius * Math.Sin(lrRadian));
            }
            float tbDegrees = 0f; //半径大于半宽,圆心角
            float tbOffset  = 0f; //半径大于办宽,圆弧到边距离

            if ((roundStyle & RoundStyle.All) != 0 && radius > halfWidth)
            {
                double tbRadian = Math.Acos((radius - halfWidth) / radius); //弧度
                tbDegrees = (float)MathEx.ToDegrees(tbRadian);              //角度
                tbOffset  = (float)(radius * Math.Sin(tbRadian));
            }
            //临时变量
            PointF ptBegin;
            PointF ptEnd;


            #region 左上
            if ((roundStyle & RoundStyle.TopLeft) == 0)//直角
            {
                if ((cornerStyle & CornerStyle.LeftIn) != 0)
                {
                    ptBegin = new PointF(rect.X + radius, ptMiddleCenter.Y);
                    ptEnd   = new PointF(rect.X, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.LeftOut) != 0)
                {
                    ptBegin = new PointF(rect.X, ptMiddleCenter.Y);
                    ptEnd   = new PointF(rect.X + radius, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.TopIn) != 0)
                {
                    ptBegin = new PointF(rect.X, rect.Y);
                    ptEnd   = new PointF(ptMiddleCenter.X, rect.Y + radius);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.TopOut) != 0)
                {
                    ptBegin = new PointF(rect.X, rect.Y + radius);
                    ptEnd   = new PointF(ptMiddleCenter.X, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else
                {
                    ptBegin = ptEnd = new PointF(rect.X, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
            }
            else//圆角
            {
                if ((cornerStyle & CornerStyle.LeftIn) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.X - radius, rect.Y, diameter, diameter, 270 + lrDegrees, -lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X - radius, rect.Y, diameter, diameter, 0, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.LeftOut) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.X - (radius - lrOffset), rect.Y, diameter, diameter, 270 - lrDegrees, lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
                    }
                }
                else if ((cornerStyle & CornerStyle.TopIn) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.X, rect.Y - radius, diameter, diameter, 180, -tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Y - radius, diameter, diameter, 180, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.TopOut) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.X, rect.Y - (radius - tbOffset), diameter, diameter, 180, tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
                    }
                }
                else
                {
                    path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
                }
            }
            #endregion


            #region 右上
            if ((roundStyle & RoundStyle.TopRight) == 0)
            {
                if ((cornerStyle & CornerStyle.RightIn) != 0)
                {
                    ptBegin = new PointF(rect.Right, rect.Y);
                    ptEnd   = new PointF(rect.Right - radius, ptMiddleCenter.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.RightOut) != 0)
                {
                    ptBegin = new PointF(rect.Right - radius, rect.Y);
                    ptEnd   = new PointF(rect.Right, ptMiddleCenter.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.TopIn) != 0)
                {
                    ptBegin = new PointF(ptMiddleCenter.X, rect.Y + radius);
                    ptEnd   = new PointF(rect.Right, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.TopOut) != 0)
                {
                    ptBegin = new PointF(ptMiddleCenter.X, rect.Y);
                    ptEnd   = new PointF(rect.Right, rect.Y + radius);
                    path.AddLine(ptBegin, ptEnd);
                }
                else//矩形
                {
                    ptBegin = ptEnd = new PointF(rect.Right, rect.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
            }
            else
            {
                if ((cornerStyle & CornerStyle.RightIn) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.Right - radius, rect.Y, diameter, diameter, 270, -lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - radius, rect.Y, diameter, diameter, 270, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.RightOut) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.Right - radius - lrOffset, rect.Y, diameter, diameter, 270, lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
                    }
                }
                else if ((cornerStyle & CornerStyle.TopIn) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.Right - diameter, rect.Y - radius, diameter, diameter, tbDegrees, -tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Y - radius, diameter, diameter, 90, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.TopOut) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.Right - diameter, rect.Y - (radius - tbOffset), diameter, diameter, 360 - tbDegrees, tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
                    }
                }
                else
                {
                    path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
                }
            }
            #endregion


            #region 右下
            if ((roundStyle & RoundStyle.BottomRight) == 0)
            {
                if ((cornerStyle & CornerStyle.RightIn) != 0)
                {
                    ptBegin = new PointF(rect.Right - radius, ptMiddleCenter.Y);
                    ptEnd   = new PointF(rect.Right, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.RightOut) != 0)
                {
                    ptBegin = new PointF(rect.Right, ptMiddleCenter.Y);
                    ptEnd   = new PointF(rect.Right - radius, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.BottomIn) != 0)
                {
                    ptBegin = new PointF(rect.Right, rect.Bottom);
                    ptEnd   = new PointF(ptMiddleCenter.X, rect.Bottom - radius);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.BottomOut) != 0)
                {
                    ptBegin = new PointF(rect.Right, rect.Bottom - radius);
                    ptEnd   = new PointF(ptMiddleCenter.X, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
                else//矩形
                {
                    ptBegin = ptEnd = new PointF(rect.Right, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
            }
            else
            {
                if ((cornerStyle & CornerStyle.RightIn) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.Right - radius, rect.Bottom - diameter, diameter, diameter, 90 + lrDegrees, -lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - radius, rect.Bottom - diameter, diameter, diameter, 180, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.RightOut) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.Right - radius - lrOffset, rect.Bottom - diameter, diameter, diameter, 90 - lrDegrees, lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
                    }
                }
                else if ((cornerStyle & CornerStyle.BottomIn) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.Right - diameter, rect.Bottom - radius, diameter, diameter, 0, -tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Bottom - radius, diameter, diameter, 0, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.BottomOut) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.Right - diameter, rect.Bottom - radius - tbOffset, diameter, diameter, 0, tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
                    }
                }
                else
                {
                    path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
                }
            }
            #endregion


            #region 左下
            if ((roundStyle & RoundStyle.BottomLeft) == 0)
            {
                if ((cornerStyle & CornerStyle.LeftIn) != 0)
                {
                    ptBegin = new PointF(rect.X, rect.Bottom);
                    ptEnd   = new PointF(rect.X + radius, ptMiddleCenter.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.LeftOut) != 0)
                {
                    ptBegin = new PointF(rect.X + radius, rect.Bottom);
                    ptEnd   = new PointF(rect.X, ptMiddleCenter.Y);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.BottomIn) != 0)
                {
                    ptBegin = new PointF(ptMiddleCenter.X, rect.Bottom - radius);
                    ptEnd   = new PointF(rect.X, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
                else if ((cornerStyle & CornerStyle.BottomOut) != 0)
                {
                    ptBegin = new PointF(ptMiddleCenter.X, rect.Bottom);
                    ptEnd   = new PointF(rect.X, rect.Bottom - radius);
                    path.AddLine(ptBegin, ptEnd);
                }
                else
                {
                    ptBegin = ptEnd = new PointF(rect.X, rect.Bottom);
                    path.AddLine(ptBegin, ptEnd);
                }
            }
            else
            {
                if ((cornerStyle & CornerStyle.LeftIn) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.X - radius, rect.Bottom - diameter, diameter, diameter, 90, -lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X - radius, rect.Bottom - diameter, diameter, diameter, 90, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.LeftOut) != 0)
                {
                    if (radius > halfHeight)
                    {
                        path.AddArc(rect.X - (radius - lrOffset), rect.Bottom - diameter, diameter, diameter, 90, lrDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
                    }
                }
                else if ((cornerStyle & CornerStyle.BottomIn) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.X, rect.Bottom - radius, diameter, diameter, 180 + tbDegrees, -tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Bottom - radius, diameter, diameter, 270, -90);
                    }
                }
                else if ((cornerStyle & CornerStyle.BottomOut) != 0)
                {
                    if (radius > halfWidth)
                    {
                        path.AddArc(rect.X, rect.Bottom - radius - tbOffset, diameter, diameter, 180 - tbDegrees, tbDegrees);
                    }
                    else
                    {
                        path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
                    }
                }
                else
                {
                    path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
                }
            }
            #endregion


            //闭合返回
            path.CloseFigure();
            return(path);
        }
示例#39
0
        /// <summary>
        /// 建立帶有圓角的樣式的路徑。
        /// </summary>
        /// <param name="Rect">用來建立路徑的矩形。</param>
        /// <param name="Radius">圓角的大小。</param>
        /// <param name="Style">圓角的樣式。</param>
        /// <param name="Correction">是否把矩形長寬减 1,以便畫出邊框。</param>
        /// <returns>建立的路徑。</returns>
        protected GraphicsPath CreatePath(Rectangle Rect, int Radius, RoundStyle Style, bool Correction)
        {
            GraphicsPath path = new GraphicsPath();

            int radiusCorrection = Correction ? 1 : 0;

            switch (Style)
            {
            case RoundStyle.None:
                path.AddRectangle(Rect);
                break;

            case RoundStyle.All:
                path.AddArc(Rect.X, Rect.Y, Radius, Radius, 180, 90);
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Y,
                    Radius,
                    Radius,
                    270,
                    90);
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius, 0, 90);
                path.AddArc(
                    Rect.X,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius,
                    90,
                    90);
                break;

            case RoundStyle.Left:
                path.AddArc(Rect.X, Rect.Y, Radius, Radius, 180, 90);
                path.AddLine(
                    Rect.Right - radiusCorrection, Rect.Y,
                    Rect.Right - radiusCorrection, Rect.Bottom - radiusCorrection);
                path.AddArc(
                    Rect.X,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius,
                    90,
                    90);
                break;

            case RoundStyle.Right:
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Y,
                    Radius,
                    Radius,
                    270,
                    90);
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius,
                    0,
                    90);
                path.AddLine(Rect.X, Rect.Bottom - radiusCorrection, Rect.X, Rect.Y);
                break;

            case RoundStyle.Top:
                path.AddArc(Rect.X, Rect.Y, Radius, Radius, 180, 90);
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Y,
                    Radius,
                    Radius,
                    270,
                    90);
                path.AddLine(
                    Rect.Right - radiusCorrection, Rect.Bottom - radiusCorrection,
                    Rect.X, Rect.Bottom - radiusCorrection);
                break;

            case RoundStyle.Bottom:
                path.AddArc(
                    Rect.Right - Radius - radiusCorrection,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius,
                    0,
                    90);
                path.AddArc(
                    Rect.X,
                    Rect.Bottom - Radius - radiusCorrection,
                    Radius,
                    Radius,
                    90,
                    90);
                path.AddLine(Rect.X, Rect.Y, Rect.Right - radiusCorrection, Rect.Y);
                break;
            }
            path.CloseFigure();

            return(path);
        }
示例#40
0
 internal static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     checked
     {
         if (drawBorder)
         {
             rect.Width--;
             rect.Height--;
         }
     }
     using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
     {
         Color[] colors = new Color[]
         {
             RenderHelper.GetColor(baseColor, 0, 35, 24, 9),
             RenderHelper.GetColor(baseColor, 0, 13, 8, 3),
             baseColor,
             RenderHelper.GetColor(baseColor, 0, 35, 24, 9)
         };
         linearGradientBrush.InterpolationColors = new ColorBlend
         {
             Positions = new float[]
             {
                 0f,
                 basePosition,
                 basePosition + 0.05f,
                 1f
             },
             Colors = colors
         };
         if (style != RoundStyle.None)
         {
             using (GraphicsPath graphicsPath = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 g.FillPath(linearGradientBrush, graphicsPath);
             }
             checked
             {
                 if (baseColor.A > 80)
                 {
                     Rectangle rect2 = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rect2.Height = (int)unchecked ((float)rect2.Height * basePosition);
                     }
                     else
                     {
                         rect2.Width = (int)unchecked ((float)rect.Width * basePosition);
                     }
                     using (GraphicsPath graphicsPath2 = GraphicsPathHelper.CreatePath(rect2, roundWidth, RoundStyle.Top, false))
                     {
                         using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                         {
                             g.FillPath(solidBrush, graphicsPath2);
                         }
                     }
                 }
             }
             if (drawGlass)
             {
                 RectangleF glassRect = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                     glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f;
                 }
                 else
                 {
                     glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                     glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f;
                 }
                 ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
             }
             if (drawBorder)
             {
                 using (GraphicsPath graphicsPath = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     using (Pen pen = new Pen(borderColor))
                     {
                         g.DrawPath(pen, graphicsPath);
                     }
                 }
                 rect.Inflate(-1, -1);
                 using (GraphicsPath graphicsPath = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                 {
                     using (Pen pen = new Pen(innerBorderColor))
                     {
                         g.DrawPath(pen, graphicsPath);
                     }
                 }
             }
         }
         else
         {
             g.FillRectangle(linearGradientBrush, rect);
             checked
             {
                 if (baseColor.A > 80)
                 {
                     Rectangle rect2 = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rect2.Height = (int)unchecked ((float)rect2.Height * basePosition);
                     }
                     else
                     {
                         rect2.Width = (int)unchecked ((float)rect.Width * basePosition);
                     }
                     using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                     {
                         g.FillRectangle(solidBrush, rect2);
                     }
                 }
             }
             if (drawGlass)
             {
                 RectangleF glassRect = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y      = (float)rect.Y + (float)rect.Height * basePosition;
                     glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f;
                 }
                 else
                 {
                     glassRect.X     = (float)rect.X + (float)rect.Width * basePosition;
                     glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f;
                 }
                 ControlPaintEx.DrawGlass(g, glassRect, 200, 0);
             }
             if (drawBorder)
             {
                 using (Pen pen = new Pen(borderColor))
                 {
                     g.DrawRectangle(pen, rect);
                 }
                 rect.Inflate(-1, -1);
                 using (Pen pen = new Pen(innerBorderColor))
                 {
                     g.DrawRectangle(pen, rect);
                 }
             }
         }
     }
 }
示例#41
0
        internal static void DrawGradientRoundRect(
            Graphics g,
            Rectangle rect,
            Color begin,
            Color end,
            Color border,
            Color innerBorder,
            Blend blend,
            LinearGradientMode mode,
            int radios,
            RoundStyle roundStyle,
            bool drawBorder,
            bool drawInnderBorder)
        {
            using (GraphicsPath path = GraphicsPathHelper.CreatePath(
                rect, radios, roundStyle, true))
            {
                using (LinearGradientBrush brush = new LinearGradientBrush(
                      rect, begin, end, mode))
                {
                    brush.Blend = blend;
                    g.FillPath(brush, path);
                }

                if (drawBorder)
                {
                    using (Pen pen = new Pen(border))
                    {
                        g.DrawPath(pen, path);
                    }
                }
            }

            if (drawInnderBorder)
            {
                rect.Inflate(-1, -1);
                using (GraphicsPath path = GraphicsPathHelper.CreatePath(
                    rect, radios, roundStyle, true))
                {
                    using (Pen pen = new Pen(innerBorder))
                    {
                        g.DrawPath(pen, path);
                    }
                }
            }
        }
示例#42
0
 internal static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     RenderHelper.RenderBackgroundInternal(g, rect, baseColor, borderColor, innerBorderColor, style, 8, drawBorder, drawGlass, mode);
 }
示例#43
0
 public static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         rect.Width--;
         rect.Height--;
     }
     using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
     {
         Color[] colorArray = new Color[] { ColorUtils.GetLightColor(baseColor, 0, 0x23, 0x18, 9), ColorUtils.GetLightColor(baseColor, 0, 13, 8, 3), baseColor, ColorUtils.GetLightColor(baseColor, 0, 0x23, 0x18, 9) };
         ColorBlend blend = new ColorBlend();
         float[] numArray = new float[4];
         numArray[1] = basePosition;
         numArray[2] = basePosition + 0.05f;
         numArray[3] = 1f;
         blend.Positions = numArray;
         blend.Colors = colorArray;
         brush.InterpolationColors = blend;
         if (style != RoundStyle.None)
         {
             using (GraphicsPath path = CreatePath(rect, roundWidth, style, false))
             {
                 g.FillPath(brush, path);
             }
             if (drawGlass)
             {
                 if (baseColor.A > 80)
                 {
                     Rectangle rectangle = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectangle.Height = (int)(rectangle.Height * basePosition);
                     }
                     else
                     {
                         rectangle.Width = (int)(rect.Width * basePosition);
                     }
                     using (GraphicsPath path2 = CreatePath(rectangle, roundWidth, RoundStyle.Top, false))
                     {
                         using (SolidBrush brush2 = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                         {
                             g.FillPath(brush2, path2);
                         }
                     }
                 }
                 RectangleF glassRect = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y = rect.Y + (rect.Height * basePosition);
                     glassRect.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                 }
                 else
                 {
                     glassRect.X = rect.X + (rect.Width * basePosition);
                     glassRect.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                 }
                 DrawGlass(g, glassRect, Color.White, 170, 0);
             }
             if (!drawBorder)
             {
                 return;
             }
             using (GraphicsPath path3 = CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen = new Pen(borderColor))
                 {
                     g.DrawPath(pen, path3);
                 }
             }
             rect.Inflate(-1, -1);
             using (GraphicsPath path4 = CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen2 = new Pen(innerBorderColor))
                 {
                     g.DrawPath(pen2, path4);
                 }
                 return;
             }
         }
         g.FillRectangle(brush, rect);
         if (drawGlass)
         {
             if (baseColor.A > 80)
             {
                 Rectangle rectangle2 = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     rectangle2.Height = (int)(rectangle2.Height * basePosition);
                 }
                 else
                 {
                     rectangle2.Width = (int)(rect.Width * basePosition);
                 }
                 using (SolidBrush brush3 = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                 {
                     g.FillRectangle(brush3, rectangle2);
                 }
             }
             RectangleF ef2 = rect;
             if (mode == LinearGradientMode.Vertical)
             {
                 ef2.Y = rect.Y + (rect.Height * basePosition);
                 ef2.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
             }
             else
             {
                 ef2.X = rect.X + (rect.Width * basePosition);
                 ef2.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
             }
             DrawGlass(g, ef2, Color.White, 200, 0);
         }
         if (drawBorder)
         {
             using (Pen pen3 = new Pen(borderColor))
             {
                 g.DrawRectangle(pen3, rect);
             }
             rect.Inflate(-1, -1);
             using (Pen pen4 = new Pen(innerBorderColor))
             {
                 g.DrawRectangle(pen4, rect);
             }
         }
     }
 }
示例#44
0
 private void DrawCaptionBorder(Graphics g, Rectangle captionRect, int roundWidth, RoundStyle style, Color innerBorderColor)
 {
     using (GraphicsPath path =
                GraphicsPathHelper.CreatePath(captionRect, roundWidth, style, false))
     {
         using (Pen pen = new Pen(innerBorderColor))
         {
             g.SmoothingMode = SmoothingMode.AntiAlias;
             g.DrawPath(pen, path);
         }
     }
 }
示例#45
0
 internal void RenderScrollBarArrowInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, Color arrowColor, RoundStyle roundStyle, bool drawBorder, bool drawGlass, ArrowDirection arrowDirection, LinearGradientMode mode)
 {
     RenderHelper.RenderBackgroundInternal(g, rect, baseColor, borderColor, innerBorderColor, roundStyle, 0, 0.45f, drawBorder, drawGlass, mode);
     using (SolidBrush brush = new SolidBrush(arrowColor))
     {
         this.RenderArrowInternal(g, rect, arrowDirection, brush);
     }
 }
示例#46
0
        private void RenderSkinFormMaximizeBoxInternal(
            Graphics g,
            Rectangle rect,
            ControlBoxState state,
            bool active,
            bool minimizeBox,
            bool maximize,
            SkinForm form)
        {
            Bitmap          image     = null;
            SkinPictureForm imageForm = (SkinPictureForm)form;
            Color           baseColor = ColorTable.ControlBoxActive;

            if (state == ControlBoxState.Pressed)
            {
                image     = maximize ? (Bitmap)imageForm.MaxDownBack : (Bitmap)imageForm.RestoreDownBack;
                baseColor = ColorTable.ControlBoxPressed;
            }
            else if (state == ControlBoxState.Hover)
            {
                image     = maximize ? (Bitmap)imageForm.MaxMouseBack : (Bitmap)imageForm.RestoreMouseBack;
                baseColor = ColorTable.ControlBoxHover;
            }
            else
            {
                image     = maximize ? (Bitmap)imageForm.MaxNormlBack : (Bitmap)imageForm.RestoreNormlBack;
                baseColor = active ? ColorTable.ControlBoxActive : ColorTable.ControlBoxDeactive;
            }

            if (image != null)
            {
                g.DrawImage(image, rect);
            }
            else
            {
                RoundStyle roundStyle = minimizeBox ?
                                        RoundStyle.None : RoundStyle.BottomLeft;

                using (AntiAliasGraphics antiGraphics = new AntiAliasGraphics(g))
                {
                    RenderHelper.RenderBackgroundInternal(
                        g,
                        rect,
                        baseColor,
                        baseColor,
                        ColorTable.ControlBoxInnerBorder,
                        roundStyle,
                        6,
                        .38F,
                        true,
                        false,
                        LinearGradientMode.Vertical);

                    using (Pen pen = new Pen(ColorTable.Border))
                    {
                        g.DrawLine(pen, rect.X, rect.Y, rect.Right, rect.Y);
                    }

                    using (GraphicsPath path = DrawUtil.CreateMaximizeFlafPath(rect, maximize))
                    {
                        g.FillPath(Brushes.White, path);
                        using (Pen pen = new Pen(baseColor))
                        {
                            g.DrawPath(pen, path);
                        }
                    }
                }
            }
        }
示例#47
0
        internal static void RenderBackgroundInternal(
           Graphics g,
           Rectangle rect,
           Color baseColor,
           Color borderColor,
           Color innerBorderColor,
           RoundStyle style,
           int roundWidth,
           float basePosition,
           bool drawBorder,
           bool drawGlass,
           LinearGradientMode mode)
        {
            if (drawBorder)
            {
                rect.Width--;
                rect.Height--;
            }

            if (rect.Width == 0 || rect.Height == 0)
            {
                return;
            }

            using (LinearGradientBrush brush = new LinearGradientBrush(
                rect, Color.Transparent, Color.Transparent, mode))
            {
                Color[] colors = new Color[4];
                colors[0] = GetColor(baseColor, 0, 35, 24, 9);
                colors[1] = GetColor(baseColor, 0, 13, 8, 3);
                colors[2] = baseColor;
                colors[3] = GetColor(baseColor, 0, 35, 24, 9);

                ColorBlend blend = new ColorBlend();
                blend.Positions = new float[] { 0.0f, basePosition, basePosition + 0.05f, 1.0f };
                blend.Colors = colors;
                brush.InterpolationColors = blend;
                if (style != RoundStyle.None)
                {
                    using (GraphicsPath path =
                        GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                    {
                        g.FillPath(brush, path);
                    }

                    if (baseColor.A > 80)
                    {
                        Rectangle rectTop = rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            rectTop.Height = (int)(rectTop.Height * basePosition);
                        }
                        else
                        {
                            rectTop.Width = (int)(rect.Width * basePosition);
                        }
                        using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(
                            rectTop, roundWidth, RoundStyle.Top, false))
                        {
                            using (SolidBrush brushAlpha =
                                new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                            {
                                g.FillPath(brushAlpha, pathTop);
                            }
                        }
                    }

                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
                    }

                    if (drawBorder)
                    {
                        using (GraphicsPath path =
                            GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(borderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }

                        rect.Inflate(-1, -1);
                        using (GraphicsPath path =
                            GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(innerBorderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }
                    }
                }
                else
                {
                    g.FillRectangle(brush, rect);
                    if (baseColor.A > 80)
                    {
                        Rectangle rectTop = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            rectTop.Height = (int)(rectTop.Height * basePosition);
                        }
                        else
                        {
                            rectTop.Width = (int)(rect.Width * basePosition);
                        }
                        using (SolidBrush brushAlpha =
                            new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                        {
                            g.FillRectangle(brushAlpha, rectTop);
                        }
                    }

                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 200, 0);
                    }

                    if (drawBorder)
                    {
                        using (Pen pen = new Pen(borderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }

                        rect.Inflate(-1, -1);
                        using (Pen pen = new Pen(innerBorderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }
                    }
                }
            }
        }
 internal static void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode)
 {
     if (drawBorder)
     {
         rect.Width--;
         rect.Height--;
     }
     using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode))
     {
         Color[] colors = new Color[] { GetColor(baseColor, 0, 0x23, 0x18, 9), GetColor(baseColor, 0, 13, 8, 3), baseColor, GetColor(baseColor, 0, 0x23, 0x18, 9) };
         ColorBlend blend = new ColorBlend();
         float[] CS_0_0000 = new float[4];
         CS_0_0000[1] = basePosition;
         CS_0_0000[2] = basePosition + 0.05f;
         CS_0_0000[3] = 1f;
         blend.Positions = CS_0_0000;
         blend.Colors = colors;
         brush.InterpolationColors = blend;
         if (style != RoundStyle.None)
         {
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 g.FillPath(brush, path);
             }
             if (drawGlass)
             {
                 RectangleF glassRect = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     glassRect.Y = rect.Y + (rect.Height * basePosition);
                     glassRect.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
                 }
                 else
                 {
                     glassRect.X = rect.X + (rect.Width * basePosition);
                     glassRect.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
                 }
                 CCWin.SkinControl.ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
                 if (baseColor.A > 0)
                 {
                     Rectangle rectTop = rect;
                     if (mode == LinearGradientMode.Vertical)
                     {
                         rectTop.Height = (int) (rectTop.Height * basePosition);
                     }
                     else
                     {
                         rectTop.Width = (int) (rect.Width * basePosition);
                     }
                     using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(rectTop, roundWidth, RoundStyle.Top, false))
                     {
                         using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                         {
                             g.FillPath(brushAlpha, pathTop);
                         }
                     }
                 }
             }
             if (!drawBorder)
             {
                 return;
             }
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen = new Pen(borderColor))
                 {
                     g.DrawPath(pen, path);
                 }
             }
             rect.Inflate(-1, -1);
             using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
             {
                 using (Pen pen = new Pen(innerBorderColor))
                 {
                     g.DrawPath(pen, path);
                 }
                 return;
             }
         }
         g.FillRectangle(brush, rect);
         if (drawGlass)
         {
             RectangleF glassRect = rect;
             if (mode == LinearGradientMode.Vertical)
             {
                 glassRect.Y = rect.Y + (rect.Height * basePosition);
                 glassRect.Height = (rect.Height - (rect.Height * basePosition)) * 2f;
             }
             else
             {
                 glassRect.X = rect.X + (rect.Width * basePosition);
                 glassRect.Width = (rect.Width - (rect.Width * basePosition)) * 2f;
             }
             CCWin.SkinControl.ControlPaintEx.DrawGlass(g, glassRect, 200, 0);
             if (baseColor.A > 80)
             {
                 Rectangle rectTop = rect;
                 if (mode == LinearGradientMode.Vertical)
                 {
                     rectTop.Height = (int) (rectTop.Height * basePosition);
                 }
                 else
                 {
                     rectTop.Width = (int) (rect.Width * basePosition);
                 }
                 using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(0x80, 0xff, 0xff, 0xff)))
                 {
                     g.FillRectangle(brushAlpha, rectTop);
                 }
             }
         }
         if (drawBorder)
         {
             using (Pen pen = new Pen(borderColor))
             {
                 g.DrawRectangle(pen, rect);
             }
             rect.Inflate(-1, -1);
             using (Pen pen = new Pen(innerBorderColor))
             {
                 g.DrawRectangle(pen, rect);
             }
         }
     }
 }
示例#49
0
 internal static void DrawGradientRoundRect(Graphics g, Rectangle rect, Color begin, Color end, Color border,
                                            Color innerBorder, Blend blend, LinearGradientMode mode, int radios, RoundStyle roundStyle, bool drawBorder,
                                            bool drawInnderBorder)
 {
     using (var path = DrawHelper.CreateRoundPath(rect, radios, roundStyle, true)) //
     {
         using (var brush = new LinearGradientBrush(rect, begin, end, mode))
         {
             brush.Blend = blend;
             g.FillPath(brush, path);
         }
         if (drawBorder)
         {
             using (var pen = new Pen(border))
             {
                 g.DrawPath(pen, path);
             }
         }
     }
     if (drawInnderBorder)
     {
         rect.Inflate(-1, -1);
         using (var path2 = DrawHelper.CreateRoundPath(rect, radios, roundStyle, true)) //
         {
             using (var pen2 = new Pen(innerBorder))
             {
                 g.DrawPath(pen2, path2);
             }
         }
     }
 }
        private void DrawBorder(
           Graphics g, Rectangle rect, RoundStyle roundStyle, int radius)
        {
            rect.Width -= 1;
            rect.Height -= 1;
            using (GraphicsPath path = GraphicsPathHelper.CreatePath(
                rect, radius, roundStyle, false))
            {
                using (Pen pen = new Pen(ColorTable.Border))
                {
                    g.DrawPath(pen, path);
                }
            }

            rect.Inflate(-1, -1);
            using (GraphicsPath path = GraphicsPathHelper.CreatePath(
                rect, radius, roundStyle, false))
            {
                using (Pen pen = new Pen(ColorTable.InnerBorder))
                {
                    g.DrawPath(pen, path);
                }
            }
        }
        private static RoundStyle CalcRoundStyle(RectangleGlassPosition pos, int radius, RoundStyle ownerStyle)
        {
            if (radius < 2 || ownerStyle == RoundStyle.None)
            {
                return(RoundStyle.None);
            }
            switch (pos)
            {
            case RectangleGlassPosition.Fill:
                return(ownerStyle);

            case RectangleGlassPosition.Top:
                if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Top)
                {
                    return(RoundStyle.Top);
                }
                else
                {
                    return(RoundStyle.None);
                }

            case RectangleGlassPosition.Bottom:
                if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Bottom)
                {
                    return(RoundStyle.Bottom);
                }
                else
                {
                    return(RoundStyle.None);
                }

            case RectangleGlassPosition.Left:
                if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Left)
                {
                    return(RoundStyle.Left);
                }
                else
                {
                    return(RoundStyle.None);
                }

            case RectangleGlassPosition.Right:
                if (ownerStyle == RoundStyle.All || ownerStyle == RoundStyle.Right)
                {
                    return(RoundStyle.Right);
                }
                else
                {
                    return(RoundStyle.None);
                }

            default:
                return(RoundStyle.None);
            }
        }
        private void DrawFormBackground(Graphics g, Rectangle rect , int radius , RoundStyle style)
        {
            using (AntiAliasGraphics antiGraphics = new AntiAliasGraphics(g))
            {
                Image formImage = ColorTable.CaptionBackground;
                if (formImage == null) return;
                g.SmoothingMode = SmoothingMode.AntiAlias;
                //g.CompositingQuality = CompositingQuality.HighQuality;
                //g.DrawImage(formImage, rect );


                using (Brush brush = new TextureBrush(formImage , WrapMode.Clamp))
                {
                    rect.X -= 1;
                    rect.Y -= 1;
                    rect.Width += 1;
                    rect.Height += 1;
                    using (GraphicsPath path = GraphicsPathHelper.CreatePath(
                       rect, radius, style, false))
                    {
                        g.FillPath(brush, path);
                    }
                }
            }
            
        }
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye, RectangleGlassPosition.Top, 90f);
 }
 private void DrawCaptionBorder(Graphics g, Rectangle captionRect , int roundWidth , RoundStyle style , Color innerBorderColor )
 {
     using (GraphicsPath path =
                  GraphicsPathHelper.CreatePath(captionRect, roundWidth, style, false))
     {
         using (Pen pen = new Pen(innerBorderColor))
         {
             g.SmoothingMode = SmoothingMode.AntiAlias;
             g.DrawPath(pen, path);
         }
     }
 }
 public static void RenderRectangleGlass(Graphics g, Rectangle ownerRect, int ownerRadius, RoundStyle ownerRoundTye,
                                         RectangleGlassPosition position, float angle, float glassLengthFactor)
 {
     RenderRectangleGlass(g, ownerRect, ownerRadius, ownerRoundTye,
                          position, angle, glassLengthFactor, Color.White, 220, 60);
 }
示例#56
0
 public static void CreateRegion(Control control, Rectangle bounds, int radius, RoundStyle roundStyle)
 {
     using (var path = DrawHelper.CreateRoundPath(bounds, radius, roundStyle, true)) //
     {
         var region = new Region(path);
         path.Widen(Pens.White);
         region.Union(path);
         control.Region = region;
     }
 }
示例#57
0
        public static void RenderBackgroundInternal(
            Graphics g,
            Rectangle rect,
            Color baseColor,
            Color borderColor,
            Color innerBorderColor,
            RoundStyle style,
            int roundWidth,
            float basePosition,
            bool drawBorder,
            bool drawGlass,
            LinearGradientMode mode)
        {
            if (drawBorder)
            {
                rect.Width--;
                rect.Height--;
            }

            using (LinearGradientBrush brush = new LinearGradientBrush(
                       rect, Color.Transparent, Color.Transparent, mode))
            {
                Color[] colors = new Color[4];
                colors[0] = GetColor(baseColor, 0, 35, 24, 9);
                colors[1] = GetColor(baseColor, 0, 13, 8, 3);
                colors[2] = baseColor;
                colors[3] = GetColor(baseColor, 0, 35, 24, 9);

                ColorBlend blend = new ColorBlend();
                blend.Positions           = new float[] { 0.0f, basePosition, basePosition + 0.05f, 1.0f };
                blend.Colors              = colors;
                brush.InterpolationColors = blend;
                if (style != RoundStyle.None)
                {
                    using (GraphicsPath path =
                               GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                    {
                        g.FillPath(brush, path);
                    }

                    if (drawGlass)
                    {
                        if (baseColor.A > 80)
                        {
                            Rectangle rectTop = rect;

                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(
                                       rectTop, roundWidth, RoundStyle.Top, false))
                            {
                                using (SolidBrush brushAlpha =
                                           new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                                {
                                    g.FillPath(brushAlpha, pathTop);
                                }
                            }
                        }

                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 170, 0);
                    }

                    if (drawBorder)
                    {
                        using (GraphicsPath path =
                                   GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(borderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }

                        rect.Inflate(-1, -1);
                        using (GraphicsPath path =
                                   GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(innerBorderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }
                    }
                }
                else
                {
                    g.FillRectangle(brush, rect);

                    if (drawGlass)
                    {
                        if (baseColor.A > 80)
                        {
                            Rectangle rectTop = rect;
                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (SolidBrush brushAlpha =
                                       new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                            {
                                g.FillRectangle(brushAlpha, rectTop);
                            }
                        }

                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 200, 0);
                    }

                    if (drawBorder)
                    {
                        using (Pen pen = new Pen(borderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }

                        rect.Inflate(-1, -1);
                        using (Pen pen = new Pen(innerBorderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }
                    }
                }
            }
        }
示例#58
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        /// <param name="Rect"></param>
        /// <param name="BaseColor"></param>
        /// <param name="BorderColor"></param>
        /// <param name="InnerBorderColor"></param>
        /// <param name="Style"></param>
        /// <param name="RoundWidth"></param>
        /// <param name="BasePosition"></param>
        /// <param name="DrawBorder"></param>
        /// <param name="DrawGlass"></param>
        /// <param name="mode"></param>
        internal void RenderBackgroundInternal(
            Graphics G,
            Rectangle Rect,
            Color BaseColor,
            Color BorderColor,
            Color InnerBorderColor,
            RoundStyle Style,
            int RoundWidth,
            float BasePosition,
            bool DrawBorder,
            bool DrawGlass,
            LinearGradientMode mode)
        {
            if (DrawBorder)
            {
                Rect.Width--;
                Rect.Height--;
            }

            using (LinearGradientBrush brush = new LinearGradientBrush(
                       Rect, Color.Transparent, Color.Transparent, mode))
            {
                Color[] colors = new Color[4];

                if (this.RStyle == RoundStyle.None)
                {
                    colors[0]             =
                        colors[1]         =
                            colors[2]     =
                                colors[3] = BaseColor;
                }
                else
                {
                    colors[0] = GetColor(BaseColor, 0, 35, 24, 9);
                    colors[1] = GetColor(BaseColor, 0, 13, 8, 3);
                    colors[2] = BaseColor;
                    colors[3] = GetColor(BaseColor, 0, 68, 69, 54);
                }
                ColorBlend blend = new ColorBlend();
                blend.Positions           = new float[] { 0.0f, BasePosition, BasePosition + 0.05f, 1.0f };
                blend.Colors              = colors;
                brush.InterpolationColors = blend;
                if (Style != RoundStyle.None)
                {
                    using (GraphicsPath path = SkinButtonGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false))
                    {
                        G.FillPath(brush, path);
                    }

                    if (BaseColor.A > 80)
                    {
                        Rectangle rectTop = Rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            rectTop.Height = (int)(rectTop.Height * BasePosition);
                        }
                        else
                        {
                            rectTop.Width = (int)(Rect.Width * BasePosition);
                        }
                        using (GraphicsPath pathTop = SkinButtonGraphicsPathHelper.CreatePath(
                                   rectTop, RoundWidth, RoundStyle.Top, false))
                        {
                            using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255)))
                            {
                                G.FillPath(brushAlpha, pathTop);
                            }
                        }
                    }

                    if (DrawGlass)
                    {
                        RectangleF glassRect = Rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = Rect.Y + Rect.Height * BasePosition;
                            glassRect.Height = (Rect.Height - Rect.Height * BasePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = Rect.X + Rect.Width * BasePosition;
                            glassRect.Width = (Rect.Width - Rect.Width * BasePosition) * 2;
                        }
                        this.DrawGlass(G, glassRect, 170, 0);
                    }

                    if (DrawBorder)
                    {
                        using (GraphicsPath path = SkinButtonGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false))
                        {
                            using (Pen pen = new Pen(BorderColor))
                            {
                                G.DrawPath(pen, path);
                            }
                        }

                        Rect.Inflate(-1, -1);
                        using (GraphicsPath path = SkinButtonGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false))
                        {
                            using (Pen pen = new Pen(InnerBorderColor))
                            {
                                G.DrawPath(pen, path);
                            }
                        }
                    }
                }
                else
                {
                    G.FillRectangle(brush, Rect);

                    if (BaseColor.A > 80)
                    {
                        Rectangle rectTop = Rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            rectTop.Height = (int)(rectTop.Height * BasePosition);
                        }
                        else
                        {
                            rectTop.Width = (int)(Rect.Width * BasePosition);
                        }
                        using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255)))
                        {
                            G.FillRectangle(brushAlpha, rectTop);
                        }
                    }

                    if (DrawGlass)
                    {
                        RectangleF glassRect = Rect;

                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y      = Rect.Y + Rect.Height * BasePosition;
                            glassRect.Height = (Rect.Height - Rect.Height * BasePosition) * 2;
                        }
                        else
                        {
                            glassRect.X     = Rect.X + Rect.Width * BasePosition;
                            glassRect.Width = (Rect.Width - Rect.Width * BasePosition) * 2;
                        }
                        this.DrawGlass(G, glassRect, 200, 0);
                    }

                    if (DrawBorder)
                    {
                        using (Pen pen = new Pen(BorderColor))
                        {
                            G.DrawRectangle(pen, Rect);
                        }
                        Rect.Inflate(-1, -1);

                        using (Pen pen = new Pen(InnerBorderColor))
                        {
                            G.DrawRectangle(pen, Rect);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 建立带有圆角样式的路径。
        /// </summary>
        /// <param name="rect">用来建立路径的矩形。</param>
        /// <param name="_radius">圆角的大小。</param>
        /// <param name="style">圆角的样式。</param>
        /// <param name="correction">是否把矩形长宽减 1,以便画出边框。</param>
        /// <returns>建立的路径。</returns>
        public static GraphicsPath CreatePath(
            Rectangle rect, int radius, RoundStyle style, bool correction)
        {
            GraphicsPath path             = new GraphicsPath();
            int          radiusCorrection = correction ? 1 : 0;

            switch (style)
            {
            case RoundStyle.None:
                path.AddRectangle(rect);
                break;

            case RoundStyle.All:
                path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Y,
                    radius,
                    radius,
                    270,
                    90);
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius, 0, 90);
                path.AddArc(
                    rect.X,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius,
                    90,
                    90);
                break;

            case RoundStyle.Left:
                path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
                path.AddLine(
                    rect.Right - radiusCorrection, rect.Y,
                    rect.Right - radiusCorrection, rect.Bottom - radiusCorrection);
                path.AddArc(
                    rect.X,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius,
                    90,
                    90);
                break;

            case RoundStyle.Right:
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Y,
                    radius,
                    radius,
                    270,
                    90);
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius,
                    0,
                    90);
                path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y);
                break;

            case RoundStyle.Top:
                path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Y,
                    radius,
                    radius,
                    270,
                    90);
                path.AddLine(
                    rect.Right - radiusCorrection, rect.Bottom - radiusCorrection,
                    rect.X, rect.Bottom - radiusCorrection);
                break;

            case RoundStyle.Bottom:
                path.AddArc(
                    rect.Right - radius - radiusCorrection,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius,
                    0,
                    90);
                path.AddArc(
                    rect.X,
                    rect.Bottom - radius - radiusCorrection,
                    radius,
                    radius,
                    90,
                    90);
                path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
                break;
            }
            path.CloseFigure();

            return(path);
        }
示例#60
0
        internal static void RenderBackgroundInternal3(
            Graphics g,
            Rectangle rect,
            Color baseColor,
            Color borderColor,
            Color innerBorderColor,
            RoundStyle style,
            int roundWidth,
            float basePosition,
            bool drawBorder,
            bool drawGlass,
            LinearGradientMode mode)
        {
            if (drawBorder)
            {
                rect.Width--;
                rect.Height--;
            }
            if (rect.Width < 1 || rect.Height < 1) { return; }
            using (LinearGradientBrush brush = new LinearGradientBrush(
                rect, Color.Transparent, Color.Transparent, mode))
            {
                FillBrush(brush, baseColor, borderColor, basePosition, drawGlass);
                if (style != RoundStyle.None)
                {
                    using (GraphicsPath path =
                        GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                    {
                        g.FillPath(brush, path);
                    }

                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 170, 0);

                        if (baseColor.A > 0)
                        {
                            Rectangle rectTop = rect;

                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(
                                rectTop, roundWidth, RoundStyle.Top, false))
                            {
                                using (SolidBrush brushAlpha =
                                    new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                                {
                                    g.FillPath(brushAlpha, pathTop);
                                }
                            }
                        }
                    }

                    if (drawBorder)
                    {
                        using (GraphicsPath path =
                            GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(borderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }

                        rect.Inflate(-1, -1);
                        using (GraphicsPath path =
                            GraphicsPathHelper.CreatePath(rect, roundWidth, style, false))
                        {
                            using (Pen pen = new Pen(innerBorderColor))
                            {
                                g.DrawPath(pen, path);
                            }
                        }
                    }
                }
                else
                {
                    g.FillRectangle(brush, rect);
                    if (drawGlass)
                    {
                        RectangleF glassRect = rect;
                        if (mode == LinearGradientMode.Vertical)
                        {
                            glassRect.Y = rect.Y + rect.Height * basePosition;
                            glassRect.Height = (rect.Height - rect.Height * basePosition) * 2;
                        }
                        else
                        {
                            glassRect.X = rect.X + rect.Width * basePosition;
                            glassRect.Width = (rect.Width - rect.Width * basePosition) * 2;
                        }
                        ControlPaintEx.DrawGlass(g, glassRect, 200, 0);

                        if (baseColor.A > 80)
                        {
                            Rectangle rectTop = rect;
                            if (mode == LinearGradientMode.Vertical)
                            {
                                rectTop.Height = (int)(rectTop.Height * basePosition);
                            }
                            else
                            {
                                rectTop.Width = (int)(rect.Width * basePosition);
                            }
                            using (SolidBrush brushAlpha =
                                new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
                            {
                                g.FillRectangle(brushAlpha, rectTop);
                            }
                        }
                    }

                    if (drawBorder)
                    {
                        using (Pen pen = new Pen(borderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }

                        rect.Inflate(-1, -1);
                        using (Pen pen = new Pen(innerBorderColor))
                        {
                            g.DrawRectangle(pen, rect);
                        }
                    }
                }
            }
        }