// Constructor public Widget(IWidgetContainer container) { _focused = false; _enabled = true; _currentMouse = Core.Components.Require<Mouse>(); _lastMouse = new MouseEventArgs(_currentMouse); Visible = true; Opacity = 1.0f; Tag = string.Empty; Name = GetType().Name + GetHashCode(); Position = new Vector2(0, 0); Container = container; Container.Widgets.Add(this); Widgets = new List<Widget>(); OnLoad(); }
// Constructor public MouseEventArgs(Mouse mouse) { Position = new Vector2(mouse.X, mouse.Y); PressedButton = mouse.PressedButton; }
public void Update(float elapsed) { if (Enabled) { // create widgnet if dirty if (_dirty) { OnCreateWidget(); _dirty = false; } // get current device info #region Update Mouse Events _currentMouse = Core.Components.Require<Mouse>(); var mouseEvent = new MouseEventArgs(_currentMouse); var mouseIn = Bounds.Contains(new Vector2(_currentMouse.Position.X, _currentMouse.Position.Y)); // mouse enter / leave if (!_containsMouse && mouseIn) { OnMouseEnter(mouseEvent); } else if (_containsMouse && !mouseIn) { OnMouseLeave(mouseEvent); _mouseDown = false; _mouseUp = false; } _containsMouse = mouseIn; if (_containsMouse && _currentMouse.PressedButton == MouseButton.Left) { OnMouseDown(mouseEvent); State = WidgetState.Clicked; } else if (_containsMouse && _currentMouse.PressedButton != MouseButton.Left) { if (_lastMouse.PressedButton == MouseButton.Left) { OnClick(mouseEvent); OnMouseUp(mouseEvent); } State = WidgetState.Hover; } else if (Focused) { State = WidgetState.Focused; } else if (Enabled) { State = WidgetState.Normal; } else { State = WidgetState.Disabled; } if (_mouseDown && _mouseUp) { //OnClick(mouseEvent); Focused = true; _mouseDown = false; _mouseUp = false; } #endregion _gotFocus = false; _lastMouse = new MouseEventArgs(_currentMouse); Widgets.ForEach(widget => widget.Update(elapsed)); } else { State = WidgetState.Disabled; } OnUpdate(); }