summaryrefslogtreecommitdiff
path: root/apps/plugins/mandelbrot.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/mandelbrot.c')
-rw-r--r--apps/plugins/mandelbrot.c64
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
26static struct plugin_api* rb; 47static struct plugin_api* rb;
27static char buff[32]; 48static char buff[32];
28static int lcd_aspect_ratio; 49static int lcd_aspect_ratio;
@@ -101,9 +122,17 @@ void calc_mandelbrot_set(void){
101 } 122 }
102} 123}
103 124
125void cleanup(void *parameter)
126{
127 (void)parameter;
128
129 gray_release_buffer();
130}
104 131
105enum plugin_status plugin_start(struct plugin_api* api, void* parameter) 132enum 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