From 428e9959177f8042cc78f530458a01a42871c618 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Thu, 25 Apr 2024 14:20:35 +0200 Subject: [PATCH] Add controls for detail and color change speed * increases detail / decreases detail 8 increases color change speed 2 decreases color change speed --- src/event_handling.c | 60 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/event_handling.c b/src/event_handling.c index 95e72b8..8452b79 100644 --- a/src/event_handling.c +++ b/src/event_handling.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/05 19:35:01 by ljiriste #+# #+# */ -/* Updated: 2024/04/25 10:35:46 by ljiriste ### ########.fr */ +/* Updated: 2024/04/25 14:13:46 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,59 @@ #define MOVE_AMOUNT 0.03 #define ZOOM_OUT 0.5 #define ZOOM_IN 2 +#define DETAIL_MULT 10 +#define SHIFT_MULT 1.2 +#define SHIFT_THRESH 0.0001 + +void change_shift_speed(double *speed, double mult, double thresh) +{ + if (-thresh < *speed && *speed < thresh) + { + if (mult > 0) + *speed = thresh; + else + *speed = -thresh; + return ; + } + if (*speed > 0 && mult > 0) + *speed *= mult; + else if (*speed > 0 && mult < 0) + *speed /= -mult; + else if (*speed < 0 && mult < 0) + *speed *= -mult; + else if (*speed < 0 && mult > 0) + *speed /= mult; + if (-thresh < *speed && *speed < thresh) + *speed = 0; + return ; +} + + +static void additional_keys(int keycode, t_session *s) +{ + if (keycode == XK_KP_Multiply) + { + if (s->set.detail * DETAIL_MULT > s->set.detail) + { + s->set.detail *= DETAIL_MULT; + erase_calced(&s->img.calced); + s->img.undersample = s->img.undersample_max; + } + } + else if (keycode == XK_KP_Divide) + { + if (s->set.detail >= DETAIL_MULT) + { + s->set.detail /= DETAIL_MULT; + erase_calced(&s->img.calced); + s->img.undersample = s->img.undersample_max; + } + } + else if (keycode == XK_KP_Up) + change_shift_speed(&s->view.color_shift_speed, SHIFT_MULT, SHIFT_THRESH); + else if (keycode == XK_KP_Down) + change_shift_speed(&s->view.color_shift_speed, -SHIFT_MULT, SHIFT_THRESH); +} int handle_key_press(int keycode, t_session *s) { @@ -38,7 +91,12 @@ int handle_key_press(int keycode, t_session *s) else if (keycode == XK_KP_Subtract) change_zoom(s, (t_vect2){.x = s->img.width / 2, .y = s->img.height / 2}, ZOOM_OUT); else if (keycode == XK_r) + { erase_calced(&s->img.calced); + s->img.undersample = s->img.undersample_max; + } + else + additional_keys(keycode, s); if (keycode != XK_Escape) draw_fractal(s); return (0); -- 2.30.2