summaryrefslogtreecommitdiff
path: root/src/window_glfm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/window_glfm.c')
-rw-r--r--src/window_glfm.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/window_glfm.c b/src/window_glfm.c
index 202a55f..a799f5d 100644
--- a/src/window_glfm.c
+++ b/src/window_glfm.c
@@ -4,6 +4,7 @@
#include "window_glfm.h"
#include "common.h"
+#include "keys.h"
f64 stl_scale_scroll(f64 v, f64 factor)
{
@@ -87,6 +88,28 @@ static void onOrientationChanged(GLFMDisplay *display, GLFMInterfaceOrientation
global.orientation = orientation;
}
+static u8 glfm_to_stela_button_action[] = {
+ [GLFMKeyActionPressed] = STELA_BUTTON_PRESSED,
+ [GLFMKeyActionReleased] = STELA_BUTTON_RELEASED
+};
+
+static bool onKey(GLFMDisplay *display, GLFMKeyCode key, GLFMKeyAction action, s32 modifiers)
+{
+ struct stl_window_glfm *glfm = (struct stl_window_glfm *)glfmGetUserData(display);
+ (void)modifiers;
+ u8 mapped_action = glfm_to_stela_button_action[action];
+ switch (key) {
+ case GLFMKeyCodeVolumeUp:
+ return stl_window_send_key_immediate_event(&glfm->w, mapped_action, STELA_KEY_RIGHT);
+ case GLFMKeyCodeVolumeDown:
+ return stl_window_send_key_immediate_event(&glfm->w, mapped_action, STELA_KEY_LEFT);
+ case GLFMKeyCodeNavigationBack:
+ default:
+ break;
+ }
+ return true;
+}
+
static u8 glfm_to_stela_touch[] = {
[GLFMTouchPhaseHover] = STELA_TOUCH_HOVER,
[GLFMTouchPhaseBegan] = STELA_TOUCH_BEGAN,
@@ -126,17 +149,19 @@ void glfmMain(GLFMDisplay *display)
glfmSetRenderFunc(display, onDraw);
glfmSetSurfaceDestroyedFunc(display, onSurfaceDestroyed);
glfmSetOrientationChangedFunc(display, onOrientationChanged);
+ glfmSetKeyFunc(display, onKey);
glfmSetTouchFunc(display, onTouch);
}
-static bool window_glfm_create_window(struct stl_window *window, u32 width, u32 height,
- const char *monitor, const char *name, u32 flags)
+static bool window_glfm_create_window(struct stl_window *window, u32 width, u32 height, u32 flags,
+ const char *monitor, const char *name, const char *app_id)
{
struct stl_window_glfm *glfm = (struct stl_window_glfm *)window;
(void)width;
(void)height;
(void)monitor;
(void)name;
+ (void)app_id;
glfmSetUserData(global.display, glfm);
s32 display_width, display_height;
glfmGetDisplaySize(global.display, &display_width, &display_height);