changeset 1460:852897af1dd0

fix: unicode input on windows
author sam <sam@basx.dev>
date Sun, 23 Mar 2025 22:19:38 +0700
parents af7754b983d3
children 33529c504264
files semicongine/platform/windows/rendering.nim
diffstat 1 files changed, 11 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/platform/windows/rendering.nim	Sat Mar 22 01:01:40 2025 +0700
+++ b/semicongine/platform/windows/rendering.nim	Sun Mar 23 22:19:38 2025 +0700
@@ -1,4 +1,5 @@
 import std/tables
+import std/unicode
 import std/options
 
 import ../../thirdparty/winim/winim/inc/[windef, winuser, wincon, winbase]
@@ -123,36 +124,26 @@
   else:
     key
 
-var unicodeData: array[WCHAR, 16]
-
 proc windowHandler(
     hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
 ): LRESULT {.stdcall.} =
   case uMsg
   of WM_DESTROY:
     currentEvents.add(Event(eventType: Quit))
+  of WM_CHAR:
+    var event = Event(eventType: KeyPressed, key: Key.UNKNOWN)
+    var ws = newWideCString(1)
+    ws[0] = Utf16Char(wParam)
+    var s = $ws
+    for r in s.runes():
+      event.char = r
+      break
+    currentEvents.add(event)
   of WM_KEYDOWN, WM_SYSKEYDOWN:
     let key = mapLeftRightKeys(INT(wParam), lParam)
-    var event =
+    currentEvents.add(
       Event(eventType: KeyPressed, key: KeyTypeMap.getOrDefault(key, Key.UNKNOWN))
-    let len = ToUnicode(
-      wParam, (lParam shr 16) and 0xff, nil, addr(unicodeData[0]), unicodeData.len, 0
     )
-    # if len > 0:
-    # TODO: convert to utf32
-    # newWideCString() --> stuff
-    # event.char = unicodeData
-    currentEvents.add(event)
-    #[
-      proc ToUnicode*(
-        wVirtKey: UINT,
-        wScanCode: UINT,
-        lpKeyState: ptr BYTE,
-        pwszBuff: LPWSTR,
-        cchBuff: int32,
-        wFlags: UINT,
-      ): int32
-    ]#
   of WM_KEYUP, WM_SYSKEYUP:
     let key = mapLeftRightKeys(INT(wParam), lParam)
     currentEvents.add(