diff options
Diffstat (limited to 'apps/plugins/mandelbrot.c')
-rw-r--r-- | apps/plugins/mandelbrot.c | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c index 5547d86535..2e9cb97eec 100644 --- a/apps/plugins/mandelbrot.c +++ b/apps/plugins/mandelbrot.c | |||
@@ -23,6 +23,27 @@ | |||
23 | #ifdef HAVE_LCD_BITMAP // this is not fun on the player | 23 | #ifdef HAVE_LCD_BITMAP // this is not fun on the player |
24 | # include "gray.h" | 24 | # include "gray.h" |
25 | 25 | ||
26 | /* variable button definitions */ | ||
27 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
28 | #define MANDELBROT_QUIT BUTTON_OFF | ||
29 | #define MANDELBROT_ZOOM_IN BUTTON_PLAY | ||
30 | #define MANDELBROT_ZOOM_OUT BUTTON_ON | ||
31 | #define MANDELBROT_MAXITER_INC BUTTON_F2 | ||
32 | #define MANDELBROT_MAXITER_DEC BUTTON_F1 | ||
33 | #define MANDELBROT_RESET BUTTON_F3 | ||
34 | |||
35 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
36 | #define MANDELBROT_QUIT BUTTON_OFF | ||
37 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_MENU | ||
38 | #define MANDELBROT_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | ||
39 | #define MANDELBROT_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) | ||
40 | #define MANDELBROT_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) | ||
41 | #define MANDELBROT_MAXITER_INC (BUTTON_MENU | BUTTON_RIGHT) | ||
42 | #define MANDELBROT_MAXITER_DEC (BUTTON_MENU | BUTTON_LEFT) | ||
43 | #define MANDELBROT_RESET (BUTTON_MENU | BUTTON_OFF) | ||
44 | |||
45 | #endif | ||
46 | |||
26 | static struct plugin_api* rb; | 47 | static struct plugin_api* rb; |
27 | static char buff[32]; | 48 | static char buff[32]; |
28 | static int lcd_aspect_ratio; | 49 | static int lcd_aspect_ratio; |
@@ -101,9 +122,17 @@ void calc_mandelbrot_set(void){ | |||
101 | } | 122 | } |
102 | } | 123 | } |
103 | 124 | ||
125 | void cleanup(void *parameter) | ||
126 | { | ||
127 | (void)parameter; | ||
128 | |||
129 | gray_release_buffer(); | ||
130 | } | ||
104 | 131 | ||
105 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | 132 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) |
106 | { | 133 | { |
134 | int button; | ||
135 | int lastbutton = BUTTON_NONE; | ||
107 | int grayscales; | 136 | int grayscales; |
108 | bool redraw = true; | 137 | bool redraw = true; |
109 | 138 | ||
@@ -141,12 +170,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
141 | 170 | ||
142 | redraw = false; | 171 | redraw = false; |
143 | 172 | ||
144 | switch (rb->button_get(true)) { | 173 | button = rb->button_get(true); |
145 | case BUTTON_OFF: | 174 | switch (button) { |
175 | case MANDELBROT_QUIT: | ||
146 | gray_release_buffer(); | 176 | gray_release_buffer(); |
147 | return PLUGIN_OK; | 177 | return PLUGIN_OK; |
148 | 178 | ||
149 | case BUTTON_ON: | 179 | case MANDELBROT_ZOOM_OUT: |
150 | x_min -= ((delta>>13)*(lcd_aspect_ratio>>13)); | 180 | x_min -= ((delta>>13)*(lcd_aspect_ratio>>13)); |
151 | x_max += ((delta>>13)*(lcd_aspect_ratio>>13)); | 181 | x_max += ((delta>>13)*(lcd_aspect_ratio>>13)); |
152 | y_min -= delta; | 182 | y_min -= delta; |
@@ -156,7 +186,14 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
156 | break; | 186 | break; |
157 | 187 | ||
158 | 188 | ||
159 | case BUTTON_PLAY: | 189 | case MANDELBROT_ZOOM_IN: |
190 | #ifdef MANDELBROT_ZOOM_IN_PRE | ||
191 | if (lastbutton != MANDELBROT_ZOOM_IN_PRE) | ||
192 | break; | ||
193 | #endif | ||
194 | #ifdef MANDELBROT_ZOOM_IN2 | ||
195 | case MANDELBROT_ZOOM_IN2: | ||
196 | #endif | ||
160 | x_min += ((delta>>13)*(lcd_aspect_ratio>>13)); | 197 | x_min += ((delta>>13)*(lcd_aspect_ratio>>13)); |
161 | x_max -= ((delta>>13)*(lcd_aspect_ratio>>13)); | 198 | x_max -= ((delta>>13)*(lcd_aspect_ratio>>13)); |
162 | y_min += delta; | 199 | y_min += delta; |
@@ -189,33 +226,36 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
189 | redraw = true; | 226 | redraw = true; |
190 | break; | 227 | break; |
191 | 228 | ||
192 | case BUTTON_F1: | 229 | case MANDELBROT_MAXITER_DEC: |
193 | if (max_iter>5){ | 230 | if (max_iter>5){ |
194 | max_iter -= 5; | 231 | max_iter -= 5; |
195 | redraw = true; | 232 | redraw = true; |
196 | } | 233 | } |
197 | break; | 234 | break; |
198 | 235 | ||
199 | case BUTTON_F2: | 236 | case MANDELBROT_MAXITER_INC: |
200 | if (max_iter < 195){ | 237 | if (max_iter < 195){ |
201 | max_iter += 5; | 238 | max_iter += 5; |
202 | redraw = true; | 239 | redraw = true; |
203 | } | 240 | } |
204 | break; | 241 | break; |
205 | 242 | ||
206 | case BUTTON_F3: | 243 | case MANDELBROT_RESET: |
207 | init_mandelbrot_set(); | 244 | init_mandelbrot_set(); |
208 | redraw = true; | 245 | redraw = true; |
209 | break; | 246 | break; |
210 | 247 | ||
211 | case SYS_USB_CONNECTED: | 248 | default: |
212 | gray_release_buffer(); | 249 | if (rb->default_event_handler_ex(button, cleanup, NULL) |
213 | rb->usb_screen(); | 250 | == SYS_USB_CONNECTED) |
214 | return PLUGIN_USB_CONNECTED; | 251 | return PLUGIN_USB_CONNECTED; |
252 | break; | ||
215 | } | 253 | } |
254 | if (button != BUTTON_NONE) | ||
255 | lastbutton = button; | ||
216 | } | 256 | } |
217 | gray_release_buffer(); | 257 | gray_release_buffer(); |
218 | return false; | 258 | return PLUGIN_OK; |
219 | } | 259 | } |
220 | #endif | 260 | #endif |
221 | #endif | 261 | #endif |