diff --git a/engine/core/src/imgui_backend.cpp b/engine/core/src/imgui_backend.cpp index 648999d..cfe31de 100644 --- a/engine/core/src/imgui_backend.cpp +++ b/engine/core/src/imgui_backend.cpp @@ -109,14 +109,16 @@ imgui_backend::imgui_backend() { platform_io.Monitors.push_back(monitor); platform_io.Platform_CreateWindow = [](ImGuiViewport* viewport) { - viewport->PlatformHandle = platform::open_window("", {viewport->Pos, viewport->Size}, WindowFlags::Borderless); + viewport->PlatformHandle = platform::open_window("", {viewport->Pos, viewport->Size}, WindowFlags::Borderless | WindowFlags::Hidden); }; platform_io.Platform_DestroyWindow = [](ImGuiViewport* viewport) { platform::close_window(viewport->PlatformHandle); }; - platform_io.Platform_ShowWindow = [](ImGuiViewport*) {}; + platform_io.Platform_ShowWindow = [](ImGuiViewport* viewport) { + platform::show_window(viewport->PlatformHandle); + }; platform_io.Platform_SetWindowPos = [](ImGuiViewport* viewport, const ImVec2 pos) { platform::set_window_position(viewport->PlatformHandle, pos); diff --git a/engine/platform/include/platform.hpp b/engine/platform/include/platform.hpp index 75ab71b..d1f1a50 100755 --- a/engine/platform/include/platform.hpp +++ b/engine/platform/include/platform.hpp @@ -8,11 +8,20 @@ /// Requestable window flags, which may or may not be respected by the platform. enum class WindowFlags { - None, - Resizable, - Borderless + None = 0, + Resizable = 2, + Borderless = 4, + Hidden = 8 }; +inline WindowFlags operator|(const WindowFlags a, const WindowFlags b) { + return static_cast(static_cast(a) | static_cast(b)); +} + +inline bool operator&(const WindowFlags a, const WindowFlags b) { + return static_cast(a) & static_cast(b); +} + /// Represents a button. This includes keyboard, gamepad and mouse buttons. enum class InputButton { Invalid, @@ -134,6 +143,9 @@ namespace platform { /// Sets the window title. void set_window_title(window_ptr window, std::string_view title); + /// Show window + void show_window(window_ptr window); + /// Queries whether or not the button is currently pressed. bool get_key_down(InputButton key); diff --git a/platforms/sdl/main.cpp.in b/platforms/sdl/main.cpp.in index aeed1ed..28b8262 100644 --- a/platforms/sdl/main.cpp.in +++ b/platforms/sdl/main.cpp.in @@ -81,11 +81,15 @@ platform::window_ptr platform::open_window(const std::string_view title, const p auto& win = windows.emplace_back(); int sdl_flags = SDL_WINDOW_VULKAN | SDL_WINDOW_ALLOW_HIGHDPI; - if(flags == WindowFlags::Borderless) + if(flags & WindowFlags::Borderless) sdl_flags |= SDL_WINDOW_BORDERLESS; - if(flags == WindowFlags::Resizable) + + if(flags & WindowFlags::Resizable) sdl_flags |= SDL_WINDOW_RESIZABLE; + if(flags & WindowFlags::Hidden) + sdl_flags |= SDL_WINDOW_HIDDEN; + auto resolution = platform::get_monitor_resolution(); int real_x = rect.offset.x; @@ -212,6 +216,12 @@ void platform::set_window_title(const platform::window_ptr index, const std::str SDL_SetWindowTitle(window, title.data()); } +void platform::show_window(const platform::window_ptr index) { + auto window = get_window(index); + + SDL_ShowWindow(window); +} + bool platform::get_key_down(const InputButton key) { const Uint8 *state = SDL_GetKeyboardState(NULL);