diff options
Diffstat (limited to 'include/cru/platform/gui')
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; |