DotNet 4.8.1 build of DotNetBar
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using DevComponents.DotNetBar.Rendering;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using DevComponents.DotNetBar.Ribbon;
|
||||
|
||||
namespace DevComponents.DotNetBar.Metro.Rendering
|
||||
{
|
||||
class MetroSwitchButtonPainter : Office2010SwitchButtonPainter
|
||||
{
|
||||
public override void Paint(SwitchButtonRenderEventArgs e)
|
||||
{
|
||||
SwitchButtonItem switchButton = e.SwitchButtonItem;
|
||||
bool enabled = switchButton.Enabled;
|
||||
SwitchButtonColorTable colorTable = enabled ? this.ColorTable.SwitchButton.Default : this.ColorTable.SwitchButton.Disabled;
|
||||
if (colorTable == null) colorTable = new SwitchButtonColorTable();
|
||||
|
||||
Rectangle bounds = switchButton.Bounds;
|
||||
Graphics g = e.Graphics;
|
||||
|
||||
int buttonWidth = Dpi.Width(switchButton.ButtonWidth);
|
||||
Padding margin = Dpi.Size(switchButton.Margin);
|
||||
if (e.ItemPaintArgs != null && e.ItemPaintArgs.ContainerControl is AdvTree.AdvTree)
|
||||
{
|
||||
if (switchButton.ItemAlignment == eItemAlignment.Far)
|
||||
bounds.X = bounds.Right - margin.Right - buttonWidth;
|
||||
else if (switchButton.ItemAlignment == eItemAlignment.Center)
|
||||
bounds.X += (bounds.Width - buttonWidth) / 2;
|
||||
}
|
||||
else
|
||||
bounds.X = bounds.Right - margin.Right - buttonWidth;
|
||||
bounds.Width = buttonWidth;
|
||||
int buttonHeight = Dpi.Height(switchButton.ButtonHeight);
|
||||
bounds.Y += margin.Top + (bounds.Height - margin.Vertical - buttonHeight) / 2;
|
||||
bounds.Height = buttonHeight;
|
||||
switchButton.ButtonBounds = bounds;
|
||||
bool rendersOnGlass = (e.ItemPaintArgs != null && e.ItemPaintArgs.GlassEnabled && (switchButton.Parent is CaptionItemContainer && !(e.ItemPaintArgs.ContainerControl is QatToolbar) || (switchButton.Parent is RibbonTabItemContainer && switchButton.EffectiveStyle == eDotNetBarStyle.Office2010)));
|
||||
|
||||
if (switchButton.TextVisible && !string.IsNullOrEmpty(switchButton.Text))
|
||||
{
|
||||
Rectangle textRect = switchButton.Bounds;
|
||||
Padding textPadding = Dpi.Size(switchButton.TextPadding);
|
||||
textRect.Width -= buttonWidth + margin.Right + textPadding.Horizontal;
|
||||
textRect.Y += textPadding.Top;
|
||||
textRect.X += textPadding.Left;
|
||||
textRect.Height -= textPadding.Vertical;
|
||||
bool rtl = e.RightToLeft;
|
||||
Color textColor = (switchButton.TextColor.IsEmpty || !enabled) ? colorTable.TextColor : switchButton.TextColor;
|
||||
Font textFont = e.Font;
|
||||
eTextFormat tf = eTextFormat.Left | eTextFormat.VerticalCenter;
|
||||
if (switchButton.TextMarkupBody != null)
|
||||
{
|
||||
TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, textFont, textColor, rtl);
|
||||
d.HotKeyPrefixVisible = !((tf & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
|
||||
if ((tf & eTextFormat.VerticalCenter) == eTextFormat.VerticalCenter)
|
||||
textRect.Y = switchButton.TopInternal + (switchButton.Bounds.Height - switchButton.TextMarkupBody.Bounds.Height) / 2;
|
||||
else if ((tf & eTextFormat.Bottom) == eTextFormat.Bottom)
|
||||
textRect.Y += (switchButton.TextMarkupBody.Bounds.Height - textRect.Height) + 1;
|
||||
textRect.Height = switchButton.TextMarkupBody.Bounds.Height;
|
||||
switchButton.TextMarkupBody.Bounds = textRect;
|
||||
switchButton.TextMarkupBody.Render(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if FRAMEWORK20
|
||||
if (rendersOnGlass)
|
||||
{
|
||||
if (!e.ItemPaintArgs.CachedPaint)
|
||||
Office2007RibbonControlPainter.PaintTextOnGlass(g, switchButton.Text, textFont, textRect, TextDrawing.GetTextFormat(tf));
|
||||
}
|
||||
else
|
||||
#endif
|
||||
TextDrawing.DrawString(g, switchButton.Text, textFont, textColor, textRect, tf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool switchState = switchButton.Value;
|
||||
string offText = switchButton.OffText;
|
||||
string onText = switchButton.OnText;
|
||||
Font font = (switchButton.SwitchFont == null) ? new Font(e.Font, FontStyle.Bold) : switchButton.SwitchFont;
|
||||
Color textOffColor = (switchButton.OffTextColor.IsEmpty || !enabled) ? colorTable.OffTextColor : switchButton.OffTextColor;
|
||||
Color textOnColor = (switchButton.OnTextColor.IsEmpty || !enabled) ? colorTable.OnTextColor : switchButton.OnTextColor;
|
||||
|
||||
int switchWidth = Dpi.Width(switchButton.SwitchWidth);
|
||||
int switchX = Math.Min(bounds.X + switchButton.SwitchOffset, bounds.Right);
|
||||
if (switchState)
|
||||
{
|
||||
switchX = Math.Max(bounds.Right - switchWidth - switchButton.SwitchOffset, bounds.X);
|
||||
}
|
||||
|
||||
Color borderColor = (switchButton.BorderColor.IsEmpty || !enabled) ? colorTable.BorderColor : switchButton.BorderColor;
|
||||
Color offBackgroundColor = (switchButton.OffBackColor.IsEmpty || !enabled) ? colorTable.OffBackColor : switchButton.OffBackColor;
|
||||
Color onBackgroundColor = (switchButton.OnBackColor.IsEmpty || !enabled) ? colorTable.OnBackColor : switchButton.OnBackColor;
|
||||
|
||||
// Main control border
|
||||
DisplayHelp.DrawRectangle(g, borderColor, bounds);
|
||||
|
||||
// Set clip
|
||||
Rectangle innerBoundsClip = bounds;
|
||||
innerBoundsClip.Inflate(-2, -2);
|
||||
GraphicsPath innerClipPath = new GraphicsPath();
|
||||
innerClipPath.AddRectangle(innerBoundsClip);
|
||||
Region oldClip = g.Clip;
|
||||
g.SetClip(innerClipPath, System.Drawing.Drawing2D.CombineMode.Intersect);
|
||||
innerClipPath.Dispose();
|
||||
|
||||
|
||||
// Draw On Background, it is to the left of the switch
|
||||
Rectangle onBounds = new Rectangle(switchX - (bounds.Width - switchWidth), bounds.Y, bounds.Width - switchWidth + 2, bounds.Height);
|
||||
switchButton.OnPartBounds = onBounds;
|
||||
onBounds.Inflate(-2, -2);
|
||||
DisplayHelp.FillRectangle(g, onBounds, onBackgroundColor);
|
||||
if (!string.IsNullOrEmpty(onText))
|
||||
{
|
||||
// Draw On Text
|
||||
if (rendersOnGlass && BarUtilities.UseTextRenderer)
|
||||
TextDrawing.DrawStringLegacy(g, onText, font, textOnColor, onBounds, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter);
|
||||
else
|
||||
TextDrawing.DrawString(g, onText, font, textOnColor, onBounds, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter | eTextFormat.NoClipping);
|
||||
}
|
||||
|
||||
// Draw Off Background, it is on the right of the switch
|
||||
Rectangle offBounds = new Rectangle(switchX + switchWidth - 2, bounds.Y, bounds.Width - switchWidth + 2, bounds.Height);
|
||||
switchButton.OffPartBounds = offBounds;
|
||||
offBounds.Inflate(-2, -2);
|
||||
DisplayHelp.FillRectangle(g, offBounds, offBackgroundColor);
|
||||
|
||||
if (!string.IsNullOrEmpty(offText))
|
||||
{
|
||||
// Draw Off Text
|
||||
if (rendersOnGlass && BarUtilities.UseTextRenderer)
|
||||
TextDrawing.DrawStringLegacy(g, offText, font, textOffColor, offBounds, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter);
|
||||
else
|
||||
TextDrawing.DrawString(g, offText, font, textOffColor, offBounds, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter | eTextFormat.NoClipping);
|
||||
}
|
||||
|
||||
// Restore old clip
|
||||
g.Clip = oldClip;
|
||||
oldClip.Dispose();
|
||||
|
||||
// Draw Switch on top
|
||||
Rectangle switchBounds = new Rectangle(switchX, bounds.Y, switchWidth, bounds.Height);
|
||||
switchButton.SwitchBounds = switchBounds;
|
||||
Color switchBorderColor = (switchButton.SwitchBorderColor.IsEmpty || !enabled) ? colorTable.SwitchBorderColor : switchButton.SwitchBorderColor;
|
||||
Color switchFillColor = (switchButton.SwitchBackColor.IsEmpty || !enabled) ? colorTable.SwitchBackColor : switchButton.SwitchBackColor;
|
||||
if (!colorTable.SwitchOnBackColor.IsEmpty && switchButton.Value && switchButton.SwitchBackColor.IsEmpty)
|
||||
switchFillColor = colorTable.SwitchOnBackColor;
|
||||
|
||||
DisplayHelp.FillRectangle(g, switchBounds, switchFillColor);
|
||||
if(!switchBorderColor.IsEmpty)
|
||||
DisplayHelp.DrawRectangle(g, switchBorderColor, switchBounds);
|
||||
|
||||
if (switchButton.IsReadOnly && switchButton.ShowReadOnlyMarker)
|
||||
{
|
||||
Color markerColor = switchButton.ReadOnlyMarkerColor;
|
||||
Rectangle marker = new Rectangle(switchBounds.X + (switchBounds.Width - 7) / 2, switchBounds.Y + (switchBounds.Height - 10) / 2, 7, 10);
|
||||
SmoothingMode sm = g.SmoothingMode;
|
||||
g.SmoothingMode = SmoothingMode.None;
|
||||
using (SolidBrush brush = new SolidBrush(markerColor))
|
||||
{
|
||||
g.FillRectangle(brush, new Rectangle(marker.X, marker.Y + 4, marker.Width, marker.Height - 4));
|
||||
g.FillRectangle(Brushes.White, new Rectangle(marker.X + 3, marker.Y + 5, 1, 2));
|
||||
}
|
||||
using (Pen pen = new Pen(markerColor, 1))
|
||||
{
|
||||
g.DrawLine(pen, marker.X + 2, marker.Y + 0, marker.X + 4, marker.Y + 0);
|
||||
g.DrawLine(pen, marker.X + 1, marker.Y + 1, marker.X + 1, marker.Y + 3);
|
||||
g.DrawLine(pen, marker.X + 5, marker.Y + 1, marker.X + 5, marker.Y + 3);
|
||||
}
|
||||
g.SmoothingMode = sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user