summaryrefslogtreecommitdiff
path: root/src/screen
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen')
-rw-r--r--src/screen/screen.c38
-rw-r--r--src/screen/view.c17
-rw-r--r--src/screen/view.h3
3 files changed, 37 insertions, 21 deletions
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 <al/log.h>
+#include <al/math.h>
#include <nnwt/thread.h>
-#include <math.h>
#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 <al/lib.h>
-#include <math.h>
+#include <al/math.h>
#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);