/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */
#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)
{
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);