diff options
Diffstat (limited to 'src/screen')
| -rw-r--r-- | src/screen/screen.c | 43 | ||||
| -rw-r--r-- | src/screen/screen.h | 1 | ||||
| -rw-r--r-- | src/screen/view.c | 1 | ||||
| -rw-r--r-- | src/screen/view.h | 1 |
4 files changed, 39 insertions, 7 deletions
diff --git a/src/screen/screen.c b/src/screen/screen.c index 604a357..b3ce0de 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -1,6 +1,7 @@ #include <aki/thread.h> #include <al/log.h> +#include "view.h" #include "screen.h" static struct camu_view *get_view_from_mouse_pos(struct camu_screen *scr) @@ -97,7 +98,18 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button) } break; case SEKIHI_MOUSE2: - break; // Move window. + switch (state) { + case SEKIHI_BUTTON_PRESSED: + scr->flags |= CAMU_SCREEN_MODIFIER; + break; + case SEKIHI_BUTTON_RELEASED: + scr->flags &= ~CAMU_SCREEN_MODIFIER; + break; + } + break; + case SEKIHI_MOUSE3: + scr->callback(scr->userdata, CAMU_SCREEN_CLOSE, 0.0); + break; default: break; } @@ -107,18 +119,24 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button) #if defined SEKIHI_WINDOW_WAYLAND #define SCROLL_MULTIPLIER 87.5 #else -#define SCROLL_MULTIPLIER 5.0 +#define SCROLL_MULTIPLIER 25.0 #endif static bool scroll_callback(void *userdata, f64 y) { struct camu_screen *scr = (struct camu_screen *)userdata; struct camu_view *view = get_view_from_mouse_pos(scr); - if (view && scr->flags & CAMU_SCREEN_ZOOM_PAN_SIMPLE) { - y = -y / SCROLL_MULTIPLIER; - if (camu_view_zoom_simple(view, scr->width, scr->height, scr->last_mouse_x, scr->last_mouse_y, y)) { - view->mode = CAMU_VIEW_DETACHED; + if (view) { + if (scr->flags & CAMU_SCREEN_MODIFIER) { + // Unimplemented. + view->rotation += y; return true; + } else if (scr->flags & CAMU_SCREEN_ZOOM_PAN_SIMPLE) { + y = -y / SCROLL_MULTIPLIER; + if (camu_view_zoom_simple(view, scr->width, scr->height, scr->last_mouse_x, scr->last_mouse_y, y)) { + view->mode = CAMU_VIEW_DETACHED; + return true; + } } } return false; @@ -163,6 +181,10 @@ static bool key_callback(void *userdata, u8 state, u8 button) } break; } + case 0x1f: + case 's': + scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, 0.0); + break; case 0x1d: scr->flags |= CAMU_SCREEN_MODIFIER; break; @@ -229,7 +251,8 @@ bool camu_screen_init(struct camu_screen *scr) bool camu_screen_create_window(struct camu_screen *scr, const char *name) { s32 flags = SEKIHI_WINDOW_VSYNC; - if (!scr->window->create_window(scr->window, CAMU_SCREEN_WIDTH, CAMU_SCREEN_HEIGHT, NULL, name, flags)) { + //flags |= SEKIHI_WINDOW_WALLPAPER; + if (!scr->window->create_window(scr->window, CAMU_SCREEN_WIDTH, CAMU_SCREEN_HEIGHT, "DP-1", name, flags)) { return false; } scr->width = scr->window->width; @@ -355,7 +378,11 @@ bool camu_screen_poll(struct camu_screen *scr, bool block) #if defined SEKIHI_EVENT_BUFFER skh_window_read_events(scr->window); #endif +#if defined SEKIHI_PAUSE return scr->window->should_refresh(scr->window); +#else + return true; +#endif } bool camu_screen_tick(struct camu_screen *scr) @@ -366,7 +393,9 @@ bool camu_screen_tick(struct camu_screen *scr) void camu_screen_wake(struct camu_screen *scr) { +#if defined SEKIHI_POLL_INLINE && defined SEKIHI_PAUSE scr->window->wake(scr->window); +#endif } void camu_screen_close(struct camu_screen *scr) diff --git a/src/screen/screen.h b/src/screen/screen.h index 0ca5779..67cd7ed 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -35,6 +35,7 @@ enum { CAMU_SCREEN_PREVIOUS, CAMU_SCREEN_TOGGLE_PAUSE, CAMU_SCREEN_SEEK, + CAMU_SCREEN_RESEEK, CAMU_SCREEN_CLOSE }; diff --git a/src/screen/view.c b/src/screen/view.c index dddc11a..ab84277 100644 --- a/src/screen/view.c +++ b/src/screen/view.c @@ -12,6 +12,7 @@ void camu_view_calculate(struct camu_view *view, s32 window_width, s32 window_height) { + if (view->mode == CAMU_VIEW_DETACHED) return; f64 ratio = window_width / (f64)window_height; f64 frame_ratio = view->width / (f64)view->height; view->ratio = ratio / frame_ratio; diff --git a/src/screen/view.h b/src/screen/view.h index e9bec81..5f33742 100644 --- a/src/screen/view.h +++ b/src/screen/view.h @@ -19,6 +19,7 @@ struct camu_view { f64 zoom; f64 x_offset; f64 y_offset; + f64 rotation; s32 zindex; }; |