From 2cc385b71e161eae39915bf24de53d5b704e7ea0 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 5 Aug 2025 10:50:08 -0400 Subject: Twitter module work, various cleanups and comment clarifications Signed-off-by: Andrew Opalach --- src/screen/screen.c | 38 +++++++++++++++++++++----------------- src/screen/view.c | 17 ++++++++++++++--- src/screen/view.h | 3 ++- 3 files changed, 37 insertions(+), 21 deletions(-) (limited to 'src/screen') diff --git a/src/screen/screen.c b/src/screen/screen.c index 965088f..bed1a26 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -1,7 +1,7 @@ #define AL_LOG_SECTION "screen" #include +#include #include -#include #include "view.h" #include "screen.h" @@ -12,6 +12,7 @@ #define SCREEN_IS_ZOOMING(scr) ((scr)->flags & CAMU_SCREEN_ZOOMING) #define SCREEN_ZOOM_MODE(scr, mode) ((scr)->flags & mode) #define SCREEN_INVALID_TS ((u64)-1) +#define SCREEN_DEFAULT_CURSOR(scr) ((scr->fullscreen || scr->vr_emulation) ? STELA_CURSOR_HIDDEN : STELA_CURSOR_NORMAL) #define SCREEN_LAST_CLICK_WITHIN(ns) \ (((scr)->last_click_ts != SCREEN_INVALID_TS) && (nn_get_timestamp() - (scr)->last_click_ts <= ns)) @@ -172,7 +173,7 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button) switch (state) { case STELA_BUTTON_PRESSED: scr->flags |= CAMU_SCREEN_DRAGGING; - scr->window->set_cursor(scr->window, STELA_CURSOR_CROSSHAIR); + scr->window->set_cursor(scr->window, STELA_CURSOR_MOVE); #ifdef CAMU_SCREEN_DRAG_SEEK //scr->callback(scr->userdata, CAMU_SCREEN_TOGGLE_PAUSE, NULL); #endif @@ -180,8 +181,7 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button) break; case STELA_BUTTON_RELEASED: scr->flags &= ~CAMU_SCREEN_DRAGGING; - scr->window->set_cursor(scr->window, (scr->fullscreen || scr->vr_emulation) ? - STELA_CURSOR_HIDDEN : STELA_CURSOR_NORMAL); + scr->window->set_cursor(scr->window, SCREEN_DEFAULT_CURSOR(scr)); #ifdef CAMU_SCREEN_DRAG_SEEK //scr->callback(scr->userdata, CAMU_SCREEN_TOGGLE_PAUSE, NULL); #endif @@ -196,13 +196,25 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button) break; } break; + case STELA_MOUSE2: { + if (scr->fullscreen && !SCREEN_IS_DRAGGING(scr)) { + switch (state) { + case STELA_BUTTON_PRESSED: + scr->window->set_cursor(scr->window, STELA_CURSOR_CROSSHAIR); + break; + case STELA_BUTTON_RELEASED: + scr->window->set_cursor(scr->window, SCREEN_DEFAULT_CURSOR(scr)); + break; + } + } + break; + } case STELA_MOUSE3: { switch (state) { - case STELA_BUTTON_RELEASED: { + case STELA_BUTTON_RELEASED: seek_to_percent_at_pointer(scr, scr->last_pointer_x); break; } - } break; } default: @@ -215,26 +227,18 @@ bool scroll_callback(void *userdata, f64 y) { struct camu_screen *scr = (struct camu_screen *)userdata; if (SCREEN_MOD1(scr)) { - f32 change = (y < 0.0) ? 0.025 : -0.025; + f32 change = (f32)stl_scale_scroll(y, 40.0); scr->callback(scr->userdata, CAMU_SCREEN_OFFSET_VOLUME, &change); } else { - // This sucks. -#if defined STELA_WINDOW_WAYLAND - y = -y / 160.0; -#elif defined STELA_WINDOW_WIN32 - y = -y / 1600.0; -#else - y = -y / 20.0; -#endif struct camu_view *view = get_view_from_mouse_pos(scr); if (view) { if (SCREEN_ZOOM_MODE(scr, CAMU_SCREEN_ZOOM_PAN_SIMPLE)) { - if (camu_view_zoom_simple(view, scr->width, scr->height, scr->last_pointer_x, scr->last_pointer_y, y)) { + if (camu_view_zoom_simple(view, scr->width, scr->height, scr->last_pointer_x, scr->last_pointer_y, stl_scale_scroll(y, 15.0))) { view->mode = CAMU_VIEW_DETACHED; return true; } } else if (SCREEN_ZOOM_MODE(scr, CAMU_SCREEN_ZOOM_FOV)) { - view->fov -= y; + camu_view_zoom_fov(view, stl_scale_scroll(y, 20.0)); } } } diff --git a/src/screen/view.c b/src/screen/view.c index 1676084..4719062 100644 --- a/src/screen/view.c +++ b/src/screen/view.c @@ -1,5 +1,5 @@ #include -#include +#include #include "view.h" @@ -13,6 +13,9 @@ #define Y_IN_BOUNDS(view, h, y) \ ((y + PAN_BOUNDS <= h) && (PAN_BOUNDS - y <= view->height * view->zoom * view->stretch)) +#define FOV_MIN AL_TO_RADIANS(10.0) +#define FOV_MAX AL_TO_RADIANS(160.0) + #define VIEW_ON_ITS_SIDE(view) \ (view->rotation % CAMU_VIEW_ROTATION_180 == CAMU_VIEW_ROTATION_90) @@ -24,7 +27,7 @@ void camu_view_init(struct camu_view *view, u32 width, u32 height) view->height = height; view->zindex = 0; view->stretch = 1.0; - view->fov = M_PI / 2.25; // 80 degrees + view->fov = AL_TO_RADIANS(80.0); } void camu_view_calculate(struct camu_view *view, u32 window_width, u32 window_height) @@ -95,7 +98,7 @@ bool camu_view_zoom_simple(struct camu_view *view, u32 window_width, u32 window_ f64 zoom = view->zoom + (v * view->zoom); if (zoom > ZOOM_MAX || zoom < ZOOM_MIN) return false; - x = view->x_offset - x_ratio * ((window_width * zoom) - prev_width); + x = view->x_offset - x_ratio * ((window_width * zoom) - prev_width); y = view->y_offset - y_ratio * ((window_height * zoom) - prev_height); if (!(X_IN_BOUNDS(view, window_width, x) && Y_IN_BOUNDS(view, window_height, y))) { return false; @@ -107,3 +110,11 @@ bool camu_view_zoom_simple(struct camu_view *view, u32 window_width, u32 window_ return true; } + +bool camu_view_zoom_fov(struct camu_view *view, f64 v) +{ + f64 fov = view->fov - v; + if (fov > FOV_MAX || fov < FOV_MIN) return false; + view->fov = fov; + return true; +} diff --git a/src/screen/view.h b/src/screen/view.h index b5f948e..2fc1742 100644 --- a/src/screen/view.h +++ b/src/screen/view.h @@ -34,5 +34,6 @@ struct camu_view { void camu_view_init(struct camu_view *view, u32 width, u32 height); void camu_view_calculate(struct camu_view *view, u32 window_width, u32 window_height); -bool camu_view_pan_simple(struct camu_view *view, u32 window_width, u32 window_height, f64 dx, f64 dy); bool camu_view_zoom_simple(struct camu_view *view, u32 window_width, u32 window_height, f64 x, f64 y, f64 v); +bool camu_view_pan_simple(struct camu_view *view, u32 window_width, u32 window_height, f64 dx, f64 dy); +bool camu_view_zoom_fov(struct camu_view *view, f64 v); -- cgit v1.2.3-101-g0448