diff options
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.cs | 98 |
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 |