hooks.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* hooks.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2022/12/24 18:43:31 by gychoi #+# #+# */ 9 /* Updated: 2023/01/05 18:56:22 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "fdf.h" 14 15 int close_hook(t_fdf *fdf) 16 { 17 mlx_destroy_window(fdf->mlx, fdf->win); 18 exit(0); 19 } 20 21 static void rotate_or_move(int keycode, t_fdf *fdf) 22 { 23 if (keycode == KEY_W) 24 fdf->angle.alpha += -0.0314; 25 if (keycode == KEY_S) 26 fdf->angle.alpha += 0.0314; 27 if (keycode == KEY_A) 28 fdf->angle.beta += 0.0314; 29 if (keycode == KEY_D) 30 fdf->angle.beta += -0.0314; 31 if (keycode == KEY_Q) 32 fdf->angle.gamma += -0.0314; 33 if (keycode == KEY_E) 34 fdf->angle.gamma += 0.0314; 35 if (keycode == KEY_UP) 36 fdf->offset.y -= (2 + (int)fdf->offset.zoom); 37 if (keycode == KEY_DOWN) 38 fdf->offset.y += (2 + (int)fdf->offset.zoom); 39 if (keycode == KEY_LEFT) 40 fdf->offset.x -= (2 + (int)fdf->offset.zoom); 41 if (keycode == KEY_RIGHT) 42 fdf->offset.x += (2 + (int)fdf->offset.zoom); 43 } 44 45 static void project_or_translate(int keycode, t_fdf *fdf) 46 { 47 if (keycode == KEY_ISO) 48 isometric(fdf); 49 if (keycode == KEY_OTH) 50 orthographic(fdf); 51 if (keycode == KEY_RST) 52 reset_translation(fdf); 53 if (keycode == KEY_Z_UP) 54 { 55 if (fdf->offset.z < 100) 56 fdf->offset.z *= 1.2; 57 } 58 if (keycode == KEY_Z_DOWN) 59 { 60 if (fdf->offset.z > 0) 61 fdf->offset.z /= 1.2; 62 } 63 } 64 65 static void zoom_or_bend(int keycode, t_fdf *fdf) 66 { 67 if (keycode == KEY_ZOOM_IN) 68 { 69 if (fdf->offset.zoom < 100) 70 fdf->offset.zoom *= 1.2; 71 } 72 if (keycode == KEY_ZOOM_OUT) 73 { 74 if (fdf->offset.zoom > 0) 75 fdf->offset.zoom /= 1.2; 76 fdf->offset.y = 0; 77 fdf->offset.x = 0; 78 } 79 if (keycode == KEY_BEND_UP) 80 { 81 if (fdf->offset.bend < 0.01) 82 fdf->offset.bend += 0.000012; 83 } 84 if (keycode == KEY_BEND_DOWN) 85 { 86 if (fdf->offset.bend > -0.01) 87 fdf->offset.bend -= 0.000012; 88 } 89 } 90 91 int key_hook(int keycode, t_fdf *fdf) 92 { 93 if (keycode == KEY_ESC) 94 { 95 mlx_destroy_window(fdf->mlx, fdf->win); 96 exit(0); 97 } 98 if (keycode == KEY_W || keycode == KEY_S || keycode == KEY_A \ 99 || keycode == KEY_D || keycode == KEY_Q || keycode == KEY_E \ 100 || keycode == KEY_UP || keycode == KEY_DOWN \ 101 || keycode == KEY_LEFT || keycode == KEY_RIGHT) 102 rotate_or_move(keycode, fdf); 103 if (keycode == KEY_ISO || keycode == KEY_OTH || keycode == KEY_RST \ 104 || keycode == KEY_Z_UP || keycode == KEY_Z_DOWN) 105 project_or_translate(keycode, fdf); 106 if (keycode == KEY_ZOOM_IN || keycode == KEY_ZOOM_OUT \ 107 || keycode == KEY_BEND_UP || keycode == KEY_BEND_DOWN) 108 zoom_or_bend(keycode, fdf); 109 draw_frame(fdf); 110 return (0); 111 }