aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demos/CMakeLists.txt2
-rw-r--r--include/cru/platform/gui/xcb/Base.h4
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h13
-rw-r--r--src/platform/bootstrap/Bootstrap.cpp6
-rw-r--r--src/platform/bootstrap/CMakeLists.txt10
-rw-r--r--src/platform/gui/xcb/UiApplication.cpp8
6 files changed, 22 insertions, 21 deletions
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt
index b38bc7a8..665f359a 100644
--- a/demos/CMakeLists.txt
+++ b/demos/CMakeLists.txt
@@ -13,6 +13,8 @@ elseif(APPLE)
add_subdirectory(ScrollView)
add_subdirectory(InputMethod)
elseif(UNIX)
+ add_subdirectory(main)
+ add_subdirectory(ScrollView)
add_subdirectory(xcb)
endif()
diff --git a/include/cru/platform/gui/xcb/Base.h b/include/cru/platform/gui/xcb/Base.h
index f3bcfd01..ad571a40 100644
--- a/include/cru/platform/gui/xcb/Base.h
+++ b/include/cru/platform/gui/xcb/Base.h
@@ -7,13 +7,13 @@
namespace cru::platform::gui::xcb {
class XcbResource : public Object, public virtual IPlatformResource {
public:
- static String kPlatformId;
+ static constexpr const char16_t* kPlatformId = u"XCB";
protected:
XcbResource() = default;
public:
- String GetPlatformId() const final { return kPlatformId; }
+ String GetPlatformId() const final { return String(kPlatformId); }
};
class XcbException : public PlatformException {
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h
index 80995179..1797a303 100644
--- a/include/cru/platform/gui/xcb/UiApplication.h
+++ b/include/cru/platform/gui/xcb/UiApplication.h
@@ -71,22 +71,11 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication {
ICursorManager* GetCursorManager() override;
- virtual IClipboard* GetClipboard() = 0;
+ IClipboard* GetClipboard() override;
// If return nullptr, it means the menu is not supported.
IMenu* GetApplicationMenu() override;
- /**
- * \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:
void HandleXEvents();
diff --git a/src/platform/bootstrap/Bootstrap.cpp b/src/platform/bootstrap/Bootstrap.cpp
index e9183550..bcf12613 100644
--- a/src/platform/bootstrap/Bootstrap.cpp
+++ b/src/platform/bootstrap/Bootstrap.cpp
@@ -1,10 +1,11 @@
#include "cru/platform/bootstrap/Bootstrap.h"
-#include "cru/base/Base.h"
#if defined(_WIN32)
#include "cru/platform/gui/win/UiApplication.h"
#elif defined(__APPLE__)
#include "cru/platform/gui/osx/UiApplication.h"
+#elif defined(__unix)
+#include "cru/platform/gui/xcb/UiApplication.h"
#else
#endif
@@ -15,7 +16,8 @@ cru::platform::gui::IUiApplication* CreateUiApplication() {
#elif defined(__APPLE__)
return new cru::platform::gui::osx::OsxUiApplication();
#else
- NotImplemented();
+ return new cru::platform::gui::xcb::XcbUiApplication();
#endif
+ NotImplemented();
}
} // namespace cru::platform::bootstrap
diff --git a/src/platform/bootstrap/CMakeLists.txt b/src/platform/bootstrap/CMakeLists.txt
index 41f1e3d3..24cdff2b 100644
--- a/src/platform/bootstrap/CMakeLists.txt
+++ b/src/platform/bootstrap/CMakeLists.txt
@@ -17,10 +17,10 @@ if(WIN32)
elseif(APPLE)
target_link_libraries(CruPlatformGraphicsBootstrap PUBLIC CruPlatformGraphicsQuartz)
target_link_libraries(CruPlatformBootstrap PUBLIC CruPlatformGuiOsx)
-elseif(EMSCRIPTEN)
- target_link_libraries(CruPlatformGraphicsBootstrap PUBLIC CruBase)
- target_link_libraries(CruPlatformBootstrap PUBLIC CruBase) # TODO: Remember to change this.
-else()
+elseif(UNIX)
target_link_libraries(CruPlatformGraphicsBootstrap PUBLIC CruPlatformGraphicsCairo)
- target_link_libraries(CruPlatformBootstrap PUBLIC CruPlatformGraphicsCairo)
+ target_link_libraries(CruPlatformBootstrap PUBLIC CruPlatformGuiXcb)
+else()
+ target_link_libraries(CruPlatformGraphicsBootstrap PUBLIC CruBase)
+ target_link_libraries(CruPlatformBootstrap PUBLIC CruBase)
endif()
diff --git a/src/platform/gui/xcb/UiApplication.cpp b/src/platform/gui/xcb/UiApplication.cpp
index b95e669a..9daac385 100644
--- a/src/platform/gui/xcb/UiApplication.cpp
+++ b/src/platform/gui/xcb/UiApplication.cpp
@@ -1,5 +1,6 @@
#include "cru/platform/gui/xcb/UiApplication.h"
+#include "cru/base/Base.h"
#include "cru/platform/graphics/cairo/CairoGraphicsFactory.h"
#include "cru/platform/gui/Window.h"
#include "cru/platform/gui/xcb/Cursor.h"
@@ -23,6 +24,7 @@ XcbUiApplication::XcbUiApplication(
int screen_num;
xcb_connection_t *connection = xcb_connect(NULL, &screen_num);
+ xcb_connection_ = connection;
this->CheckXcbConnectionError();
event_loop_.SetPoll(xcb_get_file_descriptor(connection), POLLIN,
@@ -44,6 +46,10 @@ XcbUiApplication::~XcbUiApplication() {
}
}
+graphics::cairo::CairoGraphicsFactory *XcbUiApplication::GetCairoFactory() {
+ return cairo_factory_;
+}
+
void XcbUiApplication::CheckXcbConnectionError() {
if (xcb_connection_has_error(this->xcb_connection_)) {
throw XcbException("xcb_connection_has_error returned non-zero.");
@@ -144,6 +150,8 @@ XcbUiApplication::GetGraphicsFactory() {
ICursorManager *XcbUiApplication::GetCursorManager() { return cursor_manager_; }
+IClipboard *XcbUiApplication::GetClipboard() { NotImplemented(); }
+
IMenu *XcbUiApplication::GetApplicationMenu() { return nullptr; }
void XcbUiApplication::RegisterWindow(XcbWindow *window) {