From 63eaf1adf29800129ff45610f9070057b3932e97 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Wed, 31 Jul 2024 23:59:04 +0300 Subject: [PATCH] Fix windows not being hidden initially --- Source/Engine/Platform/SDL/SDLPlatform.cpp | 49 ++++------------------ Source/Engine/Platform/SDL/SDLWindow.cpp | 8 ++-- 2 files changed, 12 insertions(+), 45 deletions(-) diff --git a/Source/Engine/Platform/SDL/SDLPlatform.cpp b/Source/Engine/Platform/SDL/SDLPlatform.cpp index 40dea2d07..258c15a36 100644 --- a/Source/Engine/Platform/SDL/SDLPlatform.cpp +++ b/Source/Engine/Platform/SDL/SDLPlatform.cpp @@ -111,34 +111,7 @@ bool SDLPlatform::CheckWindowDragging(Window* window, WindowHitCodes hit) bool handled = false; window->OnLeftButtonHit(hit, handled); if (handled) - { DraggedWindowId = window->_windowId; - LOG(Info, "Dragging: {}", window->_settings.Title); - - String dockHintWindow("DockHint.Window"); - Window* window = nullptr; - WindowsManager::WindowsLocker.Lock(); - for (int32 i = 0; i < WindowsManager::Windows.Count(); i++) - { - if (WindowsManager::Windows[i]->_title.Compare(dockHintWindow) == 0) - //if (WindowsManager::Windows[i]->_windowId == DraggedWindowId) - { - window = WindowsManager::Windows[i]; - break; - } - } - WindowsManager::WindowsLocker.Unlock(); - - Float2 mousePos; - auto buttons = SDL_GetGlobalMouseState(&mousePos.X, &mousePos.Y); - if (window != nullptr) - { - /*int top, left, bottom, right; - SDL_GetWindowBordersSize(window->_window, &top, &left, &bottom, &right); - mousePos += Float2(left, -top); - Input::Mouse->OnMouseDown(mousePos, MouseButton::Left, window);*/ - } - } return handled; } @@ -203,20 +176,16 @@ void SDLPlatform::Tick() SDL_PumpEvents(); SDL_Event events[32]; - int count; - while ((count = SDL_PeepEvents(events, SDL_arraysize(events), SDL_GETEVENT, SDL_EVENT_FIRST, SDL_EVENT_LAST))) + int count = SDL_PeepEvents(events, SDL_arraysize(events), SDL_GETEVENT, SDL_EVENT_FIRST, SDL_EVENT_LAST); + for (int i = 0; i < count; ++i) { - for (int i = 0; i < count; ++i) - { - SDLWindow* window = SDLWindow::GetWindowFromEvent(events[i]); - if (window) - window->HandleEvent(events[i]); - else if (events[i].type >= SDL_EVENT_JOYSTICK_AXIS_MOTION && events[i].type <= SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED) - SDLInput::HandleEvent(nullptr, events[i]); - else - SDLPlatform::HandleEvent(events[i]); - } - SDL_PumpEvents(); + SDLWindow* window = SDLWindow::GetWindowFromEvent(events[i]); + if (window) + window->HandleEvent(events[i]); + else if (events[i].type >= SDL_EVENT_JOYSTICK_AXIS_MOTION && events[i].type <= SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED) + SDLInput::HandleEvent(nullptr, events[i]); + else + SDLPlatform::HandleEvent(events[i]); } } diff --git a/Source/Engine/Platform/SDL/SDLWindow.cpp b/Source/Engine/Platform/SDL/SDLWindow.cpp index d5d82cff2..9df87a572 100644 --- a/Source/Engine/Platform/SDL/SDLWindow.cpp +++ b/Source/Engine/Platform/SDL/SDLWindow.cpp @@ -99,7 +99,7 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings) _settings.ShowAfterFirstPaint = _showAfterFirstPaint = false; } - uint32 flags = 0; + uint32 flags = SDL_WINDOW_HIDDEN; if (_settings.Type == WindowType::Utility) flags |= SDL_WINDOW_UTILITY; else if (_settings.Type == WindowType::Tooltip) @@ -113,12 +113,12 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings) flags |= SDL_WINDOW_INPUT_FOCUS; else flags |= SDL_WINDOW_NOT_FOCUSABLE; - if (_settings.ShowAfterFirstPaint) - flags |= SDL_WINDOW_HIDDEN; if (_settings.HasSizingFrame) flags |= SDL_WINDOW_RESIZABLE; if (_settings.IsTopmost) flags |= SDL_WINDOW_ALWAYS_ON_TOP; + if (_settings.SupportsTransparency) + flags |= SDL_WINDOW_TRANSPARENT; //flags |= SDL_WINDOW_HIGH_PIXEL_DENSITY; if (_settings.Parent == nullptr && (_settings.Type == WindowType::Tooltip || _settings.Type == WindowType::Popup)) @@ -317,8 +317,6 @@ SDL_HitTestResult OnWindowHitTest(SDL_Window* win, const SDL_Point* area, void* Float2 clientPosition = Float2(static_cast(area->x), static_cast(area->y)); Float2 screenPosition = window->ClientToScreen(clientPosition); - //auto clientBounds = window->GetClientBounds(); - WindowHitCodes hit = WindowHitCodes::Client; bool handled = false; window->OnHitTest(screenPosition, hit, handled);