// 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); }
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); } }
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); } }
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); } }