diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/win/native/window.hpp | 5 | ||||
-rw-r--r-- | include/cru/win/string.hpp | 8 |
2 files changed, 13 insertions, 0 deletions
diff --git a/include/cru/win/native/window.hpp b/include/cru/win/native/window.hpp index a137463b..a27a3384 100644 --- a/include/cru/win/native/window.hpp +++ b/include/cru/win/native/window.hpp @@ -156,6 +156,11 @@ class WinNativeWindow : public WinNativeResource, public virtual INativeWindow { Event<std::string> char_event_; Event<WindowNativeMessageEventArgs&> native_message_event_; + + // WM_CHAR may be sent twice successively with two utf-16 code units of + // surrogate pair when character is from supplementary planes. This field is + // used to save the previous one. + wchar_t last_wm_char_event_wparam_; }; class WinNativeWindowResolver : public WinNativeResource, diff --git a/include/cru/win/string.hpp b/include/cru/win/string.hpp index 3fdadbf8..b2bfd245 100644 --- a/include/cru/win/string.hpp +++ b/include/cru/win/string.hpp @@ -27,6 +27,14 @@ namespace cru::platform::win { std::string ToUtf8String(const std::wstring_view& string); std::wstring ToUtf16String(const std::string_view& string); +inline bool IsSurrogatePairLeading(wchar_t c) { + return c >= 0xD800 && c <= 0xDBFF; +} + +inline bool IsSurrogatePairTrailing(wchar_t c) { + return c >= 0xDC00 && c <= 0xDFFF; +} + using CodePoint = std::int32_t; constexpr CodePoint k_code_point_end = -1; |