Example #1
0
        // Override to make the current style color the effective background color
        //public override Color EffectiveBackColor { get { return ShouldSerializeBackColor() ? base.EffectiveBackColor : GetStyleColor(); } }

        protected override void OnPaintForeground(PaintEventArgs e)
        {
            Color     foreColor  = EffectiveForeColor;
            Color     tileColor  = GetStyleColor();
            Rectangle buttonRect = DisplayRectangle;

            using (SolidBrush b = new SolidBrush(tileColor))
            {
                e.Graphics.FillRectangle(b, buttonRect);
            }

            if (UseTileImage && TileImage != null)
            {
                e.Graphics.DrawImage(TileImage, buttonRect, TileImageAlign);
            }

            e.Graphics.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            if (PaintTileCount && TileCount > 0)
            {
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
                TextRenderer.DrawText(e.Graphics, TileCount.ToString(), GetThemeFont("Tile.Count"), buttonRect, foreColor, tileColor, TextFormatFlags.Right | TextFormatFlags.Top);
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
            }

            TextRenderer.DrawText(e.Graphics, Text, EffectiveFont, buttonRect, foreColor, tileColor, TextAlign.AsTextFormatFlags() | TextFormatFlags.LeftAndRightPadding | TextFormatFlags.EndEllipsis);
        }
