1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

gg: allow easily detecting the edges of key_down keyboard events

This commit is contained in:
Delyan Angelov 2021-07-26 18:39:59 +03:00
parent b173e55be5
commit 79c7aed3c2
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED

View File

@ -144,9 +144,11 @@ pub mut:
scroll_x int scroll_x int
scroll_y int scroll_y int
// //
key_modifiers Modifier key_modifiers Modifier // the current key modifiers
key_repeat bool key_repeat bool // whether the pressed key was an autorepeated one
pressed_keys [key_code_max]bool pressed_keys [key_code_max]bool // an array representing all currently pressed keys
pressed_keys_edge [key_code_max]bool // true when the previous state of pressed_keys,
// *before* the current event was different
} }
pub struct Size { pub struct Size {
@ -311,7 +313,10 @@ fn gg_event_fn(ce &C.sapp_event, user_data voidptr) {
g.key_repeat = e.key_repeat g.key_repeat = e.key_repeat
if e.typ in [.key_down, .key_up] { if e.typ in [.key_down, .key_up] {
key_idx := int(e.key_code) % key_code_max key_idx := int(e.key_code) % key_code_max
g.pressed_keys[key_idx] = e.typ == .key_down prev := g.pressed_keys[key_idx]
next := e.typ == .key_down
g.pressed_keys[key_idx] = next
g.pressed_keys_edge[key_idx] = prev != next
} }
if g.config.event_fn != voidptr(0) { if g.config.event_fn != voidptr(0) {
g.config.event_fn(e, g.config.user_data) g.config.event_fn(e, g.config.user_data)