BigLitho/Large.Lito.Database/Make3_Treko3D/ControlLibrary/Renderers/ToggleSwitchRendererBase.cs

101 lines
3.3 KiB
C#

using System.Drawing;
using System.Windows.Forms;
namespace ControlLibrary.Renderers
{
public abstract class ToggleSwitchRendererBase
{
#region Private Members
private ToggleSwitch _toggleSwitch;
#endregion Private Members
#region Constructor
protected ToggleSwitchRendererBase()
{ }
internal void SetToggleSwitch(ToggleSwitch toggleSwitch)
{
_toggleSwitch = toggleSwitch;
}
internal ToggleSwitch ToggleSwitch
{
get { return _toggleSwitch; }
}
#endregion Constructor
#region Render Methods
public void RenderBackground(PaintEventArgs e)
{
if (_toggleSwitch == null)
return;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle controlRectangle = new Rectangle(0, 0, _toggleSwitch.Width, _toggleSwitch.Height);
FillBackground(e.Graphics, controlRectangle);
RenderBorder(e.Graphics, controlRectangle);
}
public void RenderControl(PaintEventArgs e)
{
if (_toggleSwitch == null)
return;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle buttonRectangle = GetButtonRectangle();
int totalToggleFieldWidth = ToggleSwitch.Width - buttonRectangle.Width;
if (buttonRectangle.X > 0)
{
Rectangle leftRectangle = new Rectangle(0, 0, buttonRectangle.X, ToggleSwitch.Height);
if (leftRectangle.Width > 0)
RenderLeftToggleField(e.Graphics, leftRectangle, totalToggleFieldWidth);
}
if (buttonRectangle.X + buttonRectangle.Width < e.ClipRectangle.Width)
{
Rectangle rightRectangle = new Rectangle(buttonRectangle.X + buttonRectangle.Width, 0, ToggleSwitch.Width - buttonRectangle.X - buttonRectangle.Width, ToggleSwitch.Height);
if (rightRectangle.Width > 0)
RenderRightToggleField(e.Graphics, rightRectangle, totalToggleFieldWidth);
}
RenderButton(e.Graphics, buttonRectangle);
}
public void FillBackground(Graphics g, Rectangle controlRectangle)
{
Color backColor = (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) ? ToggleSwitch.BackColor.ToGrayScale() : ToggleSwitch.BackColor;
using (Brush backBrush = new SolidBrush(backColor))
{
g.FillRectangle(backBrush, controlRectangle);
}
}
public abstract void RenderBorder(Graphics g, Rectangle borderRectangle);
public abstract void RenderLeftToggleField(Graphics g, Rectangle leftRectangle, int totalToggleFieldWidth);
public abstract void RenderRightToggleField(Graphics g, Rectangle rightRectangle, int totalToggleFieldWidth);
public abstract void RenderButton(Graphics g, Rectangle buttonRectangle);
#endregion Render Methods
#region Helper Methods
public abstract int GetButtonWidth();
public abstract Rectangle GetButtonRectangle();
public abstract Rectangle GetButtonRectangle(int buttonWidth);
#endregion Helper Methods
}
}