From cf1a0aea8080c06d70bba5984743c2948d4215c3 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 31 Aug 2025 21:48:29 +0800 Subject: Bootstrap xcb. --- include/cru/platform/gui/xcb/UiApplication.h | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 include/cru/platform/gui/xcb/UiApplication.h (limited to 'include/cru/platform/gui/xcb/UiApplication.h') diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h new file mode 100644 index 00000000..a58a538f --- /dev/null +++ b/include/cru/platform/gui/xcb/UiApplication.h @@ -0,0 +1,64 @@ +#pragma once +#include "../UiApplication.h" +#include "Base.h" + +#include + +namespace cru::platform::gui::xcb { +class XcbUiApplication : public XcbResource, public virtual IUiApplication { + public: + XcbUiApplication(); + ~XcbUiApplication(); + + void CheckXcbConnectionError(); + + virtual int Run() = 0; + + // Post a quit message with given quit code. + virtual void RequestQuit(int quit_code) = 0; + + virtual void AddOnQuitHandler(std::function handler) = 0; + + virtual bool IsQuitOnAllWindowClosed() = 0; + virtual void SetQuitOnAllWindowClosed(bool quit_on_all_window_closed) = 0; + + // Timer id should always be positive (not 0) and never the same. So it's ok + // to use negative value (or 0) to represent no timer. + virtual long long SetImmediate(std::function action) = 0; + virtual long long SetTimeout(std::chrono::milliseconds milliseconds, + std::function action) = 0; + virtual long long SetInterval(std::chrono::milliseconds milliseconds, + std::function action) = 0; + // Implementation should guarantee calls on timer id already canceled have no + // effects and do not crash. Also canceling negative id or 0 should always + // result in no-op. + virtual void CancelTimer(long long id) = 0; + + virtual std::vector GetAllWindow() = 0; + + virtual INativeWindow* CreateWindow() = 0; + + virtual cru::platform::graphics::IGraphicsFactory* GetGraphicsFactory() = 0; + + virtual ICursorManager* GetCursorManager() = 0; + + virtual IClipboard* GetClipboard() = 0; + + // If return nullptr, it means the menu is not supported. + virtual IMenu* GetApplicationMenu(); + + /** + * \todo Implement on Windows. + */ + virtual std::optional ShowSaveDialog(SaveDialogOptions options); + + /** + * \todo Implement on Windows. + */ + virtual std::optional> ShowOpenDialog( + OpenDialogOptions options); + + private: + xcb_connection_t* xcb_; +}; +} // namespace cru::platform::gui::xcb -- cgit v1.2.3