From b04ffdcd3c847cd519e843053a623b51a2c1f040 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 11 Aug 2024 12:13:15 +0300 Subject: [PATCH] _works 0,0 primary screen, returned positions correct but visually wrong --- Source/Engine/Platform/SDL/SDLWindow.cpp | 33 +++++++++++++++++------- Source/Engine/UI/GUI/Tooltip.cs | 20 +++++++++++--- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/Source/Engine/Platform/SDL/SDLWindow.cpp b/Source/Engine/Platform/SDL/SDLWindow.cpp index f7cee5604..67554c049 100644 --- a/Source/Engine/Platform/SDL/SDLWindow.cpp +++ b/Source/Engine/Platform/SDL/SDLWindow.cpp @@ -855,7 +855,11 @@ Int2 GetSDLWindowPosition(const SDLWindow* window) { if (window->GetSettings().Type == WindowType::Tooltip || window->GetSettings().Type == WindowType::Popup) { - SDL_GetWindowPosition(window->GetSettings().Parent->GetSDLWindow(), &position.X, &position.Y); + Int2 parentPosition = GetSDLWindowPosition(window->GetSettings().Parent); + //SDL_GetWindowPosition(window->GetSettings().Parent->GetSDLWindow(), &parentPosition.X, &parentPosition.Y); + position -= parentPosition; + auto monitorBounds = Platform::GetMonitorBounds(Float2::Minimum); + //position -= Int2(monitorBounds.GetTopLeft()); //auto monitorBounds = Platform::GetMonitorBounds(Float2::Minimum); //position += Int2(monitorBounds.GetTopLeft()); } @@ -982,15 +986,16 @@ void SetRelativeWindowPosition(const SDLWindow* window, Int2& relativePosition) SDLWindow* parent = window->GetSettings().Parent; while (parent != nullptr) { - if (parent->GetSettings().Parent == nullptr || (parent->GetSettings().Type != WindowType::Tooltip && parent->GetSettings().Type != WindowType::Popup)) - break; + if (parent->GetSettings().Type != WindowType::Tooltip && parent->GetSettings().Type != WindowType::Popup) + { + Int2 parentPosition = GetSDLWindowPosition(parent); + relativePosition -= parentPosition; + //break; + } + //if (parent->GetSettings().Parent == nullptr || (parent->GetSettings().Type != WindowType::Tooltip && parent->GetSettings().Type != WindowType::Popup)) + // break; parent = parent->GetSettings().Parent; } - if (parent != nullptr) - { - Int2 parentPosition = GetSDLWindowPosition(parent); - relativePosition += parentPosition; - } } else if (SDLPlatform::UsesWayland()) { @@ -1053,9 +1058,19 @@ void SDLWindow::SetPosition(const Float2& position) // The position is relative to the parent window Int2 relativePosition(static_cast(position.X), static_cast(position.Y)); relativePosition += topLeftBorder; - GetRelativeWindowPosition(this, relativePosition); + SetRelativeWindowPosition(this, relativePosition); SDL_SetWindowPosition(_window, relativePosition.X, relativePosition.Y); + SDL_SyncWindow(_window); + + Int2 newPos; + SDL_GetWindowPosition(_window, &newPos.X, &newPos.Y); + if (!(newPos.X == relativePosition.X && newPos.Y == relativePosition.Y)) + ASSERT(false); + + newPos = GetPosition(); + if (!(newPos.X == relativePosition.X && newPos.Y == relativePosition.Y)) + ASSERT(false); } void SDLWindow::SetClientPosition(const Float2& position) diff --git a/Source/Engine/UI/GUI/Tooltip.cs b/Source/Engine/UI/GUI/Tooltip.cs index f88092565..9bfff8daa 100644 --- a/Source/Engine/UI/GUI/Tooltip.cs +++ b/Source/Engine/UI/GUI/Tooltip.cs @@ -1,6 +1,7 @@ // Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. using System; +using FlaxEditor; namespace FlaxEngine.GUI { @@ -77,11 +78,13 @@ namespace FlaxEngine.GUI //WrapPosition(ref locationSS); WrapPosition(ref mousePos, 10); locationSS = mousePos + new Float2(15, 10); + var ppp = Input.MouseScreenPosition; + var bef = locationSS; // Create window var desc = CreateWindowSettings.Default; desc.StartPosition = WindowStartPosition.Manual; - desc.Position = new Vector2(5, 5);//locationSS; + desc.Position = locationSS; desc.Size = dpiSize; desc.Fullscreen = false; desc.HasBorder = false; @@ -105,6 +108,9 @@ namespace FlaxEngine.GUI Visible = true; _window.Show(); _showTarget.OnTooltipShown(this); + + var aff = _window.Position; + Editor.Log($"tooltip startpos: before: {bef}, after {aff}"); } /// @@ -220,9 +226,15 @@ namespace FlaxEngine.GUI else { // Position tooltip when mouse moves - //WrapPosition(ref mousePos, 10); - //if (_window) - // _window.Position = mousePos + new Float2(15, 10); + var ppp = Input.MouseScreenPosition; + var bef = _window.Position; + WrapPosition(ref mousePos, 10); + mousePos += new Float2(15, 10); + + if (_window) + _window.Position = mousePos; + var aff = _window.Position; + Editor.Log($"tooltip updatepos: before: {bef}, new {mousePos}, after {aff}"); } base.Update(deltaTime);