diff options
Diffstat (limited to 'include/cru/platform/gui/xcb/UiApplication.h')
-rw-r--r-- | include/cru/platform/gui/xcb/UiApplication.h | 64 |
1 files changed, 64 insertions, 0 deletions
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 <xcb/xcb.h> + +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<void()> 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<void()> action) = 0; + virtual long long SetTimeout(std::chrono::milliseconds milliseconds, + std::function<void()> action) = 0; + virtual long long SetInterval(std::chrono::milliseconds milliseconds, + std::function<void()> 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<INativeWindow*> 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<String> ShowSaveDialog(SaveDialogOptions options); + + /** + * \todo Implement on Windows. + */ + virtual std::optional<std::vector<String>> ShowOpenDialog( + OpenDialogOptions options); + + private: + xcb_connection_t* xcb_; +}; +} // namespace cru::platform::gui::xcb |