changeset 1456:af7754b983d3 default tip

add: some code for windows
author sam <sam@basx.dev>
date Sat, 22 Mar 2025 01:01:40 +0700
parents 4a06e29d1a27
children
files semicongine/platform/windows/rendering.nim
diffstat 1 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/platform/windows/rendering.nim	Sat Mar 22 00:35:13 2025 +0700
+++ b/semicongine/platform/windows/rendering.nim	Sat Mar 22 01:01:40 2025 +0700
@@ -123,6 +123,8 @@
   else:
     key
 
+var unicodeData: array[WCHAR, 16]
+
 proc windowHandler(
     hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
 ): LRESULT {.stdcall.} =
@@ -131,19 +133,25 @@
     currentEvents.add(Event(eventType: Quit))
   of WM_KEYDOWN, WM_SYSKEYDOWN:
     let key = mapLeftRightKeys(INT(wParam), lParam)
-    currentEvents.add(
+    var event =
       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 ToUnicodeEx*(
-      wVirtKey: UINT,
-      wScanCode: UINT,
-      lpKeyState: ptr BYTE,
-      pwszBuff: LPWSTR,
-      cchBuff: int32,
-      wFlags: UINT,
-      dwhkl: HKL,
-    ): int32 {.winapi, stdcall, dynlib: "user32", importc.}
+      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)