Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions src/windy/platforms/emscripten/platform.nim
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,7 @@ proc onWheel(eventType: cint, wheelEvent: ptr EmscriptenWheelEvent, userData: po
# very different magnitudes. Use a flat OS-based multiplier instead.
let scale =
if "Mac" in platform: -1.0f
else: 0.2f
else: -0.2f
let
x = wheelEvent.deltaX.float32 * scale
y = wheelEvent.deltaY.float32 * scale
Expand All @@ -656,15 +656,27 @@ proc onWheel(eventType: cint, wheelEvent: ptr EmscriptenWheelEvent, userData: po
window.onScroll()
return 1

proc keyEventToButton(event: ptr EmscriptenKeyboardEvent): Button =
case $cast[cstring](event.code[0].addr)
of "MetaLeft": KeyLeftSuper
of "MetaRight": KeyRightSuper
else: keyCodeToButton(event.keyCode)

proc onKeyDown(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: pointer): EM_BOOL {.cdecl.} =
let window = cast[Window](userData)
let button = keyCodeToButton(keyEvent.keyCode)
let button = keyEventToButton(keyEvent)
window.handleButtonPress(button)
# Canceling a printable keydown suppresses the keypress that delivers runes.
# Keep navigation and shortcuts captured; onKeyPress consumes text input.
if window.runeInputEnabled and not keyEvent.ctrlKey and not keyEvent.metaKey:
let key = $cast[cstring](keyEvent.key[0].addr)
if key.runeLen == 1:
return 0
return 1

proc onKeyUp(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: pointer): EM_BOOL {.cdecl.} =
let window = cast[Window](userData)
let button = keyCodeToButton(keyEvent.keyCode)
let button = keyEventToButton(keyEvent)
window.handleButtonRelease(button)
return 1

Expand Down
Loading