From d3e2a751353e6c5b0e4d7c0a2af1cdbc09d3ea95 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 14 Oct 2021 21:58:14 +0800 Subject: ... --- src/osx/gui/UiApplication.mm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/osx/gui/UiApplication.mm') diff --git a/src/osx/gui/UiApplication.mm b/src/osx/gui/UiApplication.mm index 2491390f..d2e6fe30 100644 --- a/src/osx/gui/UiApplication.mm +++ b/src/osx/gui/UiApplication.mm @@ -1,13 +1,18 @@ #include "cru/osx/gui/UiApplication.hpp" #include "cru/osx/graphics/quartz/Factory.hpp" +#include "cru/osx/gui/Window.hpp" +#include "cru/platform/gui/UiApplication.hpp" +#include "cru/platform/gui/Window.hpp" #include #include #include +#include #include #include +#include @interface AppDelegate : NSObject - (id)init:(cru::platform::gui::osx::details::OsxUiApplicationPrivate*)p; @@ -43,6 +48,8 @@ class OsxUiApplicationPrivate { std::unordered_map> next_tick_; std::unordered_map timers_; + std::vector windows_; + std::unique_ptr quartz_graphics_factory_; }; @@ -122,6 +129,25 @@ void OsxUiApplication::CancelTimer(long long id) { p_->timers_.erase(i); } } + +std::vector OsxUiApplication::GetAllWindow() { + std::vector result; + std::transform(p_->windows_.cbegin(), p_->windows_.cend(), std::back_inserter(result), + [](OsxWindow* w) { return static_cast(w); }); + return result; +} + +INativeWindow* OsxUiApplication::CreateWindow(INativeWindow* parent, CreateWindowFlag flags) { + auto window = new OsxWindow(this, parent, !(flags & CreateWindowFlags::NoCaptionAndBorder)); + p_->windows_.push_back(window); + return window; +} + +void OsxUiApplication::UnregisterWindow(OsxWindow* window) { + p_->windows_.erase( + std::remove(p_->windows_.begin(), p_->windows_.end(), static_cast(window)), + p_->windows_.cend()); +} } @implementation AppDelegate -- cgit v1.2.3