Mercurial > games > semicongine
changeset 1458:5e4b0b771dc4 default tip main
add: version to read unicode on windows
author | sam <sam@basx.dev> |
---|---|
date | Sat, 22 Mar 2025 14:55:46 +0700 |
parents | ac6ebf679d63 |
children | |
files | semicongine/platform/windows/rendering.nim |
diffstat | 1 files changed, 17 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/semicongine/platform/windows/rendering.nim Sat Mar 22 14:24:07 2025 +0700 +++ b/semicongine/platform/windows/rendering.nim Sat Mar 22 14:55:46 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,7 +124,7 @@ else: key -var unicodeData: array[WCHAR, 16] +var unicodeData: array[32, WCHAR] proc windowHandler( hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM @@ -136,23 +137,23 @@ 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 + UINT(wParam), + UINT((lParam shr 16) and 0xff), + nil, + addr(unicodeData[0]), + int32(unicodeData.len), + 0, ) - # if len > 0: - # TODO: convert to utf32 - # newWideCString() --> stuff - # event.char = unicodeData + if len > 0: + let wcstr = newWideCString(len) + for i in 0 ..< len: + wcstr[i] = cast[Utf16Char](unicodeData[i]) + let s = $wcstr + echo s + for r in s.runes(): + event.char = r + break 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(