diff options
author | crupest <crupest@outlook.com> | 2021-10-13 20:47:02 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-10-13 20:47:02 +0800 |
commit | 7ee9420d02be02868b10056753e046f42d022c96 (patch) | |
tree | 5c327c9a3a793a071c1d07b64b1a46b60a0b20eb /include/cru/osx | |
parent | 4fc39124bc876a9c78a04cb86397a4f0f08878e9 (diff) | |
download | cru-7ee9420d02be02868b10056753e046f42d022c96.tar.gz cru-7ee9420d02be02868b10056753e046f42d022c96.tar.bz2 cru-7ee9420d02be02868b10056753e046f42d022c96.zip |
...
Diffstat (limited to 'include/cru/osx')
-rw-r--r-- | include/cru/osx/gui/InputMethod.hpp | 3 | ||||
-rw-r--r-- | include/cru/osx/gui/Window.hpp | 46 |
2 files changed, 48 insertions, 1 deletions
diff --git a/include/cru/osx/gui/InputMethod.hpp b/include/cru/osx/gui/InputMethod.hpp new file mode 100644 index 00000000..426392dd --- /dev/null +++ b/include/cru/osx/gui/InputMethod.hpp @@ -0,0 +1,3 @@ +#pragma once +#include "Resource.hpp" +#include "Window.hpp" diff --git a/include/cru/osx/gui/Window.hpp b/include/cru/osx/gui/Window.hpp index a247c79e..56ae83e6 100644 --- a/include/cru/osx/gui/Window.hpp +++ b/include/cru/osx/gui/Window.hpp @@ -1,6 +1,7 @@ #pragma once #include "Resource.hpp" #include "cru/platform/gui/Base.hpp" +#include "cru/platform/gui/InputMethod.hpp" #include "cru/platform/gui/Window.hpp" #include <memory> @@ -8,12 +9,16 @@ namespace cru::platform::gui::osx { namespace details { class OsxWindowPrivate; -} +class OsxInputMethodContextPrivate; +} // namespace details class OsxUiApplication; +class OsxInputMethodContext; class OsxWindow : public OsxGuiResource, public INativeWindow { friend details::OsxWindowPrivate; + friend OsxInputMethodContext; + friend details::OsxInputMethodContextPrivate; public: OsxWindow(OsxUiApplication* ui_application, INativeWindow* parent, @@ -91,4 +96,43 @@ class OsxWindow : public OsxGuiResource, public INativeWindow { Event<NativeKeyEventArgs> key_down_event_; Event<NativeKeyEventArgs> key_up_event_; }; + +class OsxInputMethodContext : public OsxGuiResource, + public IInputMethodContext { + friend details::OsxInputMethodContextPrivate; + + public: + explicit OsxInputMethodContext(OsxWindow* window); + + CRU_DELETE_COPY(OsxInputMethodContext) + CRU_DELETE_MOVE(OsxInputMethodContext) + + ~OsxInputMethodContext() override; + + public: + bool ShouldManuallyDrawCompositionText() override; + + void EnableIME() override; + + void DisableIME() override; + + void CompleteComposition() override; + + void CancelComposition() override; + + CompositionText GetCompositionText() override; + + void SetCandidateWindowPosition(const Point& point) override; + + IEvent<std::nullptr_t>* CompositionStartEvent() override; + + IEvent<std::nullptr_t>* CompositionEndEvent() override; + + IEvent<std::nullptr_t>* CompositionEvent() override; + + IEvent<StringView>* TextEvent() override; + + private: + details::OsxInputMethodContextPrivate* p_; +}; } // namespace cru::platform::gui::osx |