summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs')
-rw-r--r--Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs98
1 files changed, 98 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs
new file mode 100644
index 0000000..5858894
--- /dev/null
+++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ToggleButton.cs
@@ -0,0 +1,98 @@
+using System;
+
+namespace MonoGame.Extended.Gui.Controls
+{
+ public class ToggleButton : Button
+ {
+ public ToggleButton()
+ {
+ }
+
+ public event EventHandler CheckedStateChanged;
+
+ private bool _isChecked;
+ public bool IsChecked
+ {
+ get { return _isChecked; }
+ set
+ {
+ if (_isChecked != value)
+ {
+ _isChecked = value;
+ CheckedStyle?.ApplyIf(this, _isChecked);
+ CheckedStateChanged?.Invoke(this, EventArgs.Empty);
+ }
+ }
+ }
+
+ private ControlStyle _checkedStyle;
+ public ControlStyle CheckedStyle
+ {
+ get { return _checkedStyle; }
+ set
+ {
+ if (_checkedStyle != value)
+ {
+ _checkedStyle = value;
+ CheckedStyle?.ApplyIf(this, _isChecked);
+ }
+ }
+ }
+
+ private ControlStyle _checkedHoverStyle;
+ public ControlStyle CheckedHoverStyle
+ {
+ get { return _checkedHoverStyle; }
+ set
+ {
+ if (_checkedHoverStyle != value)
+ {
+ _checkedHoverStyle = value;
+ CheckedHoverStyle?.ApplyIf(this, _isChecked && IsHovered);
+ }
+ }
+ }
+
+ public override bool OnPointerUp(IGuiContext context, PointerEventArgs args)
+ {
+ base.OnPointerUp(context, args);
+
+ if (BoundingRectangle.Contains(args.Position))
+ {
+ HoverStyle?.Revert(this);
+ CheckedHoverStyle?.Revert(this);
+
+ IsChecked = !IsChecked;
+
+ if (IsChecked)
+ CheckedHoverStyle?.Apply(this);
+ else
+ HoverStyle?.Apply(this);
+ }
+
+ return true;
+ }
+
+ public override bool OnPointerEnter(IGuiContext context, PointerEventArgs args)
+ {
+ if (IsChecked)
+ {
+ CheckedHoverStyle?.Apply(this);
+ return true;
+ }
+
+ return base.OnPointerEnter(context, args);
+ }
+
+ public override bool OnPointerLeave(IGuiContext context, PointerEventArgs args)
+ {
+ if (IsChecked)
+ {
+ CheckedHoverStyle?.Revert(this);
+ return true;
+ }
+
+ return base.OnPointerLeave(context, args);
+ }
+ }
+} \ No newline at end of file