diff options
author | Jens Arnold <amiconn@rockbox.org> | 2006-02-05 12:59:10 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2006-02-05 12:59:10 +0000 |
commit | e49cade42d00e8b1f6836f9e9c436cda67cf6437 (patch) | |
tree | 0df02bdf3959a3ec056c1ce7cf11f6b18de8594a /apps | |
parent | 1a03c3794776d2295b733ed516edee887bc81fcc (diff) | |
download | rockbox-e49cade42d00e8b1f6836f9e9c436cda67cf6437.tar.gz rockbox-e49cade42d00e8b1f6836f9e9c436cda67cf6437.zip |
Colour targets: Adapted mandelbrot plugin. The plugin library now contains scrolling routines for >= 8 bpp displays.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8578 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/lib/xlcd.c | 114 | ||||
-rw-r--r-- | apps/plugins/lib/xlcd.h | 5 | ||||
-rw-r--r-- | apps/plugins/mandelbrot.c | 164 |
3 files changed, 245 insertions, 38 deletions
diff --git a/apps/plugins/lib/xlcd.c b/apps/plugins/lib/xlcd.c index a0dcc2ac3e..33d807f2f3 100644 --- a/apps/plugins/lib/xlcd.c +++ b/apps/plugins/lib/xlcd.c | |||
@@ -105,5 +105,119 @@ void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3) | |||
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | #if LCD_DEPTH >= 8 | ||
109 | /* FIXME: intermediate solution until we have properly optimised memmove() */ | ||
110 | static void *my_memmove(void *dst0, const void *src0, size_t len0) | ||
111 | { | ||
112 | char *dst = (char *) dst0; | ||
113 | char *src = (char *) src0; | ||
114 | |||
115 | if (dst <= src) | ||
116 | { | ||
117 | while (len0--) | ||
118 | *dst++ = *src++; | ||
119 | } | ||
120 | else | ||
121 | { | ||
122 | dst += len0; | ||
123 | src += len0; | ||
124 | |||
125 | while (len0--) | ||
126 | *(--dst) = *(--src); | ||
127 | } | ||
128 | |||
129 | return dst0; | ||
130 | } | ||
131 | |||
132 | void xlcd_scroll_left(int count) | ||
133 | { | ||
134 | fb_data *data, *data_end; | ||
135 | int length, oldmode; | ||
136 | |||
137 | if ((unsigned)count >= LCD_WIDTH) | ||
138 | return; | ||
139 | |||
140 | data = local_rb->lcd_framebuffer; | ||
141 | data_end = data + LCD_WIDTH*LCD_HEIGHT; | ||
142 | length = LCD_WIDTH - count; | ||
143 | |||
144 | do | ||
145 | { | ||
146 | my_memmove(data, data + count, length * sizeof(fb_data)); | ||
147 | data += LCD_WIDTH; | ||
148 | } | ||
149 | while (data < data_end); | ||
150 | |||
151 | oldmode = local_rb->lcd_get_drawmode(); | ||
152 | local_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
153 | local_rb->lcd_fillrect(length, 0, count, LCD_HEIGHT); | ||
154 | local_rb->lcd_set_drawmode(oldmode); | ||
155 | } | ||
156 | |||
157 | void xlcd_scroll_right(int count) | ||
158 | { | ||
159 | fb_data *data, *data_end; | ||
160 | int length, oldmode; | ||
161 | |||
162 | if ((unsigned)count >= LCD_WIDTH) | ||
163 | return; | ||
164 | |||
165 | data = local_rb->lcd_framebuffer; | ||
166 | data_end = data + LCD_WIDTH*LCD_HEIGHT; | ||
167 | length = LCD_WIDTH - count; | ||
168 | |||
169 | do | ||
170 | { | ||
171 | my_memmove(data + count, data, length * sizeof(fb_data)); | ||
172 | data += LCD_WIDTH; | ||
173 | } | ||
174 | while (data < data_end); | ||
175 | |||
176 | oldmode = local_rb->lcd_get_drawmode(); | ||
177 | local_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
178 | local_rb->lcd_fillrect(0, 0, count, LCD_HEIGHT); | ||
179 | local_rb->lcd_set_drawmode(oldmode); | ||
180 | } | ||
181 | |||
182 | void xlcd_scroll_up(int count) | ||
183 | { | ||
184 | long length, oldmode; | ||
185 | |||
186 | if ((unsigned)count >= LCD_HEIGHT) | ||
187 | return; | ||
188 | |||
189 | length = LCD_HEIGHT - count; | ||
190 | |||
191 | my_memmove(local_rb->lcd_framebuffer, | ||
192 | local_rb->lcd_framebuffer + count * LCD_WIDTH, | ||
193 | length * LCD_WIDTH * sizeof(fb_data)); | ||
194 | |||
195 | oldmode = local_rb->lcd_get_drawmode(); | ||
196 | local_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
197 | local_rb->lcd_fillrect(0, length, LCD_WIDTH, count); | ||
198 | local_rb->lcd_set_drawmode(oldmode); | ||
199 | } | ||
200 | |||
201 | void xlcd_scroll_down(int count) | ||
202 | { | ||
203 | long length, oldmode; | ||
204 | |||
205 | if ((unsigned)count >= LCD_HEIGHT) | ||
206 | return; | ||
207 | |||
208 | length = LCD_HEIGHT - count; | ||
209 | |||
210 | my_memmove(local_rb->lcd_framebuffer + count * LCD_WIDTH, | ||
211 | local_rb->lcd_framebuffer, | ||
212 | length * LCD_WIDTH * sizeof(fb_data)); | ||
213 | |||
214 | oldmode = local_rb->lcd_get_drawmode(); | ||
215 | local_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
216 | local_rb->lcd_fillrect(0, 0, LCD_WIDTH, count); | ||
217 | local_rb->lcd_set_drawmode(oldmode); | ||
218 | } | ||
219 | |||
220 | #endif /* LCD_DEPTH >= 8 */ | ||
221 | |||
108 | #endif /* HAVE_LCD_BITMAP */ | 222 | #endif /* HAVE_LCD_BITMAP */ |
109 | 223 | ||
diff --git a/apps/plugins/lib/xlcd.h b/apps/plugins/lib/xlcd.h index 3f54643ec9..2eaa05cd0d 100644 --- a/apps/plugins/lib/xlcd.h +++ b/apps/plugins/lib/xlcd.h | |||
@@ -29,6 +29,11 @@ | |||
29 | void xlcd_init(struct plugin_api* newrb); | 29 | void xlcd_init(struct plugin_api* newrb); |
30 | void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3); | 30 | void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3); |
31 | 31 | ||
32 | void xlcd_scroll_left(int count); | ||
33 | void xlcd_scroll_right(int count); | ||
34 | void xlcd_scroll_up(int count); | ||
35 | void xlcd_scroll_down(int count); | ||
36 | |||
32 | #endif /* HAVE_LCD_BITMAP */ | 37 | #endif /* HAVE_LCD_BITMAP */ |
33 | #endif /* __XLCD_H__ */ | 38 | #endif /* __XLCD_H__ */ |
34 | 39 | ||
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c index 1d2b48cb8b..db478d5e25 100644 --- a/apps/plugins/mandelbrot.c +++ b/apps/plugins/mandelbrot.c | |||
@@ -18,17 +18,21 @@ | |||
18 | * KIND, either express or implied. | 18 | * KIND, either express or implied. |
19 | * | 19 | * |
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #ifndef SIMULATOR | ||
22 | #include "plugin.h" | 21 | #include "plugin.h" |
23 | 22 | ||
24 | #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) | 23 | #if defined(HAVE_LCD_BITMAP) && ((LCD_DEPTH >= 8) || !defined(SIMULATOR)) |
25 | #include "gray.h" | 24 | #include "gray.h" |
25 | #include "xlcd.h" | ||
26 | 26 | ||
27 | PLUGIN_HEADER | 27 | PLUGIN_HEADER |
28 | 28 | ||
29 | /* variable button definitions */ | 29 | /* variable button definitions */ |
30 | #if CONFIG_KEYPAD == RECORDER_PAD | 30 | #if CONFIG_KEYPAD == RECORDER_PAD |
31 | #define MANDELBROT_QUIT BUTTON_OFF | 31 | #define MANDELBROT_QUIT BUTTON_OFF |
32 | #define MANDELBROT_UP BUTTON_UP | ||
33 | #define MANDELBROT_DOWN BUTTON_DOWN | ||
34 | #define MANDELBROT_LEFT BUTTON_LEFT | ||
35 | #define MANDELBROT_RIGHT BUTTON_RIGHT | ||
32 | #define MANDELBROT_ZOOM_IN BUTTON_PLAY | 36 | #define MANDELBROT_ZOOM_IN BUTTON_PLAY |
33 | #define MANDELBROT_ZOOM_OUT BUTTON_ON | 37 | #define MANDELBROT_ZOOM_OUT BUTTON_ON |
34 | #define MANDELBROT_MAXITER_INC BUTTON_F2 | 38 | #define MANDELBROT_MAXITER_INC BUTTON_F2 |
@@ -37,6 +41,10 @@ PLUGIN_HEADER | |||
37 | 41 | ||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | 42 | #elif CONFIG_KEYPAD == ONDIO_PAD |
39 | #define MANDELBROT_QUIT BUTTON_OFF | 43 | #define MANDELBROT_QUIT BUTTON_OFF |
44 | #define MANDELBROT_UP BUTTON_UP | ||
45 | #define MANDELBROT_DOWN BUTTON_DOWN | ||
46 | #define MANDELBROT_LEFT BUTTON_LEFT | ||
47 | #define MANDELBROT_RIGHT BUTTON_RIGHT | ||
40 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_MENU | 48 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_MENU |
41 | #define MANDELBROT_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | 49 | #define MANDELBROT_ZOOM_IN (BUTTON_MENU | BUTTON_REL) |
42 | #define MANDELBROT_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) | 50 | #define MANDELBROT_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) |
@@ -45,17 +53,57 @@ PLUGIN_HEADER | |||
45 | #define MANDELBROT_MAXITER_DEC (BUTTON_MENU | BUTTON_LEFT) | 53 | #define MANDELBROT_MAXITER_DEC (BUTTON_MENU | BUTTON_LEFT) |
46 | #define MANDELBROT_RESET (BUTTON_MENU | BUTTON_OFF) | 54 | #define MANDELBROT_RESET (BUTTON_MENU | BUTTON_OFF) |
47 | 55 | ||
48 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | 56 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
57 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
49 | #define MANDELBROT_QUIT BUTTON_OFF | 58 | #define MANDELBROT_QUIT BUTTON_OFF |
59 | #define MANDELBROT_UP BUTTON_UP | ||
60 | #define MANDELBROT_DOWN BUTTON_DOWN | ||
61 | #define MANDELBROT_LEFT BUTTON_LEFT | ||
62 | #define MANDELBROT_RIGHT BUTTON_RIGHT | ||
50 | #define MANDELBROT_ZOOM_IN BUTTON_SELECT | 63 | #define MANDELBROT_ZOOM_IN BUTTON_SELECT |
51 | #define MANDELBROT_ZOOM_OUT BUTTON_MODE | 64 | #define MANDELBROT_ZOOM_OUT BUTTON_MODE |
52 | #define MANDELBROT_MAXITER_INC (BUTTON_ON | BUTTON_RIGHT) | 65 | #define MANDELBROT_MAXITER_INC (BUTTON_ON | BUTTON_RIGHT) |
53 | #define MANDELBROT_MAXITER_DEC (BUTTON_ON | BUTTON_LEFT) | 66 | #define MANDELBROT_MAXITER_DEC (BUTTON_ON | BUTTON_LEFT) |
54 | #define MANDELBROT_RESET BUTTON_REC | 67 | #define MANDELBROT_RESET BUTTON_REC |
68 | |||
69 | #elif CONFIG_KEYPAD == IPOD_4G_PAD | ||
70 | #define MANDELBROT_QUIT (BUTTON_SELECT | BUTTON_MENU) | ||
71 | #define MANDELBROT_UP BUTTON_MENU | ||
72 | #define MANDELBROT_DOWN BUTTON_PLAY | ||
73 | #define MANDELBROT_LEFT BUTTON_LEFT | ||
74 | #define MANDELBROT_RIGHT BUTTON_RIGHT | ||
75 | #define MANDELBROT_ZOOM_IN BUTTON_SCROLL_FWD | ||
76 | #define MANDELBROT_ZOOM_OUT BUTTON_SCROLL_BACK | ||
77 | #define MANDELBROT_MAXITER_INC (BUTTON_SELECT | BUTTON_RIGHT) | ||
78 | #define MANDELBROT_MAXITER_DEC (BUTTON_SELECT | BUTTON_LEFT) | ||
79 | #define MANDELBROT_RESET (BUTTON_SELECT | BUTTON_PLAY) | ||
80 | |||
81 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
82 | #define MANDELBROT_QUIT BUTTON_POWER | ||
83 | #define MANDELBROT_UP BUTTON_UP | ||
84 | #define MANDELBROT_DOWN BUTTON_DOWN | ||
85 | #define MANDELBROT_LEFT BUTTON_LEFT | ||
86 | #define MANDELBROT_RIGHT BUTTON_RIGHT | ||
87 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_MENU | ||
88 | #define MANDELBROT_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | ||
89 | #define MANDELBROT_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT) | ||
90 | #define MANDELBROT_MAXITER_INC (BUTTON_PLAY | BUTTON_RIGHT) | ||
91 | #define MANDELBROT_MAXITER_DEC (BUTTON_PLAY | BUTTON_LEFT) | ||
92 | #define MANDELBROT_RESET BUTTON_REC | ||
93 | #endif | ||
94 | |||
95 | #if LCD_DEPTH < 8 | ||
96 | #define USEGSLIB | ||
97 | #define MYLCD(fn) gray_ub_ ## fn | ||
98 | #define MYLCD_UPDATE() | ||
99 | #define MYXLCD(fn) gray_ub_ ## fn | ||
100 | #else | ||
101 | #define MYLCD(fn) rb->lcd_ ## fn | ||
102 | #define MYLCD_UPDATE() rb->lcd_update(); | ||
103 | #define MYXLCD(fn) xlcd_ ## fn | ||
55 | #endif | 104 | #endif |
56 | 105 | ||
57 | static struct plugin_api* rb; | 106 | static struct plugin_api* rb; |
58 | static char buff[32]; | ||
59 | 107 | ||
60 | /* Fixed point format: 6 bits integer part incl. sign, 26 bits fractional part */ | 108 | /* Fixed point format: 6 bits integer part incl. sign, 26 bits fractional part */ |
61 | static long x_min; | 109 | static long x_min; |
@@ -75,9 +123,26 @@ static int py_max = LCD_HEIGHT; | |||
75 | static int step_log2; | 123 | static int step_log2; |
76 | static unsigned max_iter; | 124 | static unsigned max_iter; |
77 | 125 | ||
126 | #ifdef USEGSLIB | ||
78 | static unsigned char *gbuf; | 127 | static unsigned char *gbuf; |
79 | static unsigned int gbuf_size = 0; | 128 | static unsigned int gbuf_size = 0; |
80 | static unsigned char graybuffer[LCD_HEIGHT]; | 129 | static unsigned char imgbuffer[LCD_HEIGHT]; |
130 | #else | ||
131 | static fb_data imgbuffer[LCD_HEIGHT]; | ||
132 | #endif | ||
133 | |||
134 | /* 8 entries cyclical, last entry is black (convergence) */ | ||
135 | #ifdef HAVE_LCD_COLOR | ||
136 | static const fb_data color[9] = { | ||
137 | LCD_RGBPACK(255, 0, 159), LCD_RGBPACK(159, 0, 255), LCD_RGBPACK(0, 0, 255), | ||
138 | LCD_RGBPACK(0, 159, 255), LCD_RGBPACK(0, 255, 128), LCD_RGBPACK(128, 255, 0), | ||
139 | LCD_RGBPACK(255, 191, 0), LCD_RGBPACK(255, 0, 0), LCD_RGBPACK(0, 0, 0) | ||
140 | }; | ||
141 | #else /* greyscale */ | ||
142 | static const fb_data color[9] = { | ||
143 | 255, 223, 191, 159, 128, 96, 64, 32, 0 | ||
144 | }; | ||
145 | #endif | ||
81 | 146 | ||
82 | #if CONFIG_CPU == SH7034 | 147 | #if CONFIG_CPU == SH7034 |
83 | 148 | ||
@@ -244,7 +309,7 @@ void init_mandelbrot_set(void) | |||
244 | #if CONFIG_LCD == LCD_SSD1815 /* Recorder, Ondio. */ | 309 | #if CONFIG_LCD == LCD_SSD1815 /* Recorder, Ondio. */ |
245 | x_min = -38L<<22; // -2.375<<26 | 310 | x_min = -38L<<22; // -2.375<<26 |
246 | x_max = 15L<<22; // 0.9375<<26 | 311 | x_max = 15L<<22; // 0.9375<<26 |
247 | #else /* Iriver H1x0 */ | 312 | #else /* all others (square pixels) */ |
248 | x_min = -36L<<22; // -2.25<<26 | 313 | x_min = -36L<<22; // -2.25<<26 |
249 | x_max = 12L<<22; // 0.75<<26 | 314 | x_max = 12L<<22; // 0.75<<26 |
250 | #endif | 315 | #endif |
@@ -260,7 +325,6 @@ void calc_mandelbrot_low_prec(void) | |||
260 | long a32, b32; | 325 | long a32, b32; |
261 | short x, x2, y, y2, a, b; | 326 | short x, x2, y, y2, a, b; |
262 | int p_x, p_y; | 327 | int p_x, p_y; |
263 | int brightness; | ||
264 | 328 | ||
265 | start_tick = last_yield = *rb->current_tick; | 329 | start_tick = last_yield = *rb->current_tick; |
266 | 330 | ||
@@ -286,13 +350,11 @@ void calc_mandelbrot_low_prec(void) | |||
286 | x = x2 - y2 + a; | 350 | x = x2 - y2 + a; |
287 | } | 351 | } |
288 | 352 | ||
289 | // "coloring" | 353 | if (n_iter > max_iter) |
290 | if (n_iter > max_iter){ | 354 | imgbuffer[p_y] = color[8]; |
291 | brightness = 0; // black | 355 | else |
292 | } else { | 356 | imgbuffer[p_y] = color[n_iter & 7]; |
293 | brightness = 255 - (32 * (n_iter & 7)); | 357 | |
294 | } | ||
295 | graybuffer[p_y] = brightness; | ||
296 | /* be nice to other threads: | 358 | /* be nice to other threads: |
297 | * if at least one tick has passed, yield */ | 359 | * if at least one tick has passed, yield */ |
298 | if (*rb->current_tick > last_yield) { | 360 | if (*rb->current_tick > last_yield) { |
@@ -300,8 +362,14 @@ void calc_mandelbrot_low_prec(void) | |||
300 | last_yield = *rb->current_tick; | 362 | last_yield = *rb->current_tick; |
301 | } | 363 | } |
302 | } | 364 | } |
303 | gray_ub_gray_bitmap_part(graybuffer, 0, py_min, 1, | 365 | #ifdef USEGSLIB |
366 | gray_ub_gray_bitmap_part(imgbuffer, 0, py_min, 1, | ||
304 | p_x, py_min, 1, py_max-py_min); | 367 | p_x, py_min, 1, py_max-py_min); |
368 | #else | ||
369 | rb->lcd_bitmap_part(imgbuffer, 0, py_min, 1, | ||
370 | p_x, py_min, 1, py_max-py_min); | ||
371 | rb->lcd_update_rect(p_x, py_min, 1, py_max-py_min); | ||
372 | #endif | ||
305 | } | 373 | } |
306 | } | 374 | } |
307 | 375 | ||
@@ -311,8 +379,7 @@ void calc_mandelbrot_high_prec(void) | |||
311 | unsigned n_iter; | 379 | unsigned n_iter; |
312 | long x, x2, y, y2, a, b; | 380 | long x, x2, y, y2, a, b; |
313 | int p_x, p_y; | 381 | int p_x, p_y; |
314 | int brightness; | 382 | |
315 | |||
316 | MULS32_INIT(); | 383 | MULS32_INIT(); |
317 | start_tick = last_yield = *rb->current_tick; | 384 | start_tick = last_yield = *rb->current_tick; |
318 | 385 | ||
@@ -336,13 +403,11 @@ void calc_mandelbrot_high_prec(void) | |||
336 | x = x2 - y2 + a; | 403 | x = x2 - y2 + a; |
337 | } | 404 | } |
338 | 405 | ||
339 | // "coloring" | 406 | if (n_iter > max_iter) |
340 | if (n_iter > max_iter){ | 407 | imgbuffer[p_y] = color[8]; |
341 | brightness = 0; // black | 408 | else |
342 | } else { | 409 | imgbuffer[p_y] = color[n_iter & 7]; |
343 | brightness = 255 - (32 * (n_iter & 7)); | 410 | |
344 | } | ||
345 | graybuffer[p_y] = brightness; | ||
346 | /* be nice to other threads: | 411 | /* be nice to other threads: |
347 | * if at least one tick has passed, yield */ | 412 | * if at least one tick has passed, yield */ |
348 | if (*rb->current_tick > last_yield) { | 413 | if (*rb->current_tick > last_yield) { |
@@ -350,16 +415,23 @@ void calc_mandelbrot_high_prec(void) | |||
350 | last_yield = *rb->current_tick; | 415 | last_yield = *rb->current_tick; |
351 | } | 416 | } |
352 | } | 417 | } |
353 | gray_ub_gray_bitmap_part(graybuffer, 0, py_min, 1, | 418 | #ifdef USEGSLIB |
419 | gray_ub_gray_bitmap_part(imgbuffer, 0, py_min, 1, | ||
354 | p_x, py_min, 1, py_max-py_min); | 420 | p_x, py_min, 1, py_max-py_min); |
421 | #else | ||
422 | rb->lcd_bitmap_part(imgbuffer, 0, py_min, 1, | ||
423 | p_x, py_min, 1, py_max-py_min); | ||
424 | rb->lcd_update_rect(p_x, py_min, 1, py_max-py_min); | ||
425 | #endif | ||
355 | } | 426 | } |
356 | } | 427 | } |
357 | 428 | ||
358 | void cleanup(void *parameter) | 429 | void cleanup(void *parameter) |
359 | { | 430 | { |
360 | (void)parameter; | 431 | (void)parameter; |
361 | 432 | #ifdef USEGSLIB | |
362 | gray_release(); | 433 | gray_release(); |
434 | #endif | ||
363 | } | 435 | } |
364 | 436 | ||
365 | #define REDRAW_NONE 0 | 437 | #define REDRAW_NONE 0 |
@@ -370,12 +442,16 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
370 | { | 442 | { |
371 | int button; | 443 | int button; |
372 | int lastbutton = BUTTON_NONE; | 444 | int lastbutton = BUTTON_NONE; |
373 | int grayscales; | ||
374 | int redraw = REDRAW_FULL; | 445 | int redraw = REDRAW_FULL; |
446 | #ifdef USEGSLIB | ||
447 | int grayscales; | ||
448 | char buff[32]; | ||
449 | #endif | ||
375 | 450 | ||
376 | rb = api; | 451 | rb = api; |
377 | (void)parameter; | 452 | (void)parameter; |
378 | 453 | ||
454 | #ifdef USEGSLIB | ||
379 | /* get the remainder of the plugin buffer */ | 455 | /* get the remainder of the plugin buffer */ |
380 | gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); | 456 | gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); |
381 | 457 | ||
@@ -392,6 +468,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
392 | } | 468 | } |
393 | 469 | ||
394 | gray_show(true); /* switch on grayscale overlay */ | 470 | gray_show(true); /* switch on grayscale overlay */ |
471 | #else | ||
472 | xlcd_init(rb); | ||
473 | #endif | ||
395 | 474 | ||
396 | init_mandelbrot_set(); | 475 | init_mandelbrot_set(); |
397 | 476 | ||
@@ -401,8 +480,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
401 | #if !defined(SIMULATOR) && defined(HAVE_ADJUSTABLE_CPU_FREQ) | 480 | #if !defined(SIMULATOR) && defined(HAVE_ADJUSTABLE_CPU_FREQ) |
402 | rb->cpu_boost(true); | 481 | rb->cpu_boost(true); |
403 | #endif | 482 | #endif |
404 | if (redraw == REDRAW_FULL) | 483 | if (redraw == REDRAW_FULL) { |
405 | gray_ub_clear_display(); | 484 | MYLCD(clear_display)(); |
485 | MYLCD_UPDATE(); | ||
486 | } | ||
406 | 487 | ||
407 | if (step_log2 <= -10) /* select precision */ | 488 | if (step_log2 <= -10) /* select precision */ |
408 | calc_mandelbrot_high_prec(); | 489 | calc_mandelbrot_high_prec(); |
@@ -422,7 +503,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
422 | button = rb->button_get(true); | 503 | button = rb->button_get(true); |
423 | switch (button) { | 504 | switch (button) { |
424 | case MANDELBROT_QUIT: | 505 | case MANDELBROT_QUIT: |
506 | #ifdef USEGSLIB | ||
425 | gray_release(); | 507 | gray_release(); |
508 | #endif | ||
426 | return PLUGIN_OK; | 509 | return PLUGIN_OK; |
427 | 510 | ||
428 | case MANDELBROT_ZOOM_OUT: | 511 | case MANDELBROT_ZOOM_OUT: |
@@ -451,34 +534,38 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
451 | redraw = REDRAW_FULL; | 534 | redraw = REDRAW_FULL; |
452 | break; | 535 | break; |
453 | 536 | ||
454 | case BUTTON_UP: | 537 | case MANDELBROT_UP: |
455 | y_min += y_delta; | 538 | y_min += y_delta; |
456 | y_max += y_delta; | 539 | y_max += y_delta; |
457 | gray_ub_scroll_down(LCD_HEIGHT/8); | 540 | MYXLCD(scroll_down)(LCD_HEIGHT/8); |
541 | MYLCD_UPDATE(); | ||
458 | py_max = (LCD_HEIGHT/8); | 542 | py_max = (LCD_HEIGHT/8); |
459 | redraw = REDRAW_PARTIAL; | 543 | redraw = REDRAW_PARTIAL; |
460 | break; | 544 | break; |
461 | 545 | ||
462 | case BUTTON_DOWN: | 546 | case MANDELBROT_DOWN: |
463 | y_min -= y_delta; | 547 | y_min -= y_delta; |
464 | y_max -= y_delta; | 548 | y_max -= y_delta; |
465 | gray_ub_scroll_up(LCD_HEIGHT/8); | 549 | MYXLCD(scroll_up)(LCD_HEIGHT/8); |
550 | MYLCD_UPDATE(); | ||
466 | py_min = (LCD_HEIGHT-LCD_HEIGHT/8); | 551 | py_min = (LCD_HEIGHT-LCD_HEIGHT/8); |
467 | redraw = REDRAW_PARTIAL; | 552 | redraw = REDRAW_PARTIAL; |
468 | break; | 553 | break; |
469 | 554 | ||
470 | case BUTTON_LEFT: | 555 | case MANDELBROT_LEFT: |
471 | x_min -= x_delta; | 556 | x_min -= x_delta; |
472 | x_max -= x_delta; | 557 | x_max -= x_delta; |
473 | gray_ub_scroll_right(LCD_WIDTH/8); | 558 | MYXLCD(scroll_right)(LCD_WIDTH/8); |
559 | MYLCD_UPDATE(); | ||
474 | px_max = (LCD_WIDTH/8); | 560 | px_max = (LCD_WIDTH/8); |
475 | redraw = REDRAW_PARTIAL; | 561 | redraw = REDRAW_PARTIAL; |
476 | break; | 562 | break; |
477 | 563 | ||
478 | case BUTTON_RIGHT: | 564 | case MANDELBROT_RIGHT: |
479 | x_min += x_delta; | 565 | x_min += x_delta; |
480 | x_max += x_delta; | 566 | x_max += x_delta; |
481 | gray_ub_scroll_left(LCD_WIDTH/8); | 567 | MYXLCD(scroll_left)(LCD_WIDTH/8); |
568 | MYLCD_UPDATE(); | ||
482 | px_min = (LCD_WIDTH-LCD_WIDTH/8); | 569 | px_min = (LCD_WIDTH-LCD_WIDTH/8); |
483 | redraw = REDRAW_PARTIAL; | 570 | redraw = REDRAW_PARTIAL; |
484 | break; | 571 | break; |
@@ -509,8 +596,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
509 | if (button != BUTTON_NONE) | 596 | if (button != BUTTON_NONE) |
510 | lastbutton = button; | 597 | lastbutton = button; |
511 | } | 598 | } |
599 | #ifdef USEGSLIB | ||
512 | gray_release(); | 600 | gray_release(); |
601 | #endif | ||
513 | return PLUGIN_OK; | 602 | return PLUGIN_OK; |
514 | } | 603 | } |
515 | #endif | 604 | #endif |
516 | #endif | ||