public void Update() { if (_lastHitTest != null) { if (MouseManager.IsDown(MouseButton.Left)) { var test = _lastHitTest.HitTest(); if (test.IsHit) { return; } _lastHitTest = null; } _lastHitTest = null; } if (_draggable.HitTest().IsHit) { var delta = _draggable.GetMoveDelta(); _draggable.InvalidateDelta(); var x = ((int)(CleanRect.X - delta.X)).Clamp(0, _mainWindow.Width - CleanRect.Width); var y = ((int)(CleanRect.Y - delta.Y)).Clamp(0, _mainWindow.Height - CleanRect.Height); X = x; Y = y; _draggable.SetRect(new Rectangle(_captionBarRect.Left, _captionBarRect.Top, _captionBarRect.Width - Ui.CaptionHeight - BorderSize, _captionBarRect.Height)); SetRect(new Rectangle(X, Y, Width, Height)); IsDirty = true; return; } _ = _closeButton.HitTest(); for (var i = _controls.Count - 1; i > -1; i--) { var test = _controls[i].HitTest(); if (!test.IsHit) { continue; } _lastHitTest = test.Control; return; } }
public void Update() { if (!Visible) { return; } if (_listBox.HitTest().IsHit) { IsDirty = true; return; } // hit test first, then check mouse is down outside of context menu if (MouseManager.IsDown(MouseButton.Left) && !CleanRect.Contains(UiState.Mouse.Position)) { Shortcuts.SetToolSelect(); Close(); } }
public override HitBox HitTest() { HitBox hit; if (_draggable.HitTest().IsHit) { var delta = (int)(_draggable.GetHorizontalMoveDelta() * _dragMultiplier); var parent = (ICanHaveHorizontalScrollBar)Parent; parent.HorizontalScroll(-delta); _draggable.InvalidateDelta(); return(HitBox.Hit(this)); } else if (MouseManager.IsDown(MouseButton.Left) && _bgHitBox.Contains(UiState.Mouse.Position)) { var parent = (ICanHaveHorizontalScrollBar)Parent; var hitBoxX = UiState.Mouse.Position.X - _bgHitBox.Left; var scrollPercent = (float)hitBoxX / _bgHitBox.Width; var scrollIndexAtClick = Math.Min((int)(parent.HorizontalMaxScrollIndex * scrollPercent), parent.HorizontalMaxScrollIndex); parent.HorizontalScrollTo(scrollIndexAtClick); } else if ((hit = _leftArrow.HitTest()).IsHit) { return(hit); } else if ((hit = _rightArrow.HitTest()).IsHit) { return(hit); } else if ((hit = _mouseScrollable.HitTest()).IsHit) { return(hit); } return(HitBox.Miss); }