ToggleSwitchRendererBase.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System.Drawing;
  2. using System.Windows.Forms;
  3. namespace Optimizer
  4. {
  5. public abstract class ToggleSwitchRendererBase
  6. {
  7. private ToggleSwitch _toggleSwitch;
  8. protected ToggleSwitchRendererBase() { }
  9. internal void SetToggleSwitch(ToggleSwitch toggleSwitch)
  10. {
  11. _toggleSwitch = toggleSwitch;
  12. }
  13. internal ToggleSwitch ToggleSwitch
  14. {
  15. get { return _toggleSwitch; }
  16. }
  17. public void RenderBackground(PaintEventArgs e)
  18. {
  19. if (_toggleSwitch == null) return;
  20. e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  21. Rectangle controlRectangle = new Rectangle(0, 0, _toggleSwitch.Width, _toggleSwitch.Height);
  22. FillBackground(e.Graphics, controlRectangle);
  23. RenderBorder(e.Graphics, controlRectangle);
  24. }
  25. public void RenderControl(PaintEventArgs e)
  26. {
  27. if (_toggleSwitch == null) return;
  28. e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  29. Rectangle buttonRectangle = GetButtonRectangle();
  30. int totalToggleFieldWidth = ToggleSwitch.Width - buttonRectangle.Width;
  31. if (buttonRectangle.X > 0)
  32. {
  33. Rectangle leftRectangle = new Rectangle(0, 0, buttonRectangle.X, ToggleSwitch.Height);
  34. if (leftRectangle.Width > 0)
  35. RenderLeftToggleField(e.Graphics, leftRectangle, totalToggleFieldWidth);
  36. }
  37. if (buttonRectangle.X + buttonRectangle.Width < e.ClipRectangle.Width)
  38. {
  39. Rectangle rightRectangle = new Rectangle(buttonRectangle.X + buttonRectangle.Width, 0, ToggleSwitch.Width - buttonRectangle.X - buttonRectangle.Width, ToggleSwitch.Height);
  40. if (rightRectangle.Width > 0)
  41. RenderRightToggleField(e.Graphics, rightRectangle, totalToggleFieldWidth);
  42. }
  43. RenderButton(e.Graphics, buttonRectangle);
  44. }
  45. public void FillBackground(Graphics g, Rectangle controlRectangle)
  46. {
  47. Color backColor = (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) ? ToggleSwitch.BackColor.ToGrayScale() : ToggleSwitch.BackColor;
  48. using (Brush backBrush = new SolidBrush(backColor))
  49. {
  50. g.FillRectangle(backBrush, controlRectangle);
  51. }
  52. }
  53. public abstract void RenderBorder(Graphics g, Rectangle borderRectangle);
  54. public abstract void RenderLeftToggleField(Graphics g, Rectangle leftRectangle, int totalToggleFieldWidth);
  55. public abstract void RenderRightToggleField(Graphics g, Rectangle rightRectangle, int totalToggleFieldWidth);
  56. public abstract void RenderButton(Graphics g, Rectangle buttonRectangle);
  57. public abstract int GetButtonWidth();
  58. public abstract Rectangle GetButtonRectangle();
  59. public abstract Rectangle GetButtonRectangle(int buttonWidth);
  60. }
  61. }