summaryrefslogtreecommitdiff
path: root/src/screen
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-04-09 11:24:01 -0400
committerAndrew Opalach <andrew@akon.city> 2024-04-09 11:24:01 -0400
commit02f3d3565602146bbbfce85b2719246f24036cb9 (patch)
treec6588ffe297b777e36260effa4fa42b958ca6ba3 /src/screen
parentbbf3314165182e402ff25acccddc004a87f81ef0 (diff)
downloadcamu-02f3d3565602146bbbfce85b2719246f24036cb9.tar.gz
camu-02f3d3565602146bbbfce85b2719246f24036cb9.tar.bz2
camu-02f3d3565602146bbbfce85b2719246f24036cb9.zip
Massive restructure and many changes
- The server-side list concept is still a wip Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/screen')
-rw-r--r--src/screen/screen.c43
-rw-r--r--src/screen/screen.h1
-rw-r--r--src/screen/view.c1
-rw-r--r--src/screen/view.h1
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;
};