gg: allow easily detecting the edges of key_down keyboard events
parent
b173e55be5
commit
79c7aed3c2
13
vlib/gg/gg.v
13
vlib/gg/gg.v
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue