Add controls for detail and color change speed
authorLukas Jiriste <ljiriste@student.42prague.com>
Thu, 25 Apr 2024 12:20:35 +0000 (14:20 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Thu, 25 Apr 2024 12:20:35 +0000 (14:20 +0200)
* increases detail
/ decreases detail
8 increases color change speed
2 decreases color change speed

src/event_handling.c

index 95e72b8a6de4ccc5bd483b73cdfd4a1eb3cc87f6..8452b796075e925b9df2e3d1a61b89f299fc83c6 100644 (file)
@@ -6,7 +6,7 @@
 /*   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)
 {
@@ -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);