aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/native/input_method.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-04-16 16:22:50 +0800
committercrupest <crupest@outlook.com>2020-04-16 16:22:50 +0800
commit39c0b5ad6814db9e46ac2cb4ab64a37e0e19749b (patch)
tree775745aa3126a0bb668f5e514c8a18090f676da6 /include/cru/platform/native/input_method.hpp
parentdb663ebb463dc00416038d068e538ab410558503 (diff)
downloadcru-39c0b5ad6814db9e46ac2cb4ab64a37e0e19749b.tar.gz
cru-39c0b5ad6814db9e46ac2cb4ab64a37e0e19749b.tar.bz2
cru-39c0b5ad6814db9e46ac2cb4ab64a37e0e19749b.zip
...
Diffstat (limited to 'include/cru/platform/native/input_method.hpp')
-rw-r--r--include/cru/platform/native/input_method.hpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/include/cru/platform/native/input_method.hpp b/include/cru/platform/native/input_method.hpp
index cce10d93..00017502 100644
--- a/include/cru/platform/native/input_method.hpp
+++ b/include/cru/platform/native/input_method.hpp
@@ -4,32 +4,50 @@
#include "cru/common/event.hpp"
#include <memory>
+#include <vector>
namespace cru::platform::native {
-// It is a reference, so there is a ref count, remember to destroy it to release
-// the ref after use.
-struct IInputMethodContextRef : virtual INativeResource {
+struct CompositionUnderline {
+ int start;
+ int end;
+};
+
+struct CompositionText {
+ std::string text;
+ std::vector<CompositionUnderline> underlines;
+ int caret_position;
+};
+
+struct IInputMethodContext : virtual INativeResource {
// Return true if you should draw composition text manually. Return false if
// system will take care of that for you.
virtual bool ShouldManuallyDrawCompositionText() = 0;
- // Reset composition string. Use this method to prepare typing.
- virtual void Reset() = 0;
- // Get the composition string.
- virtual std::string GetCompositionText() = 0;
+
+ virtual void EnableIME() = 0;
+
+ virtual void DisableIME() = 0;
+
+ virtual void CompleteComposition() = 0;
+
+ virtual void CancelComposition() = 0;
+
+ virtual const CompositionText& GetCompositionText() = 0;
+
// Set the candidate window lefttop. Use this method to prepare typing.
virtual void SetCandidateWindowPosition(const Point& point) = 0;
+
// Triggered when user starts composition.
virtual IEvent<std::nullptr_t>* CompositionStartEvent() = 0;
+
// Triggered when user stops composition.
virtual IEvent<std::nullptr_t>* CompositionEndEvent() = 0;
- // Triggered every time composition text changes, event args is the new
- // composition text.
- virtual IEvent<std::string>* CompositionTextChangeEvent() = 0;
+
+ // Triggered every time composition text changes.
+ virtual IEvent<std::nullptr_t>* CompositionEvent() = 0;
};
struct IInputMethodManager : virtual INativeResource {
- // Get a reference of context of a window.
- virtual std::unique_ptr<IInputMethodContextRef> GetContext(
+ virtual std::unique_ptr<IInputMethodContext> GetContext(
INativeWindow* window) = 0;
};
} // namespace cru::platform::native