Fix windows not being hidden initially

This commit is contained in:
2024-07-31 23:59:04 +03:00
committed by Ari Vuollet
parent 7288980caa
commit 4428083c2f
2 changed files with 12 additions and 45 deletions

View File

@@ -111,34 +111,7 @@ bool SDLPlatform::CheckWindowDragging(Window* window, WindowHitCodes hit)
bool handled = false; bool handled = false;
window->OnLeftButtonHit(hit, handled); window->OnLeftButtonHit(hit, handled);
if (handled) if (handled)
{
DraggedWindowId = window->_windowId; 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; return handled;
} }
@@ -203,20 +176,16 @@ void SDLPlatform::Tick()
SDL_PumpEvents(); SDL_PumpEvents();
SDL_Event events[32]; SDL_Event events[32];
int count; int count = SDL_PeepEvents(events, SDL_arraysize(events), SDL_GETEVENT, SDL_EVENT_FIRST, SDL_EVENT_LAST);
while ((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)
SDLWindow* window = SDLWindow::GetWindowFromEvent(events[i]); window->HandleEvent(events[i]);
if (window) else if (events[i].type >= SDL_EVENT_JOYSTICK_AXIS_MOTION && events[i].type <= SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED)
window->HandleEvent(events[i]); SDLInput::HandleEvent(nullptr, events[i]);
else if (events[i].type >= SDL_EVENT_JOYSTICK_AXIS_MOTION && events[i].type <= SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED) else
SDLInput::HandleEvent(nullptr, events[i]); SDLPlatform::HandleEvent(events[i]);
else
SDLPlatform::HandleEvent(events[i]);
}
SDL_PumpEvents();
} }
} }

View File

@@ -99,7 +99,7 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings)
_settings.ShowAfterFirstPaint = _showAfterFirstPaint = false; _settings.ShowAfterFirstPaint = _showAfterFirstPaint = false;
} }
uint32 flags = 0; uint32 flags = SDL_WINDOW_HIDDEN;
if (_settings.Type == WindowType::Utility) if (_settings.Type == WindowType::Utility)
flags |= SDL_WINDOW_UTILITY; flags |= SDL_WINDOW_UTILITY;
else if (_settings.Type == WindowType::Tooltip) else if (_settings.Type == WindowType::Tooltip)
@@ -113,12 +113,12 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings)
flags |= SDL_WINDOW_INPUT_FOCUS; flags |= SDL_WINDOW_INPUT_FOCUS;
else else
flags |= SDL_WINDOW_NOT_FOCUSABLE; flags |= SDL_WINDOW_NOT_FOCUSABLE;
if (_settings.ShowAfterFirstPaint)
flags |= SDL_WINDOW_HIDDEN;
if (_settings.HasSizingFrame) if (_settings.HasSizingFrame)
flags |= SDL_WINDOW_RESIZABLE; flags |= SDL_WINDOW_RESIZABLE;
if (_settings.IsTopmost) if (_settings.IsTopmost)
flags |= SDL_WINDOW_ALWAYS_ON_TOP; flags |= SDL_WINDOW_ALWAYS_ON_TOP;
if (_settings.SupportsTransparency)
flags |= SDL_WINDOW_TRANSPARENT;
//flags |= SDL_WINDOW_HIGH_PIXEL_DENSITY; //flags |= SDL_WINDOW_HIGH_PIXEL_DENSITY;
if (_settings.Parent == nullptr && (_settings.Type == WindowType::Tooltip || _settings.Type == WindowType::Popup)) 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<float>(area->x), static_cast<float>(area->y)); Float2 clientPosition = Float2(static_cast<float>(area->x), static_cast<float>(area->y));
Float2 screenPosition = window->ClientToScreen(clientPosition); Float2 screenPosition = window->ClientToScreen(clientPosition);
//auto clientBounds = window->GetClientBounds();
WindowHitCodes hit = WindowHitCodes::Client; WindowHitCodes hit = WindowHitCodes::Client;
bool handled = false; bool handled = false;
window->OnHitTest(screenPosition, hit, handled); window->OnHitTest(screenPosition, hit, handled);