From c924493670af7285683295d7ab38991e018b65cf Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 24 Feb 2020 14:08:50 +0100 Subject: Added zoom and movement --- src/event.c | 41 ++++++++++++++++++++++++++++++++++++++++- src/main.c | 3 ++- src/render.c | 12 +++--------- 3 files changed, 45 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/event.c b/src/event.c index 6aac07b..3f878f8 100644 --- a/src/event.c +++ b/src/event.c @@ -6,12 +6,15 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/24 09:52:35 by cacharle #+# #+# */ -/* Updated: 2020/02/24 10:10:29 by cacharle ### ########.fr */ +/* Updated: 2020/02/24 14:08:20 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "fractol.h" +#define MOVE_SPEED 0.2 +#define ZOOM_SPEED 1.1 + int event_quit(t_state *state) { state->running = false; @@ -20,7 +23,43 @@ int event_quit(t_state *state) int event_keydown(int key, t_state *state) { + printf("%d\n", key); if (key == MLXK_ESC) state->running = false; + else if (key == MLXK_UP) + state->center.i -= state->plane.i * MOVE_SPEED; + else if (key == MLXK_DOWN) + state->center.i += state->plane.i * MOVE_SPEED; + else if (key == MLXK_LEFT) + state->center.r -= state->plane.r * MOVE_SPEED; + else if (key == MLXK_RIGHT) + state->center.r += state->plane.r * MOVE_SPEED; + else + return (0); + render_update_window_complex(state); + return (0); +} + +int event_mouse(int button, int x, int y, t_state *state) +{ + (void)x; + (void)y; + + /* printf("%d\n", button); */ + /* printf("%d\n", x); */ + /* printf("%d\n", y); */ + if (button == MLX_MOUSE_SCROLL_UP) + { + state->plane.r /= ZOOM_SPEED; + state->plane.i /= ZOOM_SPEED; + } + else if (button == MLX_MOUSE_SCROLL_DOWN) + { + state->plane.r *= ZOOM_SPEED; + state->plane.i *= ZOOM_SPEED; + } + else + return (0); + render_update_window_complex(state); return (0); } diff --git a/src/main.c b/src/main.c index cf1d3bf..944d5aa 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/24 09:27:44 by cacharle #+# #+# */ -/* Updated: 2020/02/24 12:01:02 by cacharle ### ########.fr */ +/* Updated: 2020/02/24 13:55:02 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,7 @@ int main(int argc, char **argv) return (1); mlx_hook(state.window_ptr, 17, 0, event_quit, (void*)&state); mlx_hook(state.window_ptr, 2, 2, event_keydown, (void*)&state); + mlx_mouse_hook(state.window_ptr, event_mouse, (void*)&state); mlx_loop_hook(state.mlx_ptr, render_update, (void*)&state); mlx_loop(state.mlx_ptr); return (0); diff --git a/src/render.c b/src/render.c index b4ce29c..f4f3fed 100644 --- a/src/render.c +++ b/src/render.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/24 09:54:59 by cacharle #+# #+# */ -/* Updated: 2020/02/24 13:46:44 by cacharle ### ########.fr */ +/* Updated: 2020/02/24 14:01:43 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,8 +29,6 @@ static void st_render_fractal(t_state *state) { ((t_color*)state->window.data)[offset] = state->palette[state->func(state->window_complex[offset])]; - /* printf("%06x\n", ((t_color*)state->window.data)[offset].hexcode); */ - /* printf("%d\n", state->func(state->window_complex[offset])); */ offset++; } } @@ -62,14 +60,10 @@ void render_update_window_complex(t_state *state) while (++j < WINDOW_WIDTH) { state->window_complex[offset].r = - ((double)j / (double)WINDOW_WIDTH) * state->plane.r - (state->plane.r / 2.0); + ((double)j / (double)WINDOW_WIDTH) * state->plane.r - (state->plane.r / 2.0) + state->center.r; state->window_complex[offset].i = - ((double)i / (double)WINDOW_HEIGHT) * state->plane.i - (state->plane.i / 2.0); + ((double)i / (double)WINDOW_HEIGHT) * state->plane.i - (state->plane.i / 2.0) + state->center.i; offset++; - /* printf("%f %f\n", state->window_complex[i * WINDOW_WIDTH + j].a, state->window_complex[i * WINDOW_WIDTH + j].b); */ - /* ((double)i / (double)WINDOW_HEIGHT) * state->plane.b - (state->plane.b / 2.0); */ - /* printf("%f\n", (double)i / (double)WINDOW_HEIGHT * state->plane.b- (state->plane.b / 2.0)); */ - /* h_offset_to_complex(state, state->window_complex + i, i); // helper bloat? */ } } } -- cgit