aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform/gui')
-rw-r--r--include/cru/platform/gui/Base.h34
-rw-r--r--include/cru/platform/gui/Clipboard.h4
-rw-r--r--include/cru/platform/gui/Input.h (renamed from include/cru/platform/gui/Keyboard.h)34
-rw-r--r--include/cru/platform/gui/InputMethod.h8
-rw-r--r--include/cru/platform/gui/Menu.h7
-rw-r--r--include/cru/platform/gui/SaveOpenDialogOptions.h21
-rw-r--r--include/cru/platform/gui/UiApplication.h17
-rw-r--r--include/cru/platform/gui/Window.h13
-rw-r--r--include/cru/platform/gui/osx/Keyboard.h2
-rw-r--r--include/cru/platform/gui/sdl/Base.h4
-rw-r--r--include/cru/platform/gui/sdl/Window.h4
-rw-r--r--include/cru/platform/gui/win/Keyboard.h2
-rw-r--r--include/cru/platform/gui/xcb/Base.h8
-rw-r--r--include/cru/platform/gui/xcb/Clipboard.h4
-rw-r--r--include/cru/platform/gui/xcb/Cursor.h5
-rw-r--r--include/cru/platform/gui/xcb/Input.h (renamed from include/cru/platform/gui/xcb/Keyboard.h)2
-rw-r--r--include/cru/platform/gui/xcb/InputMethod.h9
-rw-r--r--include/cru/platform/gui/xcb/UiApplication.h2
-rw-r--r--include/cru/platform/gui/xcb/Window.h11
19 files changed, 91 insertions, 100 deletions
diff --git a/include/cru/platform/gui/Base.h b/include/cru/platform/gui/Base.h
index affce4cd..f8ffbc51 100644
--- a/include/cru/platform/gui/Base.h
+++ b/include/cru/platform/gui/Base.h
@@ -1,9 +1,6 @@
#pragma once
-#include "cru/base/Base.h"
-#include "cru/base/Bitmask.h"
-#include "cru/platform/graphics/Base.h"
-
-#include "../Resource.h"
+#include <cru/platform/Base.h> // IWYU pragma: export
+#include <cru/platform/Resource.h> // IWYU pragma: export
#ifdef CRU_IS_DLL
#ifdef CRU_PLATFORM_GUI_EXPORT_API
@@ -14,30 +11,3 @@
#else
#define CRU_PLATFORM_GUI_API
#endif
-
-namespace cru::platform::gui {
-struct ICursor;
-struct ICursorManager;
-struct IUiApplication;
-struct INativeWindow;
-struct IInputMethodContext;
-struct IClipboard;
-
-namespace details {
-struct TagMouseButton {};
-} // namespace details
-
-using MouseButton = Bitmask<details::TagMouseButton>;
-struct MouseButtons {
- constexpr static MouseButton None = MouseButton::FromOffset(0);
- constexpr static MouseButton Left = MouseButton::FromOffset(1);
- constexpr static MouseButton Middle = MouseButton::FromOffset(2);
- constexpr static MouseButton Right = MouseButton::FromOffset(3);
-};
-
-namespace mouse_buttons {
-constexpr MouseButton left{MouseButtons::Left};
-constexpr MouseButton middle{MouseButtons::Middle};
-constexpr MouseButton right{MouseButtons::Right};
-} // namespace mouse_buttons
-} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Clipboard.h b/include/cru/platform/gui/Clipboard.h
index 47267895..63932683 100644
--- a/include/cru/platform/gui/Clipboard.h
+++ b/include/cru/platform/gui/Clipboard.h
@@ -3,7 +3,7 @@
namespace cru::platform::gui {
struct IClipboard : virtual IPlatformResource {
- virtual String GetText() = 0;
- virtual void SetText(String text) = 0;
+ virtual std::string GetText() = 0;
+ virtual void SetText(std::string text) = 0;
};
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Keyboard.h b/include/cru/platform/gui/Input.h
index 97665e41..dca064d4 100644
--- a/include/cru/platform/gui/Keyboard.h
+++ b/include/cru/platform/gui/Input.h
@@ -1,8 +1,23 @@
#pragma once
-#include "cru/base/Bitmask.h"
-#include "cru/platform/gui/Base.h"
+#include "Base.h"
+
+#include <cru/base/Bitmask.h>
+
+#include <string>
namespace cru::platform::gui {
+namespace details {
+struct TagMouseButton {};
+} // namespace details
+
+using MouseButton = Bitmask<details::TagMouseButton>;
+struct MouseButtons {
+ constexpr static MouseButton None = MouseButton::FromOffset(0);
+ constexpr static MouseButton Left = MouseButton::FromOffset(1);
+ constexpr static MouseButton Middle = MouseButton::FromOffset(2);
+ constexpr static MouseButton Right = MouseButton::FromOffset(3);
+};
+
// Because of the complexity of keyboard layout, I only add code in US keyboard
// layout, the most widely used layout in China. We should try to make it easy
// to add new keyboard layout.
@@ -123,20 +138,15 @@ struct KeyModifiers {
static constexpr KeyModifier Ctrl = KeyModifier::FromOffset(2);
static constexpr KeyModifier Alt = KeyModifier::FromOffset(3);
static constexpr KeyModifier Command = KeyModifier::FromOffset(4);
- static constexpr KeyModifier none = None;
- static constexpr KeyModifier shift = Shift;
- static constexpr KeyModifier ctrl = Ctrl;
- static constexpr KeyModifier alt = Alt;
- static constexpr KeyModifier command = Command;
};
#ifdef CRU_PLATFORM_OSX
-constexpr KeyModifier kKeyModifierCommand = KeyModifiers::command;
+constexpr KeyModifier kKeyModifierCommand = KeyModifiers::Command;
#else
-constexpr KeyModifier kKeyModifierCommand = KeyModifiers::ctrl;
+constexpr KeyModifier kKeyModifierCommand = KeyModifiers::Ctrl;
#endif
-CRU_PLATFORM_GUI_API String ToString(KeyCode key_code);
-CRU_PLATFORM_GUI_API String ToString(KeyModifier key_modifier,
- StringView separator = u"+");
+CRU_PLATFORM_GUI_API std::string ToString(KeyCode key_code);
+CRU_PLATFORM_GUI_API std::string ToString(KeyModifier key_modifier,
+ std::string_view separator = "+");
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/InputMethod.h b/include/cru/platform/gui/InputMethod.h
index b4a1e9d9..d178cb8a 100644
--- a/include/cru/platform/gui/InputMethod.h
+++ b/include/cru/platform/gui/InputMethod.h
@@ -1,9 +1,9 @@
#pragma once
#include "Base.h"
-#include "cru/base/Event.h"
+#include <cru/base/Event.h>
+#include <cru/platform/GraphicsBase.h>
-#include <memory>
#include <vector>
namespace cru::platform::gui {
@@ -16,7 +16,7 @@ struct CompositionClause {
using CompositionClauses = std::vector<CompositionClause>;
struct CompositionText {
- String text;
+ std::string text;
CompositionClauses clauses;
TextRange selection;
};
@@ -61,6 +61,6 @@ struct IInputMethodContext : virtual IPlatformResource {
virtual IEvent<std::nullptr_t>* CompositionStartEvent() = 0;
virtual IEvent<std::nullptr_t>* CompositionEndEvent() = 0;
virtual IEvent<std::nullptr_t>* CompositionEvent() = 0;
- virtual IEvent<StringView>* TextEvent() = 0;
+ virtual IEvent<std::string>* TextEvent() = 0;
};
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Menu.h b/include/cru/platform/gui/Menu.h
index 6e2a8902..d076ca69 100644
--- a/include/cru/platform/gui/Menu.h
+++ b/include/cru/platform/gui/Menu.h
@@ -1,7 +1,6 @@
#pragma once
#include "Base.h"
-
-#include "Keyboard.h"
+#include "Input.h"
#include <functional>
@@ -9,8 +8,8 @@ namespace cru::platform::gui {
struct IMenu;
struct CRU_PLATFORM_GUI_API IMenuItem : virtual IPlatformResource {
- virtual String GetTitle() = 0;
- virtual void SetTitle(String title) = 0;
+ virtual std::string GetTitle() = 0;
+ virtual void SetTitle(std::string title) = 0;
virtual bool IsEnabled() = 0;
virtual void SetEnabled(bool enabled) = 0;
virtual IMenu* GetParentMenu() = 0;
diff --git a/include/cru/platform/gui/SaveOpenDialogOptions.h b/include/cru/platform/gui/SaveOpenDialogOptions.h
index cff4a44f..484a1552 100644
--- a/include/cru/platform/gui/SaveOpenDialogOptions.h
+++ b/include/cru/platform/gui/SaveOpenDialogOptions.h
@@ -1,12 +1,15 @@
#pragma once
#include "Base.h"
+#include <string>
+#include <vector>
+
namespace cru::platform::gui {
struct CRU_PLATFORM_GUI_API SaveDialogOptions {
- String title;
- String prompt;
- String message;
- std::vector<String> allowed_file_types;
+ std::string title;
+ std::string prompt;
+ std::string message;
+ std::vector<std::string> allowed_file_types;
bool allow_all_file_types = false;
};
@@ -20,29 +23,29 @@ template <typename T>
struct CRU_PLATFORM_GUI_API SaveDialogOptionsBuilderTemplate {
T options;
- SaveDialogOptionsBuilderTemplate& SetTitle(String title) {
+ SaveDialogOptionsBuilderTemplate& SetTitle(std::string title) {
options.title = std::move(title);
return *this;
}
- SaveDialogOptionsBuilderTemplate& SetPrompt(String prompt) {
+ SaveDialogOptionsBuilderTemplate& SetPrompt(std::string prompt) {
options.prompt = std::move(prompt);
return *this;
}
- SaveDialogOptionsBuilderTemplate& SetMessage(String message) {
+ SaveDialogOptionsBuilderTemplate& SetMessage(std::string message) {
options.message = std::move(message);
return *this;
}
SaveDialogOptionsBuilderTemplate& SetAllowedFileTypes(
- std::vector<String> allowed_file_types) {
+ std::vector<std::string> allowed_file_types) {
options.allowed_file_types = std::move(allowed_file_types);
return *this;
}
SaveDialogOptionsBuilderTemplate& AddAllowedFileType(
- String allowed_file_type) {
+ std::string allowed_file_type) {
options.allowed_file_types.push_back(allowed_file_type);
return *this;
}
diff --git a/include/cru/platform/gui/UiApplication.h b/include/cru/platform/gui/UiApplication.h
index b44a450f..d15a3c72 100644
--- a/include/cru/platform/gui/UiApplication.h
+++ b/include/cru/platform/gui/UiApplication.h
@@ -1,17 +1,20 @@
#pragma once
#include "Base.h"
-
-#include "cru/base/Bitmask.h"
-#include "cru/platform/gui/Menu.h"
-
+#include "Menu.h"
#include "SaveOpenDialogOptions.h"
+#include <cru/platform/graphics/Factory.h>
+
#include <chrono>
#include <functional>
-#include <memory>
#include <vector>
namespace cru::platform::gui {
+struct ICursorManager;
+struct INativeWindow;
+struct IInputMethodContext;
+struct IClipboard;
+
// The entry point of a ui application.
struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource {
public:
@@ -63,12 +66,12 @@ struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource {
/**
* \todo Implement on Windows/X11.
*/
- virtual std::optional<String> ShowSaveDialog(SaveDialogOptions options);
+ virtual std::optional<std::string> ShowSaveDialog(SaveDialogOptions options);
/**
* \todo Implement on Windows/X11.
*/
- virtual std::optional<std::vector<String>> ShowOpenDialog(
+ virtual std::optional<std::vector<std::string>> ShowOpenDialog(
OpenDialogOptions options);
};
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Window.h b/include/cru/platform/gui/Window.h
index 06fbdb65..3be5b21b 100644
--- a/include/cru/platform/gui/Window.h
+++ b/include/cru/platform/gui/Window.h
@@ -1,11 +1,16 @@
#pragma once
#include "Base.h"
-#include "Keyboard.h"
+#include "Input.h"
-#include "cru/base/Event.h"
+#include <cru/base/Event.h>
+#include <cru/platform/GraphicsBase.h>
+#include <cru/platform/graphics/Painter.h>
namespace cru::platform::gui {
+class ICursor;
+class IInputMethodContext;
+
namespace details {
struct WindowStyleFlagTag;
}
@@ -53,8 +58,8 @@ struct CRU_PLATFORM_GUI_API INativeWindow : virtual IPlatformResource {
virtual WindowStyleFlag GetStyleFlag() = 0;
virtual void SetStyleFlag(WindowStyleFlag flag) = 0;
- virtual String GetTitle() = 0;
- virtual void SetTitle(String title) = 0;
+ virtual std::string GetTitle() = 0;
+ virtual void SetTitle(std::string title) = 0;
virtual WindowVisibilityType GetVisibility() = 0;
virtual void SetVisibility(WindowVisibilityType visibility) = 0;
diff --git a/include/cru/platform/gui/osx/Keyboard.h b/include/cru/platform/gui/osx/Keyboard.h
index 89e0fa05..619fdd1f 100644
--- a/include/cru/platform/gui/osx/Keyboard.h
+++ b/include/cru/platform/gui/osx/Keyboard.h
@@ -1,5 +1,5 @@
#pragma once
-#include "cru/platform/gui/Keyboard.h"
+#include <cru/platform/gui/Input.h>
namespace cru::platform::gui::osx {
KeyCode KeyCodeFromOsxToCru(unsigned short n);
diff --git a/include/cru/platform/gui/sdl/Base.h b/include/cru/platform/gui/sdl/Base.h
index 9dd2eff6..0de2fd1f 100644
--- a/include/cru/platform/gui/sdl/Base.h
+++ b/include/cru/platform/gui/sdl/Base.h
@@ -8,13 +8,13 @@
namespace cru::platform::gui::sdl {
class SdlResource : public Object, public virtual IPlatformResource {
public:
- static constexpr const char16_t* kPlatformId = u"SDL";
+ static constexpr const char* kPlatformId = "SDL";
protected:
SdlResource() = default;
public:
- String GetPlatformId() const final { return String(kPlatformId); }
+ std::string GetPlatformId() const final { return kPlatformId; }
};
class SdlException : public PlatformException {
diff --git a/include/cru/platform/gui/sdl/Window.h b/include/cru/platform/gui/sdl/Window.h
index 1bcd42bf..4eb0a11d 100644
--- a/include/cru/platform/gui/sdl/Window.h
+++ b/include/cru/platform/gui/sdl/Window.h
@@ -29,8 +29,8 @@ class SdlWindow : public SdlResource, public virtual INativeWindow {
WindowStyleFlag GetStyleFlag() override;
void SetStyleFlag(WindowStyleFlag flag) override;
- String GetTitle() override;
- void SetTitle(String title) override;
+ std::string GetTitle() override;
+ void SetTitle(std::string title) override;
WindowVisibilityType GetVisibility() override;
void SetVisibility(WindowVisibilityType visibility) override;
diff --git a/include/cru/platform/gui/win/Keyboard.h b/include/cru/platform/gui/win/Keyboard.h
index 18b37b60..c98c49a3 100644
--- a/include/cru/platform/gui/win/Keyboard.h
+++ b/include/cru/platform/gui/win/Keyboard.h
@@ -1,7 +1,7 @@
#pragma once
#include "Base.h"
-#include "cru/platform/gui/Keyboard.h"
+#include <cru/platform/gui/Input.h>
namespace cru::platform::gui::win {
KeyCode CRU_WIN_GUI_API VirtualKeyToKeyCode(int virtual_key);
diff --git a/include/cru/platform/gui/xcb/Base.h b/include/cru/platform/gui/xcb/Base.h
index ad571a40..71007f87 100644
--- a/include/cru/platform/gui/xcb/Base.h
+++ b/include/cru/platform/gui/xcb/Base.h
@@ -1,19 +1,19 @@
#pragma once
#include <cru/base/Exception.h>
-
-#include "../../Resource.h"
+#include <cru/platform/Resource.h>
+#include <cru/platform/gui/Base.h>
namespace cru::platform::gui::xcb {
class XcbResource : public Object, public virtual IPlatformResource {
public:
- static constexpr const char16_t* kPlatformId = u"XCB";
+ static constexpr const char* kPlatformId = "XCB";
protected:
XcbResource() = default;
public:
- String GetPlatformId() const final { return String(kPlatformId); }
+ std::string GetPlatformId() const final { return std::string(kPlatformId); }
};
class XcbException : public PlatformException {
diff --git a/include/cru/platform/gui/xcb/Clipboard.h b/include/cru/platform/gui/xcb/Clipboard.h
index 44294cbc..690cd2b1 100644
--- a/include/cru/platform/gui/xcb/Clipboard.h
+++ b/include/cru/platform/gui/xcb/Clipboard.h
@@ -10,8 +10,8 @@ class XcbClipboard : public XcbResource, public virtual IClipboard {
explicit XcbClipboard(XcbUiApplication* application);
~XcbClipboard() override;
- String GetText() override;
- void SetText(String text) override;
+ std::string GetText() override;
+ void SetText(std::string text) override;
private:
XcbUiApplication* application_;
diff --git a/include/cru/platform/gui/xcb/Cursor.h b/include/cru/platform/gui/xcb/Cursor.h
index 02ede7dd..03399333 100644
--- a/include/cru/platform/gui/xcb/Cursor.h
+++ b/include/cru/platform/gui/xcb/Cursor.h
@@ -1,9 +1,10 @@
#pragma once
-#include <cru/base/io/Stream.h>
-#include "../Cursor.h"
#include "Base.h"
+#include <cru/base/io/Stream.h>
+#include <cru/platform/gui/Cursor.h>
+
#include <xcb/xcb.h>
#include <xcb/xcb_cursor.h>
#include <memory>
diff --git a/include/cru/platform/gui/xcb/Keyboard.h b/include/cru/platform/gui/xcb/Input.h
index adff95c1..77e213de 100644
--- a/include/cru/platform/gui/xcb/Keyboard.h
+++ b/include/cru/platform/gui/xcb/Input.h
@@ -1,6 +1,6 @@
#pragma once
-#include <cru/platform/gui/Keyboard.h>
+#include <cru/platform/gui/Input.h>
#include <xcb/xcb.h>
#include <xkbcommon/xkbcommon.h>
diff --git a/include/cru/platform/gui/xcb/InputMethod.h b/include/cru/platform/gui/xcb/InputMethod.h
index c5ffd416..e32ed63e 100644
--- a/include/cru/platform/gui/xcb/InputMethod.h
+++ b/include/cru/platform/gui/xcb/InputMethod.h
@@ -1,9 +1,10 @@
#pragma once
-#include <cru/base/Base.h>
-#include "../InputMethod.h"
#include "Base.h"
+#include <cru/base/Base.h>
+#include <cru/platform/gui/InputMethod.h>
+
#include <xcb-imdkit/imclient.h>
#include <xcb/xcb.h>
#include <optional>
@@ -66,7 +67,7 @@ class XcbXimInputMethodContext : public XcbResource,
IEvent<std::nullptr_t>* CompositionStartEvent() override;
IEvent<std::nullptr_t>* CompositionEndEvent() override;
IEvent<std::nullptr_t>* CompositionEvent() override;
- IEvent<StringView>* TextEvent() override;
+ IEvent<std::string>* TextEvent() override;
private:
void CreateIc(xcb_window_t window);
@@ -83,6 +84,6 @@ class XcbXimInputMethodContext : public XcbResource,
Event<std::nullptr_t> composition_start_event_;
Event<std::nullptr_t> composition_end_event_;
Event<std::nullptr_t> composition_event_;
- Event<StringView> text_event_;
+ Event<std::string> text_event_;
};
} // namespace cru::platform::gui::xcb
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h
index ab481c79..55138fd3 100644
--- a/include/cru/platform/gui/xcb/UiApplication.h
+++ b/include/cru/platform/gui/xcb/UiApplication.h
@@ -1,9 +1,9 @@
#pragma once
-#include "../UiApplication.h"
#include "Base.h"
#include <cru/base/platform/unix/EventLoop.h>
#include <cru/platform/graphics/cairo/CairoGraphicsFactory.h>
+#include <cru/platform/gui/UiApplication.h>
#include <xcb/xcb.h>
#include <functional>
diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h
index 5f1fd66e..bfd86297 100644
--- a/include/cru/platform/gui/xcb/Window.h
+++ b/include/cru/platform/gui/xcb/Window.h
@@ -1,11 +1,10 @@
#pragma once
-#include <cru/base/Base.h>
-#include "../../GraphicsBase.h"
-#include "../TimerHelper.h"
-#include "../Window.h"
#include "Base.h"
+#include <cru/platform/gui/TimerHelper.h>
+#include <cru/platform/gui/Window.h>
+
#include <cairo.h>
#include <xcb/xcb.h>
#include <cstddef>
@@ -34,8 +33,8 @@ class XcbWindow : public XcbResource, public virtual INativeWindow {
WindowStyleFlag GetStyleFlag() override;
void SetStyleFlag(WindowStyleFlag flag) override;
- String GetTitle() override;
- void SetTitle(String title) override;
+ std::string GetTitle() override;
+ void SetTitle(std::string title) override;
WindowVisibilityType GetVisibility() override;
void SetVisibility(WindowVisibilityType visibility) override;