summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/lib/xlcd.c114
-rw-r--r--apps/plugins/lib/xlcd.h5
-rw-r--r--apps/plugins/mandelbrot.c164
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() */
110static 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
132void 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
157void 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
182void 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
201void 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 @@
29void xlcd_init(struct plugin_api* newrb); 29void xlcd_init(struct plugin_api* newrb);
30void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3); 30void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3);
31 31
32void xlcd_scroll_left(int count);
33void xlcd_scroll_right(int count);
34void xlcd_scroll_up(int count);
35void 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
27PLUGIN_HEADER 27PLUGIN_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
57static struct plugin_api* rb; 106static struct plugin_api* rb;
58static 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 */
61static long x_min; 109static long x_min;
@@ -75,9 +123,26 @@ static int py_max = LCD_HEIGHT;
75static int step_log2; 123static int step_log2;
76static unsigned max_iter; 124static unsigned max_iter;
77 125
126#ifdef USEGSLIB
78static unsigned char *gbuf; 127static unsigned char *gbuf;
79static unsigned int gbuf_size = 0; 128static unsigned int gbuf_size = 0;
80static unsigned char graybuffer[LCD_HEIGHT]; 129static unsigned char imgbuffer[LCD_HEIGHT];
130#else
131static fb_data imgbuffer[LCD_HEIGHT];
132#endif
133
134/* 8 entries cyclical, last entry is black (convergence) */
135#ifdef HAVE_LCD_COLOR
136static 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 */
142static 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
358void cleanup(void *parameter) 429void 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