From c6bde0b556a329a8f1679b09049eee03dce14971 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Mon, 22 Sep 2025 14:58:02 +0800 Subject: Impl GetAllWindow CreateWindow GetGraphicsFactory GetApplicationMenu of XcbUiApplication. --- include/cru/platform/gui/xcb/UiApplication.h | 8 ++++---- src/platform/gui/xcb/UiApplication.cpp | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h index 591ac33f..4fa4ec8d 100644 --- a/include/cru/platform/gui/xcb/UiApplication.h +++ b/include/cru/platform/gui/xcb/UiApplication.h @@ -62,18 +62,18 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { std::function action) override; void CancelTimer(long long id) override; - virtual std::vector GetAllWindow() = 0; + std::vector GetAllWindow() override; - virtual INativeWindow* CreateWindow() = 0; + INativeWindow* CreateWindow() override; - virtual cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() = 0; + cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() override; virtual ICursorManager* GetCursorManager() = 0; virtual IClipboard* GetClipboard() = 0; // If return nullptr, it means the menu is not supported. - virtual IMenu* GetApplicationMenu(); + IMenu* GetApplicationMenu() override; /** * \todo Implement on Windows. diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp index 0a6ab07f..74b20bd7 100644 --- a/src/platform/gui/xcb/UiApplication.cpp +++ b/src/platform/gui/xcb/UiApplication.cpp @@ -1,10 +1,12 @@ #include "cru/platform/gui/xcb/UiApplication.h" #include "cru/platform/graphics/cairo/CairoGraphicsFactory.h" +#include "cru/platform/gui/Window.h" #include "cru/platform/gui/xcb/Window.h" #include #include +#include namespace cru::platform::gui::xcb { XcbUiApplication::XcbUiApplication( @@ -122,6 +124,21 @@ void XcbUiApplication::HandleXEvents() { } } +std::vector XcbUiApplication::GetAllWindow() { + std::vector windows(windows_.size()); + std::ranges::copy(windows_, windows.begin()); + return windows; +} + +INativeWindow *XcbUiApplication::CreateWindow() { return new XcbWindow(this); } + +cru::platform::graphics::IGraphicsFactory * +XcbUiApplication::GetGraphicsFactory() { + return cairo_factory_; +} + +IMenu *XcbUiApplication::GetApplicationMenu() { return nullptr; } + void XcbUiApplication::RegisterWindow(XcbWindow *window) { windows_.push_back(window); } -- cgit v1.2.3