diff options
author | 3gg <3gg@shellblade.net> | 2024-09-16 19:56:36 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2024-09-16 19:56:36 -0700 |
commit | 420970c8b83f20a4a2411af687e9d4a38a5fe81a (patch) | |
tree | bb43eeea3c863be8e1ddbb9e6effd4e01e3987fb | |
parent | 34c4c24d4e6337268fa6a318b7f333cd99b1454b (diff) |
Add function to query mouse buttons.
-rw-r--r-- | app/include/gfx/app.h | 11 | ||||
-rw-r--r-- | app/src/app.c | 20 |
2 files changed, 29 insertions, 2 deletions
diff --git a/app/include/gfx/app.h b/app/include/gfx/app.h index 3843d92..77b6ad2 100644 --- a/app/include/gfx/app.h +++ b/app/include/gfx/app.h | |||
@@ -31,6 +31,12 @@ typedef struct GfxAppCallbacks { | |||
31 | GfxAppResize resize; | 31 | GfxAppResize resize; |
32 | } GfxAppCallbacks; | 32 | } GfxAppCallbacks; |
33 | 33 | ||
34 | typedef enum MouseButton { | ||
35 | LMB, | ||
36 | RMB, | ||
37 | MMB, | ||
38 | } MouseButton; | ||
39 | |||
34 | typedef enum Key { | 40 | typedef enum Key { |
35 | KeyA = 'a', | 41 | KeyA = 'a', |
36 | KeyB, | 42 | KeyB, |
@@ -70,8 +76,11 @@ bool gfx_app_run(const GfxAppDesc*, const GfxAppCallbacks*); | |||
70 | /// Get the mouse coordinates relative to the app's window. | 76 | /// Get the mouse coordinates relative to the app's window. |
71 | void gfx_app_get_mouse_position(double* x, double* y); | 77 | void gfx_app_get_mouse_position(double* x, double* y); |
72 | 78 | ||
79 | /// Return if the given mouse button is pressed. | ||
80 | bool gfx_app_is_mouse_button_pressed(MouseButton); | ||
81 | |||
73 | /// Return true if the given key is pressed. | 82 | /// Return true if the given key is pressed. |
74 | bool gfx_is_key_pressed(Key); | 83 | bool gfx_app_is_key_pressed(Key); |
75 | 84 | ||
76 | #ifdef __cplusplus | 85 | #ifdef __cplusplus |
77 | } // extern "C" | 86 | } // extern "C" |
diff --git a/app/src/app.c b/app/src/app.c index 1e636af..9b816ee 100644 --- a/app/src/app.c +++ b/app/src/app.c | |||
@@ -149,12 +149,30 @@ void gfx_app_get_mouse_position(double* x, double* y) { | |||
149 | glfwGetCursorPos(g_gfx_app.window, x, y); | 149 | glfwGetCursorPos(g_gfx_app.window, x, y); |
150 | } | 150 | } |
151 | 151 | ||
152 | static int to_glfw_mouse_button(MouseButton button); | ||
153 | |||
154 | bool gfx_app_is_mouse_button_pressed(MouseButton button) { | ||
155 | return glfwGetMouseButton(g_gfx_app.window, to_glfw_mouse_button(button)) == | ||
156 | GLFW_PRESS; | ||
157 | } | ||
158 | |||
152 | static int to_glfw_key(Key key); | 159 | static int to_glfw_key(Key key); |
153 | 160 | ||
154 | bool gfx_is_key_pressed(Key key) { | 161 | bool gfx_app_is_key_pressed(Key key) { |
155 | return glfwGetKey(g_gfx_app.window, to_glfw_key(key)) == GLFW_PRESS; | 162 | return glfwGetKey(g_gfx_app.window, to_glfw_key(key)) == GLFW_PRESS; |
156 | } | 163 | } |
157 | 164 | ||
165 | static int to_glfw_mouse_button(MouseButton button) { | ||
166 | switch (button) { | ||
167 | case LMB: | ||
168 | return GLFW_MOUSE_BUTTON_LEFT; | ||
169 | case RMB: | ||
170 | return GLFW_MOUSE_BUTTON_RIGHT; | ||
171 | case MMB: | ||
172 | return GLFW_MOUSE_BUTTON_MIDDLE; | ||
173 | } | ||
174 | } | ||
175 | |||
158 | static int to_glfw_key(Key key) { | 176 | static int to_glfw_key(Key key) { |
159 | switch (key) { | 177 | switch (key) { |
160 | case KeyA: | 178 | case KeyA: |