示例#1
0
        public SmartCheckBox()
        {
            base.SetStyle(ControlStyles.UserPaint |
                ControlStyles.ResizeRedraw |
                ControlStyles.AllPaintingInWmPaint |
                ControlStyles.SupportsTransparentBackColor |
                ControlStyles.OptimizedDoubleBuffer, true);

            base.AutoSize = false;
            state = SmartButtonState.Normal;
        }
        public static void RenderRadioButton(Graphics g, Rectangle rect, SmartRadioButtonThemeBase xtheme,
            bool enable, bool selected, SmartButtonState state, string text,
            CheckMarkAlignment markAlign, bool drawFocus)
        {
            Rectangle rectMark, rectText;

            GetCheckRectAndTextRect(
                rect,
                xtheme.InnerPaddingWidth,
                xtheme.RadioMarkWidth,
                xtheme.SpaceBetweenMarkAndText,
                markAlign,
                text,
                xtheme.TextFont,
                out rectMark,
                out rectText);

            RadioMarkPainter.RenderRadioMark(
                g,
                rectMark,
                xtheme,
                enable,
                selected,
                state);
            System.Windows.Forms.TextRenderer.DrawText(
                g,
                text,
                xtheme.TextFont,
                rectText,
                enable ? xtheme.TextColor : xtheme.TextColorDisabled,
                TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
            if (drawFocus)
                BasicBlockPainter.RenderFocusRect(g, rectText, 0);

            //rectMark.Width--;
            //rectMark.Height--;
            //g.DrawRectangle(Pens.Red, rectMark);

            //rectText.Width--;
            //rectText.Height--;
            //g.DrawRectangle(Pens.Blue, rectText);

            //rect.Width--;
            //rect.Height--;
            //g.DrawRectangle(Pens.Black, rect);
        }
        public static void RenderCheckButton(Graphics g, Rectangle rect, SmartCheckBoxThemeBase xtheme,
            bool enable, CheckState checkState, SmartButtonState state, string text,
            CheckMarkAlignment checkAlign, bool drawFocus)
        {
            Rectangle rectCheck, rectText;

            RadioButtonPainter.GetCheckRectAndTextRect(
                rect,
                xtheme.InnerPaddingWidth,
                xtheme.CheckRectWidth,
                xtheme.SpaceBetweenCheckMarkAndText,
                checkAlign,
                text,
                xtheme.TextFont,
                out rectCheck,
                out rectText);

            CheckRectPainter.RenderCheckRect(
                g,
                rectCheck,
                xtheme,
                enable,
                checkState,
                state);

            rectText.Offset(0, -1);
            TextRenderer.DrawText(
                g,
                text,
                xtheme.TextFont,
                rectText,
                enable ? xtheme.TextColor : xtheme.TextColorDisabled,
                TextFormatFlags.Left);

            if (drawFocus)
                BasicBlockPainter.RenderFocusRect(g, rectText, 0);
        }
        public static void RenderCheckRect(Graphics g, Rectangle rect, SmartCheckBoxThemeBase xtheme,
            bool enable, CheckState checkState, SmartButtonState state)
        {
            if (rect.Width < 1 || rect.Height < 1)
                return;

            // get back-color
            Color backColor;
            if (!enable)
            {
                backColor = xtheme.CheckRectBackColorDisabled;
            }
            else
            {
                switch (state)
                {
                    case SmartButtonState.Hover:
                        backColor = xtheme.CheckRectBackColorHighLight;
                        break;
                    case SmartButtonState.Pressed:
                        backColor = xtheme.CheckRectBackColorPressed;
                        break;
                    default:
                        backColor = xtheme.CheckRectBackColorNormal;
                        break;
                }
            }

            // get outter-rect-color
            Color rectColor = enable ? xtheme.CheckRectColor : xtheme.CheckRectColorDisabled;

            // get inner-flag-color
            Color flagColor = enable ? xtheme.CheckFlagColor : xtheme.CheckFlagColorDisabled;

            using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, SmoothingMode.HighSpeed))
            {
                // draw check rect backcolor
                using (SolidBrush sb = new SolidBrush(backColor))
                {
                    g.FillRectangle(sb, rect);
                }

                // draw check rect border
                using (Pen p = new Pen(rectColor))
                {
                    rect.Height--;
                    rect.Width--;
                    g.DrawRectangle(p, rect);

                    // high light
                    if (xtheme.HighLightCheckRect && state == SmartButtonState.Hover && enable)
                    {
                        using (Pen p2 = new Pen(Color.FromArgb(40, rectColor)))
                        {
                            p2.Width = 3;
                            p2.Alignment = PenAlignment.Center;
                            g.DrawRectangle(p2, rect);
                        }
                    }

                    rect.Height++;
                    rect.Width++;
                }

                // draw Indeterminate flag
                if (checkState == CheckState.Indeterminate)
                {
                    rect.Inflate(-xtheme.InnerRectInflate, -xtheme.InnerRectInflate);
                    using (SolidBrush sb = new SolidBrush(flagColor))
                    {
                        g.FillRectangle(sb, rect);
                    }
                }
            }

            // draw check flag
            if (checkState == CheckState.Checked)
            {
                using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, SmoothingMode.AntiAlias))
                {
                    rect.Inflate(-2, -2);
                    rect.Height -= 3;
                    rect.Width--;
                    PointF p1 = new PointF(rect.X, rect.Y + rect.Height / 2.0f);
                    PointF p2 = new PointF(rect.X + rect.Width / 3.0f, rect.Bottom);
                    PointF p3 = new PointF(rect.Right + 1, rect.Y - 1);
                    using (Pen p = new Pen(flagColor))
                    {
                        p.Width = 1.6f;
                        p.StartCap = LineCap.Round;
                        p.EndCap = LineCap.Round;
                        g.DrawLines(p, new PointF[] { p1, p2, p3 });

                        p2.Y += 1.8f;
                        g.DrawLines(p, new PointF[] { p1, p2, p3 });
                    }
                }
            }
        }
