summaryrefslogtreecommitdiff
path: root/src/screen
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen')
-rw-r--r--src/screen/screen.c26
-rw-r--r--src/screen/screen.h2
2 files changed, 14 insertions, 14 deletions
diff --git a/src/screen/screen.c b/src/screen/screen.c
index d5f6c78..5b5d175 100644
--- a/src/screen/screen.c
+++ b/src/screen/screen.c
@@ -86,6 +86,7 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button)
if (scr->last_click_ts && aki_get_timestamp() - scr->last_click_ts <= 300000) {
if (scr->flags & CAMU_SCREEN_MODIFIER) {
f64 percent = scr->last_mouse_x / scr->width;
+ percent = CLAMP(percent, 0.0, 100.0);
scr->callback(scr->userdata, CAMU_SCREEN_SEEK, &percent);
} else {
if (scr->last_mouse_x >= scr->width / 2.f) {
@@ -112,6 +113,7 @@ static bool mouse_button_callback(void *userdata, u8 state, u8 button)
switch (state) {
case STELA_BUTTON_RELEASED: {
f64 percent = scr->last_mouse_x / scr->width;
+ percent = CLAMP(percent, 0.0, 100.0);
scr->callback(scr->userdata, CAMU_SCREEN_SEEK, &percent);
break;
}
@@ -472,6 +474,17 @@ void camu_screen_run_queue(struct camu_screen *scr)
al_atomic_store(u8)(&scr->queued, 0, AL_ATOMIC_RELAXED);
aki_mutex_unlock(&scr->mutex);
}
+
+void camu_screen_clear(struct camu_screen *scr)
+{
+ aki_mutex_lock(&scr->mutex);
+ struct camu_screen_video *video;
+ al_array_foreach_ptr(scr->videos, i, video) {
+ struct camu_video_buffer *buf = video->buf;
+ al_atomic_store(u8)(&buf->ref, 0, AL_ATOMIC_RELAXED);
+ }
+ aki_mutex_unlock(&scr->mutex);
+}
#endif
void camu_screen_set_state(struct camu_screen *scr, s32 state)
@@ -516,19 +529,6 @@ void camu_screen_wake(struct camu_screen *scr)
#endif
}
-void camu_screen_clear(struct camu_screen *scr)
-{
-#ifdef CAMU_SCREEN_THREADED
- aki_mutex_lock(&scr->mutex);
- struct camu_screen_video *video;
- al_array_foreach_ptr(scr->videos, i, video) {
- struct camu_video_buffer *buf = video->buf;
- al_atomic_store(u8)(&buf->ref, 0, AL_ATOMIC_RELAXED);
- }
- aki_mutex_unlock(&scr->mutex);
-#endif
-}
-
void camu_screen_close(struct camu_screen *scr)
{
#ifdef CAMU_SCREEN_THREADED
diff --git a/src/screen/screen.h b/src/screen/screen.h
index 36d9075..349d41f 100644
--- a/src/screen/screen.h
+++ b/src/screen/screen.h
@@ -79,10 +79,10 @@ void camu_screen_add_buffer(struct camu_screen *scr, struct camu_video_buffer *b
void camu_screen_remove_buffer(struct camu_screen *scr, struct camu_video_buffer *buf);
#ifdef CAMU_SCREEN_THREADED
void camu_screen_run_queue(struct camu_screen *scr);
+void camu_screen_clear(struct camu_screen *scr);
#endif
void camu_screen_set_state(struct camu_screen *scr, s32 state);
bool camu_screen_poll(struct camu_screen *scr, bool block);
bool camu_screen_tick(struct camu_screen *scr);
void camu_screen_wake(struct camu_screen *scr);
-void camu_screen_clear(struct camu_screen *scr);
void camu_screen_close(struct camu_screen *scr);