From 79c7aed3c2211ed3b721f4233077d78a20dbc0d8 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Mon, 26 Jul 2021 18:39:59 +0300 Subject: [PATCH] gg: allow easily detecting the edges of key_down keyboard events --- vlib/gg/gg.v | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/vlib/gg/gg.v b/vlib/gg/gg.v index a15b2beb53..3b882da86d 100644 --- a/vlib/gg/gg.v +++ b/vlib/gg/gg.v @@ -144,9 +144,11 @@ pub mut: scroll_x int scroll_y int // - key_modifiers Modifier - key_repeat bool - pressed_keys [key_code_max]bool + key_modifiers Modifier // the current key modifiers + key_repeat bool // whether the pressed key was an autorepeated one + 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 { @@ -311,7 +313,10 @@ fn gg_event_fn(ce &C.sapp_event, user_data voidptr) { g.key_repeat = e.key_repeat if e.typ in [.key_down, .key_up] { 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) { g.config.event_fn(e, g.config.user_data)