aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-22 14:58:02 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-23 01:06:52 +0800
commitc6bde0b556a329a8f1679b09049eee03dce14971 (patch)
tree5e8f106aa4f8857f9935c326d415315ed7fb7030
parentce07249c9b99959fdac7973257526e7dd700d5d9 (diff)
downloadcru-c6bde0b556a329a8f1679b09049eee03dce14971.tar.gz
cru-c6bde0b556a329a8f1679b09049eee03dce14971.tar.bz2
cru-c6bde0b556a329a8f1679b09049eee03dce14971.zip
Impl GetAllWindow CreateWindow GetGraphicsFactory GetApplicationMenu of XcbUiApplication.
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h8
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp17
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<void()> action) override;
void CancelTimer(long long id) override;
- virtual std::vector<INativeWindow*> GetAllWindow() = 0;
+ std::vector<INativeWindow*> 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 <poll.h>
#include <xcb/xcb.h>
+#include <algorithm>
namespace cru::platform::gui::xcb {
XcbUiApplication::XcbUiApplication(
@@ -122,6 +124,21 @@ void XcbUiApplication::HandleXEvents() {
}
}
+std::vector<INativeWindow *> XcbUiApplication::GetAllWindow() {
+ std::vector<INativeWindow *> 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);
}