From 2b28ec296fdc72050569b9fedc1664ada7791497 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 20 Nov 2021 23:02:54 +0800 Subject: ... --- include/cru/osx/gui/UiApplication.hpp | 3 +-- include/cru/osx/gui/Window.hpp | 14 ++++++++++---- include/cru/platform/gui/UiApplication.hpp | 16 +--------------- include/cru/platform/gui/Window.hpp | 23 +++++++++++++++++++++-- 4 files changed, 33 insertions(+), 23 deletions(-) (limited to 'include') diff --git a/include/cru/osx/gui/UiApplication.hpp b/include/cru/osx/gui/UiApplication.hpp index e3cb269a..e4036854 100644 --- a/include/cru/osx/gui/UiApplication.hpp +++ b/include/cru/osx/gui/UiApplication.hpp @@ -39,8 +39,7 @@ class OsxUiApplication : public OsxGuiResource, public virtual IUiApplication { std::vector GetAllWindow() override; - INativeWindow* CreateWindow(INativeWindow* parent, - CreateWindowFlag flags) override; + INativeWindow* CreateWindow() override; cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() override; diff --git a/include/cru/osx/gui/Window.hpp b/include/cru/osx/gui/Window.hpp index 7ea21926..5383ca1b 100644 --- a/include/cru/osx/gui/Window.hpp +++ b/include/cru/osx/gui/Window.hpp @@ -20,8 +20,7 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { friend details::OsxInputMethodContextPrivate; public: - OsxWindow(OsxUiApplication* ui_application, INativeWindow* parent, - bool frame); + OsxWindow(OsxUiApplication* ui_application); CRU_DELETE_COPY(OsxWindow) CRU_DELETE_MOVE(OsxWindow) @@ -32,9 +31,13 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { void Close() override; INativeWindow* GetParent() override; + void SetParent(INativeWindow* parent) override; - bool IsVisible() override; - void SetVisible(bool is_visible) override; + WindowStyleFlag GetShowFlag() override; + void SetShowFlag(WindowStyleFlag flag) override; + + WindowVisibilityType GetVisibility() override; + void SetVisibility(WindowVisibilityType visibility) override; Size GetClientSize() override; void SetClientSize(const Size& size) override; @@ -61,8 +64,11 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { IEvent* CreateEvent() override; IEvent* DestroyEvent() override; IEvent* PaintEvent() override; + + IEvent* VisibilityChangeEvent() override; IEvent* ResizeEvent() override; IEvent* FocusEvent() override; + IEvent* MouseEnterLeaveEvent() override; IEvent* MouseMoveEvent() override; IEvent* MouseDownEvent() override; diff --git a/include/cru/platform/gui/UiApplication.hpp b/include/cru/platform/gui/UiApplication.hpp index be95e71c..8bad9668 100644 --- a/include/cru/platform/gui/UiApplication.hpp +++ b/include/cru/platform/gui/UiApplication.hpp @@ -9,16 +9,6 @@ #include namespace cru::platform::gui { -namespace details { -struct CreateWindowFlagTag; -} - -using CreateWindowFlag = Bitmask; - -struct CreateWindowFlags { - static constexpr CreateWindowFlag NoCaptionAndBorder{0b1}; -}; - // The entry point of a ui application. struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource { public: @@ -56,11 +46,7 @@ struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource { virtual std::vector GetAllWindow() = 0; - INativeWindow* CreateWindow(INativeWindow* parent) { - return this->CreateWindow(parent, CreateWindowFlag(0)); - }; - virtual INativeWindow* CreateWindow(INativeWindow* parent, - CreateWindowFlag flags) = 0; + virtual INativeWindow* CreateWindow() = 0; virtual cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() = 0; diff --git a/include/cru/platform/gui/Window.hpp b/include/cru/platform/gui/Window.hpp index a1816e4a..ab96045e 100644 --- a/include/cru/platform/gui/Window.hpp +++ b/include/cru/platform/gui/Window.hpp @@ -8,6 +8,18 @@ #include namespace cru::platform::gui { +namespace details { +struct WindowStyleFlagTag; +} + +using WindowStyleFlag = Bitmask; + +struct WindowStyleFlags { + static constexpr WindowStyleFlag NoCaptionAndBorder{0b1}; +}; + +enum class WindowVisibilityType { Show, Hide }; + enum class FocusChangeType { Gain, Lost }; enum class MouseEnterLeaveType { Enter, Leave }; @@ -36,9 +48,13 @@ struct INativeWindow : virtual IPlatformResource { virtual void Close() = 0; virtual INativeWindow* GetParent() = 0; + virtual void SetParent(INativeWindow* parent) = 0; + + virtual WindowStyleFlag GetShowFlag() = 0; + virtual void SetShowFlag(WindowStyleFlag flag) = 0; - virtual bool IsVisible() = 0; - virtual void SetVisible(bool is_visible) = 0; + virtual WindowVisibilityType GetVisibility() = 0; + virtual void SetVisibility(WindowVisibilityType visibility) = 0; virtual Size GetClientSize() = 0; virtual void SetClientSize(const Size& size) = 0; @@ -73,8 +89,11 @@ struct INativeWindow : virtual IPlatformResource { virtual IEvent* CreateEvent() = 0; virtual IEvent* DestroyEvent() = 0; virtual IEvent* PaintEvent() = 0; + + virtual IEvent* VisibilityChangeEvent(); virtual IEvent* ResizeEvent() = 0; virtual IEvent* FocusEvent() = 0; + virtual IEvent* MouseEnterLeaveEvent() = 0; virtual IEvent* MouseMoveEvent() = 0; virtual IEvent* MouseDownEvent() = 0; -- cgit v1.2.3