示例#5
0
 protected override void OnMouseUp(MouseEventArgs mevent)
 {
     base.OnMouseUp(mevent);
     if (ClientRectangle.Contains(mevent.Location))
         state = SmartButtonState.Hover;
     else
         state = SmartButtonState.Normal;
     base.Invalidate();
 }
示例#6
0
 protected override void OnMouseLeave(EventArgs eventargs)
 {
     base.OnMouseLeave(eventargs);
     state = SmartButtonState.Normal;
 }
示例#7
0
 protected override void OnMouseEnter(EventArgs eventargs)
 {
     base.OnMouseEnter(eventargs);
     state = SmartButtonState.Hover;
 }
示例#8
0
 protected override void OnMouseDown(MouseEventArgs mevent)
 {
     base.OnMouseDown(mevent);
     state = SmartButtonState.Pressed;
     base.Invalidate();
 }
示例#9
0
 private void SetButtonState(Point p, SmartButtonState newState)
 {
     wlMiddleButton.State = wlSideButton2.State = wlSideButton1.State = SmartButtonState.Normal;
     switch (CheckLocation(p))
     {
         case LocationResult.MiddleButton:
             wlMiddleButton.State = newState;
             break;
         case LocationResult.SideButton1:
             wlSideButton1.State = newState;
             break;
         case LocationResult.SideButton2:
             wlSideButton2.State = newState;
             break;
     }
 }
        public static void RenderRadioMark(Graphics g, Rectangle rect,
            SmartRadioButtonThemeBase xtheme, bool enable, bool selected, SmartButtonState state)
        {
            if (rect.Width < 1 || rect.Height < 1)
                return;

            // get back-color
            Color backColor;
            if (!enable)
            {
                backColor = xtheme.RadioMarkBackColorDisabled;
            }
            else
            {
                switch (state)
                {
                    case SmartButtonState.Hover:
                        backColor = xtheme.RadioMarkBackColorHighLight;
                        break;
                    case SmartButtonState.Pressed:
                        backColor = xtheme.RadioMarkBackColorPressed;
                        break;
                    default:
                        backColor = xtheme.RadioMarkBackColorNormal;
                        break;
                }
            }

            // get outter-circle-color
            Color circleColor = enable ? xtheme.OutterCircleColor : xtheme.OutterCircleColorDisabled;

            // get inner-spot-color
            Color innerColor = enable ? xtheme.InnerSpotColor : xtheme.InnerSpotColorDisabled;

            using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, SmoothingMode.AntiAlias))
            {
                // draw background
                Rectangle r1 = rect;
                r1.Width--;
                r1.Height--;
                if (r1.Width > 0 && r1.Height > 0)
                {
                    using (SolidBrush sb = new SolidBrush(backColor))
                    {
                        g.FillEllipse(sb, r1);
                    }
                }

                // draw outter circle
                using (Pen p = new Pen(circleColor))
                {
                    g.DrawEllipse(p, rect);
                }

                // draw high-light-outter-circle
                if (xtheme.HighLightOutterCircle && state == SmartButtonState.Hover)
                {
                    using (Pen p = new Pen(Color.FromArgb(xtheme.OutterCircleHighLightAlpha, circleColor)))
                    {
                        p.Width = 3;
                        p.Alignment = PenAlignment.Center;
                        g.DrawEllipse(p, rect);
                    }
                }

                // draw inner spot
                if (selected)
                {
                    rect.Inflate(-xtheme.InnerSpotInflate, -xtheme.InnerSpotInflate);
                    using (SolidBrush sb = new SolidBrush(innerColor))
                    {
                        g.FillEllipse(sb, rect);
                    }

                    // draw glass on inner spot
                    if (xtheme.ShowGlassOnInnerSpot)
                    {
                        GlassPainter.RenderEllipseGlass(g, rect, GlassPosition.Top, 0.2f, Color.White, 160, 20);
                    }
                }
            }
        }