summaryrefslogtreecommitdiff
path: root/src/screen
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen')
-rw-r--r--src/screen/screen.c76
-rw-r--r--src/screen/screen.h2
2 files changed, 49 insertions, 29 deletions
diff --git a/src/screen/screen.c b/src/screen/screen.c
index eb68278..d0926da 100644
--- a/src/screen/screen.c
+++ b/src/screen/screen.c
@@ -169,58 +169,68 @@ static bool scroll_callback(void *userdata, f64 y)
return false;
}
-static bool key_callback(void *userdata, u8 state, u8 button)
+static bool key_callback(void *userdata, u8 state, u16 button)
{
struct camu_screen *scr = (struct camu_screen *)userdata;
switch (state) {
case STELA_BUTTON_PRESSED:
- //al_printf("%x\n", button);
switch (button) {
- case 0x2a: // shift
+ case STELA_KEY_LEFT_SHIFT:
+ case STELA_KEY_RIGHT_SHIFT:
scr->flags |= CAMU_SCREEN_MOD_SHIFT;
break;
- case 0x1d: // control
+ case STELA_KEY_LEFT_CONTROL:
+ case STELA_KEY_RIGHT_CONTROL:
scr->flags |= CAMU_SCREEN_MOD_CONTROL;
break;
- case 0x10: // q
+ case STELA_KEY_Q:
scr->callback(scr->userdata, CAMU_SCREEN_CLOSE, NULL);
break;
- case 0x31: // n
- case 0x20: // d
- case 0x6a: // right arrow
- case 0x4d: // right arrow (wine?)
+ case STELA_KEY_RIGHT:
+ if (scr->flags & CAMU_SCREEN_MOD_CONTROL) {
+ f64 plus_ten = 10.0;
+ scr->callback(scr->userdata, CAMU_SCREEN_RELATIVE_SEEK, &plus_ten);
+ break;
+ }
+ // fallthrough
+ case STELA_KEY_D:
+ case STELA_KEY_N:
scr->callback(scr->userdata, CAMU_SCREEN_NEXT, NULL);
break;
- case 0x30: // b
- case 0x1e: // a
- case 0x69: // left arrow
- case 0x4b: // left arrow (wine?)
+ case STELA_KEY_LEFT:
+ if (scr->flags & CAMU_SCREEN_MOD_CONTROL) {
+ f64 minus_ten = -10.0;
+ scr->callback(scr->userdata, CAMU_SCREEN_RELATIVE_SEEK, &minus_ten);
+ break;
+ }
+ // fallthrough
+ case STELA_KEY_B:
+ case STELA_KEY_A:
scr->callback(scr->userdata, CAMU_SCREEN_PREVIOUS, NULL);
break;
- case 0x39: // spacebar
+ case STELA_KEY_SPACE:
scr->callback(scr->userdata, CAMU_SCREEN_TOGGLE_PAUSE, NULL);
break;
- case 0x1f: // s
+ case STELA_KEY_S:
scr->callback(scr->userdata, CAMU_SCREEN_SHUFFLE, NULL);
break;
- case 0x12: // e
+ case STELA_KEY_E:
scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, NULL);
break;
- case 0x2f: { // v
+ case STELA_KEY_V: {
f32 volume = 1.0;
scr->callback(scr->userdata, CAMU_SCREEN_SET_VOLUME, &volume);
break;
- case 0xb: {
+ }
+ case STELA_KEY_0:
scr->callback(scr->userdata, CAMU_SCREEN_STATUS, NULL);
break;
- }
- }
#ifdef CAMU_SCREEN_DEBUG_KEY
- case 0x19: // p
+ case STELA_KEY_P:
scr->callback(scr->userdata, CAMU_SCREEN_DEBUG, NULL);
break;
#endif
- case 0x13: { // r
+ case STELA_KEY_R: {
struct camu_view *view = get_view_from_mouse_pos(scr);
if (view) {
if (scr->flags & CAMU_SCREEN_MOD_SHIFT) {
@@ -263,7 +273,7 @@ static bool key_callback(void *userdata, u8 state, u8 button)
}
break;
}
- case 0xd: { // +
+ case STELA_KEY_EQUAL: {
struct camu_view *view = get_view_from_mouse_pos(scr);
if (view) {
camu_view_zoom_simple(view, scr->width, scr->height, scr->width / 2.0, scr->height / 2.0, 0.05);
@@ -271,7 +281,7 @@ static bool key_callback(void *userdata, u8 state, u8 button)
}
break;
}
- case 0xc: { // -
+ case STELA_KEY_MINUS: {
struct camu_view *view = get_view_from_mouse_pos(scr);
if (view) {
camu_view_zoom_simple(view, scr->width, scr->height, scr->width / 2.0, scr->height / 2.0, -0.05);
@@ -285,10 +295,12 @@ static bool key_callback(void *userdata, u8 state, u8 button)
break;
case STELA_BUTTON_RELEASED:
switch (button) {
- case 0x2a: // shift
+ case STELA_KEY_LEFT_SHIFT:
+ case STELA_KEY_RIGHT_SHIFT:
scr->flags &= ~CAMU_SCREEN_MOD_SHIFT;
break;
- case 0x1d: // control
+ case STELA_KEY_LEFT_CONTROL:
+ case STELA_KEY_RIGHT_CONTROL:
scr->flags &= ~CAMU_SCREEN_MOD_CONTROL;
break;
}
@@ -298,14 +310,19 @@ static bool key_callback(void *userdata, u8 state, u8 button)
return false;
}
-static void key_immediate_callback(void *userdata, u8 state, u8 button)
+static void key_immediate_callback(void *userdata, u8 state, u16 button)
{
struct camu_screen *scr = (struct camu_screen *)userdata;
switch (state) {
case STELA_BUTTON_PRESSED:
switch (button) {
- case 0x21: { // f
- scr->window->toggle_fullscreen(scr->window);
+ case STELA_KEY_F: {
+ scr->fullscreen = !scr->fullscreen;
+ if (scr->renderer->set_fullscreen) {
+ scr->renderer->set_fullscreen(scr->renderer, scr->fullscreen);
+ } else {
+ scr->window->toggle_fullscreen(scr->window);
+ }
break;
}
}
@@ -364,6 +381,7 @@ bool camu_screen_create_window(struct camu_screen *scr, const char *name)
}
scr->width = scr->window->width;
scr->height = scr->window->height;
+ scr->fullscreen = false;
#ifdef STELA_EVENT_BUFFER
nn_thread_create(&scr->thread, event_thread, scr);
#endif
diff --git a/src/screen/screen.h b/src/screen/screen.h
index 2050d78..4b2e4c0 100644
--- a/src/screen/screen.h
+++ b/src/screen/screen.h
@@ -36,6 +36,7 @@ enum {
CAMU_SCREEN_SHUFFLE,
CAMU_SCREEN_TOGGLE_PAUSE,
CAMU_SCREEN_SEEK,
+ CAMU_SCREEN_RELATIVE_SEEK,
CAMU_SCREEN_RESEEK,
CAMU_SCREEN_SET_VOLUME,
CAMU_SCREEN_OFFSET_VOLUME,
@@ -62,6 +63,7 @@ struct camu_screen {
u32 flags;
u32 width;
u32 height;
+ bool fullscreen;
u64 last_click_ts;
f64 last_mouse_y;
f64 last_mouse_x;