diff --git a/Source/Engine/UI/GUI/Tooltip.cs b/Source/Engine/UI/GUI/Tooltip.cs index d4825b7ca..e98c07cc5 100644 --- a/Source/Engine/UI/GUI/Tooltip.cs +++ b/Source/Engine/UI/GUI/Tooltip.cs @@ -68,26 +68,12 @@ namespace FlaxEngine.GUI var parentWin = target.Root; if (parentWin == null) return; - float dpiScale = target.RootWindow.DpiScale; + var dpiScale = target.RootWindow.DpiScale; var dpiSize = Size * dpiScale; var locationWS = target.PointToWindow(location); var locationSS = parentWin.PointToScreen(locationWS); - var monitorBounds = Platform.GetMonitorBounds(locationSS); - var rightBottomMonitorBounds = monitorBounds.BottomRight; - var rightBottomLocationSS = locationSS + dpiSize; - - // Prioritize tooltip placement within parent window, fall back to virtual desktop - if (rightBottomMonitorBounds.Y < rightBottomLocationSS.Y) - { - // Direction: up - locationSS.Y -= dpiSize.Y; - } - if (rightBottomMonitorBounds.X < rightBottomLocationSS.X) - { - // Direction: left - locationSS.X -= dpiSize.X; - } _showTarget = target; + WrapPosition(ref locationSS); // Create window var desc = CreateWindowSettings.Default; @@ -193,15 +179,11 @@ namespace FlaxEngine.GUI } } - /// - public override void Update(float deltaTime) + private void WrapPosition(ref Float2 locationSS, float flipOffset = 0.0f) { - var mousePos = Input.MouseScreenPosition; - // Calculate popup direction - float dpiScale = _showTarget.RootWindow.DpiScale; + var dpiScale = _showTarget.RootWindow.DpiScale; var dpiSize = Size * dpiScale; - var locationSS = mousePos; var monitorBounds = Platform.GetMonitorBounds(locationSS); var rightBottomMonitorBounds = monitorBounds.BottomRight; var rightBottomLocationSS = locationSS + dpiSize; @@ -210,17 +192,23 @@ namespace FlaxEngine.GUI if (rightBottomMonitorBounds.Y < rightBottomLocationSS.Y) { // Direction: up - locationSS.Y -= dpiSize.Y + 10; + locationSS.Y -= dpiSize.Y + flipOffset; } if (rightBottomMonitorBounds.X < rightBottomLocationSS.X) { // Direction: left - locationSS.X -= dpiSize.X + 20; + locationSS.X -= dpiSize.X + flipOffset * 2; } - + } + + /// + public override void Update(float deltaTime) + { // Move window with mouse location - _window.Position = locationSS + new Float2(15, 10); - + var mousePos = Input.MouseScreenPosition; + WrapPosition(ref mousePos, 10); + _window.Position = mousePos + new Float2(15, 10); + // Auto hide if mouse leaves control area var location = _showTarget.PointFromScreen(mousePos); if (!_showTarget.OnTestTooltipOverControl(ref location))