Add flag for Window types

This commit is contained in:
2024-07-20 19:59:29 +03:00
parent eacd23bdbb
commit ba248a61bd
9 changed files with 74 additions and 17 deletions

View File

@@ -98,20 +98,45 @@ SDLWindow::SDLWindow(const CreateWindowSettings& settings)
uint32 flags = 0;
if (!_settings.HasBorder)
flags |= SDL_WINDOW_BORDERLESS;
if (_settings.IsRegularWindow)
if (_settings.Type == WindowType::Regular)
flags |= SDL_WINDOW_INPUT_FOCUS;
else if (_settings.Type == WindowType::Utility)
flags |= SDL_WINDOW_UTILITY;
else if (_settings.Type == WindowType::Tooltip)
flags |= SDL_WINDOW_TOOLTIP;
else if (_settings.Type == WindowType::Popup)
flags |= SDL_WINDOW_POPUP_MENU;
if (!_settings.AllowInput)
flags |= SDL_WINDOW_NOT_FOCUSABLE;
if (!_settings.ShowInTaskbar && _settings.IsRegularWindow)
flags |= SDL_WINDOW_UTILITY;
//if (!_settings.ShowInTaskbar && _settings.IsRegularWindow)
//flags |= SDL_WINDOW_UTILITY;
if (_settings.ShowAfterFirstPaint)
flags |= SDL_WINDOW_HIDDEN;
if (_settings.HasSizingFrame)
flags |= SDL_WINDOW_RESIZABLE;
//flags |= SDL_WINDOW_HIGH_PIXEL_DENSITY;
if (_settings.Parent == nullptr && (_settings.Type == WindowType::Tooltip || _settings.Type == WindowType::Popup))
{
// Creating a popup window on some platforms brings the parent window on top.
// Use the currently focused window as the parent instead to avoid losing focus of it
WindowsManager::WindowsLocker.Lock();
for (auto win : WindowsManager::Windows)
{
if (win->IsFocused())
{
_settings.Parent = win;
break;
}
}
WindowsManager::WindowsLocker.Unlock();
if (_settings.Parent == nullptr)
_settings.Parent = Engine::MainWindow;
}
// The SDL window position is always relative to the parent window
if (_settings.Parent != nullptr)
{
@@ -671,7 +696,7 @@ void SDLWindow::Show()
BringToFront();
// Reused top-most windows (DockHintWindow) doesn't stay on top for some reason
if (_settings.IsTopmost)
if (_settings.IsTopmost && _settings.Type != WindowType::Tooltip)
SDL_SetWindowAlwaysOnTop(_window, SDL_TRUE);
if (_isTrackingMouse)