Example #2
0
        protected override void OnPaint(PaintEventArgs e)
        {
            Color backColor, foreColor;

            backColor = MetroPaint.GetStyleColor(Style);

            if (useCustomBackground)
            {
                backColor = BackColor;
            }

            if (isHovered && !isPressed && Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Hover(Theme);
            }
            else if (isHovered && isPressed && Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Press(Theme);
            }
            else if (!Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Disabled(Theme);
            }
            else
            {
                foreColor = MetroPaint.ForeColor.Tile.Normal(Theme);
            }

            if (useCustomForeColor)
            {
                foreColor = ForeColor;
            }

            e.Graphics.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            if (!isPressed)
            {
                e.Graphics.Clear(backColor);
            }
            else
            {
                e.Graphics.Clear(MetroPaint.BackColor.Form(Theme));

                using (SolidBrush b = new SolidBrush(backColor))
                {
                    Point[] polyPoints = new Point[] { new Point(0, 0), new Point(Width - 1, 2), new Point(Width - 1, Height - 2), new Point(0, Height) };
                    e.Graphics.FillPolygon(b, polyPoints);
                }
            }

            if (useTileImage)
            {
                if (tileImage != null)
                {
                    Rectangle rect;
                    switch (tileImageAlign)
                    {
                    case ContentAlignment.BottomLeft:
                        rect = new Rectangle(new Point(0, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.BottomCenter:
                        rect = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.BottomRight:
                        rect = new Rectangle(new Point(Width - TileImage.Width, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleLeft:
                        rect = new Rectangle(new Point(0, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleCenter:
                        rect = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleRight:
                        rect = new Rectangle(new Point(Width - TileImage.Width, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopLeft:
                        rect = new Rectangle(new Point(0, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopCenter:
                        rect = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopRight:
                        rect = new Rectangle(new Point(Width - TileImage.Width, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    default:
                        rect = new Rectangle(new Point(0, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;
                    }

                    e.Graphics.DrawImage(TileImage, rect);
                }
            }

            if (TileCount > 0 && paintTileCount)
            {
                Size countSize = TextRenderer.MeasureText(TileCount.ToString(), MetroFonts.TileCount);

                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                TextRenderer.DrawText(e.Graphics, TileCount.ToString(), MetroFonts.TileCount, new Point(Width - countSize.Width, 0), foreColor);
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
            }

            Size textSize = TextRenderer.MeasureText(Text, MetroFonts.Tile(tileTextFontSize, tileTextFontWeight));

            TextFormatFlags flags           = TextFormatFlags.LeftAndRightPadding | TextFormatFlags.EndEllipsis;
            Rectangle       clientRectangle = ClientRectangle;

            switch (TextAlign)
            {
            case ContentAlignment.BottomCenter:
                flags |= TextFormatFlags.Bottom;
                flags |= TextFormatFlags.HorizontalCenter;
                break;

            case ContentAlignment.BottomRight:
                flags |= TextFormatFlags.Bottom;
                flags |= TextFormatFlags.Right;
                break;

            case ContentAlignment.MiddleLeft:
                flags |= TextFormatFlags.VerticalCenter;
                flags |= TextFormatFlags.Left;
                break;

            case ContentAlignment.MiddleCenter:
                flags |= TextFormatFlags.VerticalCenter;
                flags |= TextFormatFlags.HorizontalCenter;
                break;

            case ContentAlignment.MiddleRight:
                flags |= TextFormatFlags.VerticalCenter;
                flags |= TextFormatFlags.Right;
                break;

            case ContentAlignment.TopLeft:
                flags |= TextFormatFlags.Top;
                flags |= TextFormatFlags.Left;
                break;

            case ContentAlignment.TopCenter:
                flags |= TextFormatFlags.Top;
                flags |= TextFormatFlags.HorizontalCenter;
                break;

            case ContentAlignment.TopRight:
                flags |= TextFormatFlags.Top;
                flags |= TextFormatFlags.Right;
                break;

            default:
            case ContentAlignment.BottomLeft:
                flags |= TextFormatFlags.Bottom;
                flags |= TextFormatFlags.Left;
                break;
            }

            TextRenderer.DrawText(e.Graphics, Text, MetroFonts.Tile(tileTextFontSize, tileTextFontWeight), clientRectangle, foreColor, flags);

            if (false && isFocused)
            {
                ControlPaint.DrawFocusRectangle(e.Graphics, ClientRectangle);
            }
        }
Example #3
0
        protected virtual void OnPaintForeground(PaintEventArgs e)
        {
            Color foreColor;

            if (isHovered && !isPressed && Enabled)
            {
                foreColor = WellsMetroPaint.ForeColor.Tile.Hover(Theme);
            }
            else if (isHovered && isPressed && Enabled)
            {
                foreColor = WellsMetroPaint.ForeColor.Tile.Press(Theme);
            }
            else if (!Enabled)
            {
                foreColor = WellsMetroPaint.ForeColor.Tile.Disabled(Theme);
            }
            else
            {
                foreColor = WellsMetroPaint.ForeColor.Tile.Normal(Theme);
            }

            if (useCustomForeColor)
            {
                foreColor = ForeColor;
            }

            if (isPressed)
            {
            }

            e.Graphics.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            if (useTileImage)
            {
                if (tileImage != null)
                {
                    Rectangle imageRectangle;
                    switch (tileImageAlign)
                    {
                    case ContentAlignment.BottomLeft:
                        imageRectangle = new Rectangle(new Point(0, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.BottomCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.BottomRight:
                        imageRectangle = new Rectangle(new Point(Width - TileImage.Width, Height - TileImage.Height), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleLeft:
                        imageRectangle = new Rectangle(new Point(0, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.MiddleRight:
                        imageRectangle = new Rectangle(new Point(Width - TileImage.Width, Height / 2 - TileImage.Height / 2), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopLeft:
                        imageRectangle = new Rectangle(new Point(0, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - TileImage.Width / 2, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    case ContentAlignment.TopRight:
                        imageRectangle = new Rectangle(new Point(Width - TileImage.Width, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;

                    default:
                        imageRectangle = new Rectangle(new Point(0, 0), new System.Drawing.Size(TileImage.Width, TileImage.Height));
                        break;
                    }

                    e.Graphics.DrawImage(TileImage, imageRectangle);
                }
            }

            if (TileCount > 0 && paintTileCount)
            {
                Size countSize = TextRenderer.MeasureText(TileCount.ToString(), WellsMetroFonts.TileCount);

                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                TextRenderer.DrawText(e.Graphics, TileCount.ToString(), WellsMetroFonts.TileCount, new Point(Width - countSize.Width, 0), foreColor);
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
            }

            Size textSize = TextRenderer.MeasureText(Text, WellsMetroFonts.Tile(tileTextFontSize, tileTextFontWeight));

            TextFormatFlags flags         = WellsMetroPaint.GetTextFormatFlags(TextAlign) | TextFormatFlags.LeftAndRightPadding | TextFormatFlags.EndEllipsis;
            Rectangle       textRectangle = ClientRectangle;

            if (isPressed)
            {
                textRectangle.Inflate(-2, -2);
            }

            TextRenderer.DrawText(e.Graphics, Text, WellsMetroFonts.Tile(tileTextFontSize, tileTextFontWeight), textRectangle, foreColor, flags);

            if (false && isFocused)
            {
                ControlPaint.DrawFocusRectangle(e.Graphics, ClientRectangle);
            }
        }
Example #4
0
        protected virtual void OnPaintForeground(PaintEventArgs e)
        {
            Color foreColor, borderColor;

            borderColor = MetroPaint.BorderColor.Button.Normal(Theme);

            if (isHovered && !isPressed && Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Hover(Theme);
            }
            else if (isHovered && isPressed && Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Press(Theme);
            }
            else if (!Enabled)
            {
                foreColor = MetroPaint.ForeColor.Tile.Disabled(Theme);
            }
            else
            {
                foreColor = MetroPaint.ForeColor.Tile.Normal(Theme);
            }

            if (useCustomForeColor)
            {
                foreColor = ForeColor;
            }

            if (isPressed || ((isHovered || isFocused) && displayFocusBorder))
            {
                using (Pen p = new Pen(borderColor))
                {
                    p.Width = 3;
                    Rectangle borderRect = new Rectangle(1, 1, Width - 3, Height - 3);
                    e.Graphics.DrawRectangle(p, borderRect);
                }
            }

            e.Graphics.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            if (useTileImage)
            {
                if (tileImage != null)
                {
                    Image bmp = null;
                    if (this.Theme == MetroThemeStyle.Dark)
                    {
                        bmp = tileImageDark;
                    }
                    else
                    {
                        bmp = tileImageLight;
                    }

                    Rectangle imageRectangle;
                    switch (tileImageAlign)
                    {
                    case ContentAlignment.BottomLeft:
                        imageRectangle = new Rectangle(new Point(0, Height - bmp.Height), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.BottomCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - bmp.Width / 2, Height - bmp.Height), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.BottomRight:
                        imageRectangle = new Rectangle(new Point(Width - bmp.Width, Height - bmp.Height), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.MiddleLeft:
                        imageRectangle = new Rectangle(new Point(0, Height / 2 - bmp.Height / 2), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.MiddleCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - bmp.Width / 2, Height / 2 - bmp.Height / 2), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.MiddleRight:
                        imageRectangle = new Rectangle(new Point(Width - bmp.Width, Height / 2 - bmp.Height / 2), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.TopLeft:
                        imageRectangle = new Rectangle(new Point(0, 0), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.TopCenter:
                        imageRectangle = new Rectangle(new Point(Width / 2 - bmp.Width / 2, 10), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    case ContentAlignment.TopRight:
                        imageRectangle = new Rectangle(new Point(Width - bmp.Width, 0), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;

                    default:
                        imageRectangle = new Rectangle(new Point(0, 0), new System.Drawing.Size(bmp.Width, bmp.Height));
                        break;
                    }

                    e.Graphics.DrawImage(bmp, imageRectangle);
                }
            }

            if (TileCount > 0 && paintTileCount)
            {
                Size countSize = TextRenderer.MeasureText(TileCount.ToString(), MetroFonts.TileCount);

                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                TextRenderer.DrawText(e.Graphics, TileCount.ToString(), MetroFonts.TileCount, new Point(Width - countSize.Width, 0), foreColor);
                e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
            }

            Size textSize = TextRenderer.MeasureText(Text, MetroFonts.Tile(tileTextFontSize, tileTextFontWeight));

            TextFormatFlags flags         = MetroPaint.GetTextFormatFlags(TextAlign) | TextFormatFlags.LeftAndRightPadding | TextFormatFlags.EndEllipsis;
            Rectangle       textRectangle = ClientRectangle;

            if (isPressed)
            {
                textRectangle.Inflate(-4, -12);
            }
            else
            {
                textRectangle.Inflate(-2, -10);
            }

            TextRenderer.DrawText(e.Graphics, Text, MetroFonts.Tile(tileTextFontSize, tileTextFontWeight), textRectangle, foreColor, flags);

            if (false && isFocused)
            {
                ControlPaint.DrawFocusRectangle(e.Graphics, ClientRectangle);
            }
        }