summaryrefslogtreecommitdiff
path: root/apps/plugins/mandelbrot.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-10-18 21:45:00 +0000
committerJens Arnold <amiconn@rockbox.org>2004-10-18 21:45:00 +0000
commite35a658ded457698aca2401b699e743a3011cfce (patch)
treecb89b7785ef2c72f7a293fe165a4d3b76e38227f /apps/plugins/mandelbrot.c
parentd24766675db5faddb67810ca67b37491d49c2313 (diff)
downloadrockbox-e35a658ded457698aca2401b699e743a3011cfce.tar.gz
rockbox-e35a658ded457698aca2401b699e743a3011cfce.zip
Plugin rework 2: (all) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (minesweeper,pong,snake,snake2) added USB handling. (mandelbrot,mosaique) Fixed return value. (minesweeper) fast moving with button repeat. (oscillograph) Fixed cleanup in USB case.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5304 a1c6a512-1295-4272-9138-f99709370657
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