DotNet 4.8.1 build of DotNetBar
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Text;
|
||||
using DevComponents.DotNetBar.Rendering;
|
||||
|
||||
namespace DevComponents.DotNetBar.ScrollBar
|
||||
{
|
||||
internal class Office2007ScrollBarPainter : ScrollBarPainter, IOffice2007Painter
|
||||
{
|
||||
#region Private Variables
|
||||
private Office2007ColorTable m_ColorTable = null;
|
||||
private bool m_AppStyleScrollBar = false;
|
||||
private Presentation.ShapeBorder m_ThumbOuterBorder = new Presentation.ShapeBorder(1);
|
||||
private Presentation.ShapeBorder m_ThumbInnerBorder = new Presentation.ShapeBorder(1);
|
||||
private Presentation.ShapeFill m_ThumbInnerFill = new Presentation.ShapeFill();
|
||||
private Presentation.ShapeFill m_ThumbSignFill = new Presentation.ShapeFill();
|
||||
private Presentation.Shape m_ThumbShape = null;
|
||||
private Presentation.ShapePath m_ThumbSignShape = null;
|
||||
private Size m_ThumbSignSize = new Size(9, 5);
|
||||
|
||||
private Presentation.Shape m_TrackShape = null;
|
||||
private Presentation.ShapeBorder m_TrackOuterBorder = new Presentation.ShapeBorder(1);
|
||||
private Presentation.ShapeBorder m_TrackInnerBorder = new Presentation.ShapeBorder(1);
|
||||
private Presentation.ShapeFill m_TrackInnerFill = new Presentation.ShapeFill();
|
||||
|
||||
private Presentation.Shape m_BackgroundShape = null;
|
||||
private Presentation.ShapeBorder m_BackgroundBorder = new Presentation.ShapeBorder(1);
|
||||
private Presentation.ShapeFill m_BackgroundFill = new Presentation.ShapeFill();
|
||||
#endregion
|
||||
|
||||
#region IOffice2007Painter Members
|
||||
|
||||
public DevComponents.DotNetBar.Rendering.Office2007ColorTable ColorTable
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ColorTable;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_ColorTable = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Internal Implemementation
|
||||
public Office2007ScrollBarPainter()
|
||||
{
|
||||
m_ThumbShape = GetThumbShape();
|
||||
m_TrackShape = GetTrackShape();
|
||||
m_BackgroundShape = GetBackgroundShape();
|
||||
}
|
||||
|
||||
public override void PaintThumb(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, eScrollThumbPosition position, eScrollBarState state)
|
||||
{
|
||||
Office2007ScrollBarStateColorTable ct = GetColorTable(state);
|
||||
if (ct == null) return;
|
||||
|
||||
// Initialize Colors
|
||||
m_ThumbOuterBorder.Apply(ct.ThumbOuterBorder);
|
||||
m_ThumbInnerBorder.Apply(ct.ThumbInnerBorder);
|
||||
m_ThumbInnerFill.BackgroundColorBlend = ct.ThumbBackground;
|
||||
m_ThumbSignFill.Apply(ct.ThumbSignBackground);
|
||||
|
||||
m_ThumbSignShape.Path = GetThumbSignPath(position);
|
||||
m_ThumbShape.Paint(new Presentation.ShapePaintInfo(g, bounds));
|
||||
m_ThumbSignShape.Path.Dispose();
|
||||
m_ThumbSignShape.Path = null;
|
||||
}
|
||||
|
||||
private Office2007ScrollBarStateColorTable GetColorTable(eScrollBarState state)
|
||||
{
|
||||
Office2007ScrollBarColorTable csb = m_AppStyleScrollBar ? m_ColorTable.AppScrollBar : m_ColorTable.ScrollBar;
|
||||
if (state == eScrollBarState.Normal)
|
||||
return csb.Default;
|
||||
else if (state == eScrollBarState.Disabled)
|
||||
return csb.Disabled;
|
||||
else if (state == eScrollBarState.ControlMouseOver)
|
||||
return csb.MouseOverControl;
|
||||
else if (state == eScrollBarState.PartMouseOver)
|
||||
return csb.MouseOver;
|
||||
else if (state == eScrollBarState.Pressed)
|
||||
return csb.Pressed;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override void PaintTrackHorizontal(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, eScrollBarState state)
|
||||
{
|
||||
Office2007ScrollBarStateColorTable ct = GetColorTable(state);
|
||||
if (ct == null) return;
|
||||
|
||||
// Apply Colors...
|
||||
m_TrackOuterBorder.Apply(ct.TrackOuterBorder);
|
||||
m_TrackInnerBorder.Apply(ct.TrackInnerBorder);
|
||||
m_TrackInnerFill.BackgroundColorBlend = ct.TrackBackground;
|
||||
m_TrackInnerFill.GradientAngle = 90;
|
||||
|
||||
m_TrackShape.Paint(new Presentation.ShapePaintInfo(g, bounds));
|
||||
|
||||
if (bounds.Width > Dpi.Width10 && !ct.TrackSignBackground.Start.IsEmpty)
|
||||
{
|
||||
Rectangle r = new Rectangle(bounds.X + (bounds.Width - Dpi.Width7) / 2, bounds.Y + (bounds.Height - Dpi.Height8) / 2, Dpi.Width8, Dpi.Height8);
|
||||
Pen penDark = new Pen(ct.TrackSignBackground.Start, Dpi.Width1);
|
||||
Pen penLight = null;
|
||||
if (!ct.TrackSignBackground.End.IsEmpty) penLight = new Pen(ct.TrackSignBackground.End, Dpi.Width1);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
g.DrawLine(penDark, r.X, r.Y, r.X, r.Bottom);
|
||||
r.X+=Dpi.Width1;
|
||||
if (penLight != null)
|
||||
g.DrawLine(penLight, r.X, r.Y, r.X, r.Bottom);
|
||||
r.X += Dpi.Width1;
|
||||
}
|
||||
if (penDark != null) penDark.Dispose();
|
||||
if (penLight != null) penLight.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public override void PaintTrackVertical(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, eScrollBarState state)
|
||||
{
|
||||
Office2007ScrollBarStateColorTable ct = GetColorTable(state);
|
||||
if (ct == null) return;
|
||||
|
||||
// Apply Colors...
|
||||
m_TrackOuterBorder.Apply(ct.TrackOuterBorder);
|
||||
m_TrackInnerBorder.Apply(ct.TrackInnerBorder);
|
||||
m_TrackInnerFill.BackgroundColorBlend = ct.TrackBackground;
|
||||
m_TrackInnerFill.GradientAngle = 0;
|
||||
|
||||
m_TrackShape.Paint(new Presentation.ShapePaintInfo(g, bounds));
|
||||
|
||||
if (bounds.Height > Dpi.Height10 && !ct.TrackSignBackground.Start.IsEmpty)
|
||||
{
|
||||
Rectangle r = new Rectangle(bounds.X + (bounds.Width - Dpi.Width8) / 2, bounds.Y + (bounds.Height - Dpi.Height6) / 2, Dpi.Width8, Dpi.Height8);
|
||||
Pen penDark = new Pen(ct.TrackSignBackground.Start, Dpi.Width1);
|
||||
Pen penLight = null;
|
||||
if (!ct.TrackSignBackground.End.IsEmpty) penLight = new Pen(ct.TrackSignBackground.End, Dpi.Width1);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
g.DrawLine(penDark, r.X, r.Y, r.Right, r.Y);
|
||||
r.Y+=Dpi.Height1;
|
||||
if (penLight != null)
|
||||
g.DrawLine(penLight, r.X, r.Y, r.Right, r.Y);
|
||||
r.Y += Dpi.Height1;
|
||||
}
|
||||
if (penDark != null) penDark.Dispose();
|
||||
if (penLight != null) penLight.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public override void PaintBackground(Graphics g, Rectangle bounds, eScrollBarState state, bool horizontal, bool sideBorderOnly, bool rtl)
|
||||
{
|
||||
Office2007ScrollBarStateColorTable ct = GetColorTable(state);
|
||||
if (ct == null) return;
|
||||
|
||||
// Apply Colors...
|
||||
if (sideBorderOnly)
|
||||
m_BackgroundBorder.Apply(null);
|
||||
else
|
||||
m_BackgroundBorder.Apply(ct.Border);
|
||||
|
||||
m_BackgroundFill.Apply(ct.Background);
|
||||
m_BackgroundFill.GradientAngle = horizontal ? 90 : 0;
|
||||
|
||||
m_BackgroundShape.Paint(new Presentation.ShapePaintInfo(g, bounds));
|
||||
if (sideBorderOnly && !ct.Border.Start.IsEmpty)
|
||||
{
|
||||
if (horizontal)
|
||||
DisplayHelp.DrawLine(g, bounds.X, bounds.Y, bounds.Right, bounds.Y, ct.Border.Start, 1);
|
||||
else
|
||||
{
|
||||
if (rtl)
|
||||
DisplayHelp.DrawLine(g, bounds.Right - 1, bounds.Y, bounds.Right - 1, bounds.Bottom, ct.Border.Start, 1);
|
||||
else
|
||||
DisplayHelp.DrawLine(g, 0, bounds.Y, 0, bounds.Bottom, ct.Border.Start, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Presentation.Shape GetBackgroundShape()
|
||||
{
|
||||
Presentation.Rectangle b = new Presentation.Rectangle();
|
||||
b.Border = m_BackgroundBorder;
|
||||
b.Fill = m_BackgroundFill;
|
||||
b.Padding = new Presentation.PaddingInfo(1, 1, 1, 1);
|
||||
return b;
|
||||
}
|
||||
|
||||
private Presentation.Shape GetThumbShape()
|
||||
{
|
||||
Presentation.Rectangle thumb = new Presentation.Rectangle();
|
||||
thumb.Border = m_ThumbOuterBorder;
|
||||
thumb.Padding = new Presentation.PaddingInfo(1, 1, 1, 1);
|
||||
Presentation.Rectangle innerRect = new Presentation.Rectangle();
|
||||
innerRect.Padding = new Presentation.PaddingInfo(1, 1, 1, 1);
|
||||
innerRect.Border = m_ThumbInnerBorder;
|
||||
innerRect.Fill = m_ThumbInnerFill;
|
||||
thumb.Children.Add(innerRect);
|
||||
|
||||
|
||||
m_ThumbSignShape = new Presentation.ShapePath();
|
||||
m_ThumbSignShape.Fill = m_ThumbSignFill;
|
||||
innerRect.Children.Add(m_ThumbSignShape);
|
||||
|
||||
return thumb;
|
||||
}
|
||||
|
||||
private Presentation.Shape GetTrackShape()
|
||||
{
|
||||
Presentation.Rectangle thumb = new Presentation.Rectangle();
|
||||
thumb.CornerType = eCornerType.Rounded;
|
||||
thumb.CornerSize = 1;
|
||||
thumb.Border = m_TrackOuterBorder;
|
||||
thumb.Padding = new Presentation.PaddingInfo(1, 1, 1, 1);
|
||||
Presentation.Rectangle innerRect = new Presentation.Rectangle();
|
||||
innerRect.Padding = new Presentation.PaddingInfo(1, 1, 1, 1);
|
||||
innerRect.Border = m_TrackInnerBorder;
|
||||
innerRect.Fill = m_TrackInnerFill;
|
||||
thumb.Children.Add(innerRect);
|
||||
|
||||
return thumb;
|
||||
}
|
||||
|
||||
private GraphicsPath GetThumbSignPath(eScrollThumbPosition pos)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
Size signSize = Dpi.Size(m_ThumbSignSize);
|
||||
|
||||
if (pos == eScrollThumbPosition.Left || pos == eScrollThumbPosition.Right)
|
||||
{
|
||||
int w = signSize.Width;
|
||||
signSize.Width = signSize.Height;
|
||||
signSize.Height = w;
|
||||
}
|
||||
|
||||
if (pos == eScrollThumbPosition.Top)
|
||||
{
|
||||
path.AddPolygon(new PointF[] {new PointF(-1, signSize.Height),
|
||||
new PointF(signSize.Width / 2 , -1),
|
||||
new PointF(signSize.Width / 2, -1), new PointF(signSize.Width, signSize.Height),
|
||||
new PointF(signSize.Width, signSize.Height), new PointF(-1, signSize.Height)});
|
||||
path.CloseAllFigures();
|
||||
}
|
||||
else if (pos == eScrollThumbPosition.Bottom)
|
||||
{
|
||||
path.AddLine(signSize.Width / 2, signSize.Height + 1, signSize.Width, 1);
|
||||
path.AddLine(signSize.Width, 1, 0, 1);
|
||||
path.AddLine(0, 1, signSize.Width / 2, signSize.Height + 1);
|
||||
path.CloseAllFigures();
|
||||
}
|
||||
else if (pos == eScrollThumbPosition.Left)
|
||||
{
|
||||
//signSize.Width++;
|
||||
signSize.Height++;
|
||||
int h2 = (int)(signSize.Height / 2);
|
||||
path.AddLine(0, h2, signSize.Width, 0);
|
||||
path.AddLine(signSize.Width, 0, signSize.Width, signSize.Height);
|
||||
path.AddLine(signSize.Width, signSize.Height, 0, h2);
|
||||
path.CloseAllFigures();
|
||||
}
|
||||
else if (pos == eScrollThumbPosition.Right)
|
||||
{
|
||||
signSize.Height++;
|
||||
path.AddLine(signSize.Width, signSize.Height / 2, 0, 0);
|
||||
path.AddLine(0, 0, 0, signSize.Height);
|
||||
path.AddLine(0, signSize.Height, signSize.Width, signSize.Height / 2);
|
||||
path.CloseAllFigures();
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
public bool AppStyleScrollBar
|
||||
{
|
||||
get { return m_AppStyleScrollBar; }
|
||||
set { m_AppStyleScrollBar = value; }
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user