From cf1a0aea8080c06d70bba5984743c2948d4215c3 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 31 Aug 2025 21:48:29 +0800 Subject: Bootstrap xcb. --- src/platform/CMakeLists.txt | 1 + src/platform/gui/xcb/CMakeLists.txt | 8 ++++++++ src/platform/gui/xcb/UiApplication.cpp | 20 ++++++++++++++++++++ src/platform/gui/xcb/Window.cpp | 1 + 4 files changed, 30 insertions(+) create mode 100644 src/platform/gui/xcb/CMakeLists.txt create mode 100644 src/platform/gui/xcb/UiApplication.cpp create mode 100644 src/platform/gui/xcb/Window.cpp (limited to 'src') diff --git a/src/platform/CMakeLists.txt b/src/platform/CMakeLists.txt index 3044df08..63ef9058 100644 --- a/src/platform/CMakeLists.txt +++ b/src/platform/CMakeLists.txt @@ -26,6 +26,7 @@ elseif (EMSCRIPTEN) add_subdirectory(graphics/web_canvas) elseif (UNIX) add_subdirectory(graphics/cairo) + add_subdirectory(gui/xcb) endif() add_subdirectory(bootstrap) diff --git a/src/platform/gui/xcb/CMakeLists.txt b/src/platform/gui/xcb/CMakeLists.txt new file mode 100644 index 00000000..2ef675a3 --- /dev/null +++ b/src/platform/gui/xcb/CMakeLists.txt @@ -0,0 +1,8 @@ +find_library(LIBRARY_CAIRO cairo REQUIRED) +find_library(LIBRARY_XCB xcb REQUIRED) +add_library(CruPlatformGuiX11 + UiApplication.cpp + Window.cpp +) +target_link_libraries(CruPlatformGuiX11 PUBLIC CruPlatformGui ${LIBRARY_XCB} ${LIBRARY_CAIRO}) + diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp new file mode 100644 index 00000000..baa36abe --- /dev/null +++ b/src/platform/gui/xcb/UiApplication.cpp @@ -0,0 +1,20 @@ +#include +#include + +namespace cru::platform::gui::xcb { +XcbUiApplication::XcbUiApplication() { + int screen_num; + xcb_connection_t *connection = xcb_connect(NULL, &screen_num); + this->CheckXcbConnectionError(); + const xcb_setup_t *setup = xcb_get_setup(connection); + xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup); + xcb_screen_t *screen = iter.data; +} + +XcbUiApplication::~XcbUiApplication() { xcb_disconnect(this->xcb_); } + +void XcbUiApplication::CheckXcbConnectionError() { +if (xcb_connection_has_error(this->xcb_)) { + throw XcbException(); +}} +} // namespace cru::platform::gui::xcb diff --git a/src/platform/gui/xcb/Window.cpp b/src/platform/gui/xcb/Window.cpp new file mode 100644 index 00000000..92772acf --- /dev/null +++ b/src/platform/gui/xcb/Window.cpp @@ -0,0 +1 @@ +#include -- cgit v1.2.3