diff options
-rw-r--r-- | apps/plugins/mandelbrot.c | 106 | ||||
-rw-r--r-- | manual/plugins/mandelbrot.tex | 94 |
2 files changed, 115 insertions, 85 deletions
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c index 3ead7e0509..a1a86c8d87 100644 --- a/apps/plugins/mandelbrot.c +++ b/apps/plugins/mandelbrot.c | |||
@@ -95,30 +95,34 @@ PLUGIN_HEADER | |||
95 | #define MANDELBROT_RESET (BUTTON_SELECT | BUTTON_PLAY) | 95 | #define MANDELBROT_RESET (BUTTON_SELECT | BUTTON_PLAY) |
96 | 96 | ||
97 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | 97 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
98 | #define MANDELBROT_QUIT BUTTON_POWER | 98 | #define MANDELBROT_QUIT BUTTON_POWER |
99 | #define MANDELBROT_UP BUTTON_UP | 99 | #define MANDELBROT_UP BUTTON_UP |
100 | #define MANDELBROT_DOWN BUTTON_DOWN | 100 | #define MANDELBROT_DOWN BUTTON_DOWN |
101 | #define MANDELBROT_LEFT BUTTON_LEFT | 101 | #define MANDELBROT_LEFT BUTTON_LEFT |
102 | #define MANDELBROT_RIGHT BUTTON_RIGHT | 102 | #define MANDELBROT_RIGHT BUTTON_RIGHT |
103 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT | 103 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT |
104 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) | 104 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) |
105 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) | 105 | #define MANDELBROT_ZOOM_OUT_PRE BUTTON_SELECT |
106 | #define MANDELBROT_MAXITER_INC (BUTTON_PLAY | BUTTON_RIGHT) | 106 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) |
107 | #define MANDELBROT_MAXITER_DEC (BUTTON_PLAY | BUTTON_LEFT) | 107 | #define MANDELBROT_MAXITER_INC_PRE BUTTON_PLAY |
108 | #define MANDELBROT_RESET BUTTON_REC | 108 | #define MANDELBROT_MAXITER_INC (BUTTON_PLAY | BUTTON_REL) |
109 | #define MANDELBROT_MAXITER_DEC_PRE BUTTON_PLAY | ||
110 | #define MANDELBROT_MAXITER_DEC (BUTTON_PLAY | BUTTON_REPEAT) | ||
111 | #define MANDELBROT_RESET BUTTON_REC | ||
109 | 112 | ||
110 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | 113 | #elif CONFIG_KEYPAD == GIGABEAT_PAD |
111 | #define MANDELBROT_QUIT BUTTON_POWER | 114 | #define MANDELBROT_QUIT BUTTON_POWER |
112 | #define MANDELBROT_UP BUTTON_UP | 115 | #define MANDELBROT_UP BUTTON_UP |
113 | #define MANDELBROT_DOWN BUTTON_DOWN | 116 | #define MANDELBROT_DOWN BUTTON_DOWN |
114 | #define MANDELBROT_LEFT BUTTON_LEFT | 117 | #define MANDELBROT_LEFT BUTTON_LEFT |
115 | #define MANDELBROT_RIGHT BUTTON_RIGHT | 118 | #define MANDELBROT_RIGHT BUTTON_RIGHT |
116 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT | 119 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT |
117 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) | 120 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) |
118 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) | 121 | #define MANDELBROT_ZOOM_OUT_PRE BUTTON_SELECT |
119 | #define MANDELBROT_MAXITER_INC BUTTON_VOL_UP | 122 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) |
120 | #define MANDELBROT_MAXITER_DEC BUTTON_VOL_DOWN | 123 | #define MANDELBROT_MAXITER_INC BUTTON_VOL_UP |
121 | #define MANDELBROT_RESET BUTTON_A | 124 | #define MANDELBROT_MAXITER_DEC BUTTON_VOL_DOWN |
125 | #define MANDELBROT_RESET BUTTON_A | ||
122 | 126 | ||
123 | #elif CONFIG_KEYPAD == SANSA_E200_PAD | 127 | #elif CONFIG_KEYPAD == SANSA_E200_PAD |
124 | #define MANDELBROT_QUIT BUTTON_POWER | 128 | #define MANDELBROT_QUIT BUTTON_POWER |
@@ -145,30 +149,32 @@ PLUGIN_HEADER | |||
145 | #define MANDELBROT_RESET BUTTON_REC | 149 | #define MANDELBROT_RESET BUTTON_REC |
146 | 150 | ||
147 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | 151 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD |
148 | #define MANDELBROT_QUIT BUTTON_POWER | 152 | #define MANDELBROT_QUIT BUTTON_POWER |
149 | #define MANDELBROT_UP BUTTON_SCROLL_UP | 153 | #define MANDELBROT_UP BUTTON_SCROLL_UP |
150 | #define MANDELBROT_DOWN BUTTON_SCROLL_DOWN | 154 | #define MANDELBROT_DOWN BUTTON_SCROLL_DOWN |
151 | #define MANDELBROT_LEFT BUTTON_LEFT | 155 | #define MANDELBROT_LEFT BUTTON_LEFT |
152 | #define MANDELBROT_RIGHT BUTTON_RIGHT | 156 | #define MANDELBROT_RIGHT BUTTON_RIGHT |
153 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_PLAY | 157 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_PLAY |
154 | #define MANDELBROT_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) | 158 | #define MANDELBROT_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) |
155 | #define MANDELBROT_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) | 159 | #define MANDELBROT_ZOOM_OUT_PRE BUTTON_PLAY |
156 | #define MANDELBROT_MAXITER_INC BUTTON_FF | 160 | #define MANDELBROT_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) |
157 | #define MANDELBROT_MAXITER_DEC BUTTON_REW | 161 | #define MANDELBROT_MAXITER_INC BUTTON_FF |
158 | #define MANDELBROT_RESET (BUTTON_PLAY | BUTTON_REW) | 162 | #define MANDELBROT_MAXITER_DEC BUTTON_REW |
163 | #define MANDELBROT_RESET (BUTTON_PLAY | BUTTON_REW) | ||
159 | 164 | ||
160 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | 165 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD |
161 | #define MANDELBROT_QUIT BUTTON_EQ | 166 | #define MANDELBROT_QUIT BUTTON_EQ |
162 | #define MANDELBROT_UP BUTTON_UP | 167 | #define MANDELBROT_UP BUTTON_UP |
163 | #define MANDELBROT_DOWN BUTTON_DOWN | 168 | #define MANDELBROT_DOWN BUTTON_DOWN |
164 | #define MANDELBROT_LEFT BUTTON_LEFT | 169 | #define MANDELBROT_LEFT BUTTON_LEFT |
165 | #define MANDELBROT_RIGHT BUTTON_RIGHT | 170 | #define MANDELBROT_RIGHT BUTTON_RIGHT |
166 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT | 171 | #define MANDELBROT_ZOOM_IN_PRE BUTTON_SELECT |
167 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) | 172 | #define MANDELBROT_ZOOM_IN (BUTTON_SELECT | BUTTON_REL) |
168 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) | 173 | #define MANDELBROT_ZOOM_OUT_PRE BUTTON_SELECT |
169 | #define MANDELBROT_MAXITER_INC (BUTTON_PLAY | BUTTON_RIGHT) | 174 | #define MANDELBROT_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT) |
170 | #define MANDELBROT_MAXITER_DEC (BUTTON_PLAY | BUTTON_LEFT) | 175 | #define MANDELBROT_MAXITER_INC (BUTTON_PLAY | BUTTON_RIGHT) |
171 | #define MANDELBROT_RESET BUTTON_MODE | 176 | #define MANDELBROT_MAXITER_DEC (BUTTON_PLAY | BUTTON_LEFT) |
177 | #define MANDELBROT_RESET BUTTON_MODE | ||
172 | 178 | ||
173 | #endif | 179 | #endif |
174 | 180 | ||
@@ -628,6 +634,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
628 | return PLUGIN_OK; | 634 | return PLUGIN_OK; |
629 | 635 | ||
630 | case MANDELBROT_ZOOM_OUT: | 636 | case MANDELBROT_ZOOM_OUT: |
637 | #ifdef MANDELBROT_ZOOM_OUT_PRE | ||
638 | if (lastbutton != MANDELBROT_ZOOM_OUT_PRE) | ||
639 | break; | ||
640 | #endif | ||
631 | x_min -= x_delta; | 641 | x_min -= x_delta; |
632 | x_max += x_delta; | 642 | x_max += x_delta; |
633 | y_min -= y_delta; | 643 | y_min -= y_delta; |
@@ -690,6 +700,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
690 | break; | 700 | break; |
691 | 701 | ||
692 | case MANDELBROT_MAXITER_DEC: | 702 | case MANDELBROT_MAXITER_DEC: |
703 | #ifdef MANDELBROT_MAXITER_DEC_PRE | ||
704 | if (lastbutton != MANDELBROT_MAXITER_DEC_PRE) | ||
705 | break; | ||
706 | #endif | ||
693 | if (max_iter >= 15) { | 707 | if (max_iter >= 15) { |
694 | max_iter -= max_iter / 3; | 708 | max_iter -= max_iter / 3; |
695 | redraw = REDRAW_FULL; | 709 | redraw = REDRAW_FULL; |
@@ -697,6 +711,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
697 | break; | 711 | break; |
698 | 712 | ||
699 | case MANDELBROT_MAXITER_INC: | 713 | case MANDELBROT_MAXITER_INC: |
714 | #ifdef MANDELBROT_MAXITER_INC_PRE | ||
715 | if (lastbutton != MANDELBROT_MAXITER_INC_PRE) | ||
716 | break; | ||
717 | #endif | ||
700 | max_iter += max_iter / 2; | 718 | max_iter += max_iter / 2; |
701 | redraw = REDRAW_FULL; | 719 | redraw = REDRAW_FULL; |
702 | break; | 720 | break; |
diff --git a/manual/plugins/mandelbrot.tex b/manual/plugins/mandelbrot.tex index 7abe4f6c95..1f4e6d0a7a 100644 --- a/manual/plugins/mandelbrot.tex +++ b/manual/plugins/mandelbrot.tex | |||
@@ -3,45 +3,57 @@ | |||
3 | This demonstration draws fractal images from the Mandelbrot set | 3 | This demonstration draws fractal images from the Mandelbrot set |
4 | \opt{archos,h1xx}{using the greyscale engine}. | 4 | \opt{archos,h1xx}{using the greyscale engine}. |
5 | \begin{table} | 5 | \begin{table} |
6 | \begin{btnmap}{}{} | 6 | \begin{btnmap}{}{} |
7 | Direction keys & Move about the image\\ | 7 | Direction keys |
8 | \opt{RECORDER_PAD,IRIVER_H10_PAD}{\ButtonPlay} | 8 | & Move about the image\\ |
9 | \opt{ONDIO_PAD}{\ButtonMenu\ / \ButtonMenu+\ButtonUp} | 9 | % |
10 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD}{\ButtonSelect} | 10 | \opt{RECORDER_PAD,IRIVER_H10_PAD}{\ButtonPlay} |
11 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd} | 11 | \opt{ONDIO_PAD}{\ButtonMenu\ / \ButtonMenu+\ButtonUp} |
12 | \opt{SANSA_E200_PAD}{\ButtonScrollDown} | 12 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD}{\ButtonSelect} |
13 | & Zoom in\\ | 13 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd} |
14 | \opt{RECORDER_PAD}{\ButtonOn} | 14 | \opt{SANSA_E200_PAD}{\ButtonScrollDown} |
15 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} | 15 | \opt{SANSA_C200_PAD}{\ButtonVolUp} |
16 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} | 16 | & Zoom in\\ |
17 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack} | 17 | % |
18 | \opt{IAUDIO_X5_PAD}{Long \ButtonSelect} | 18 | \opt{RECORDER_PAD}{\ButtonOn} |
19 | \opt{IRIVER_H10_PAD}{Long \ButtonPlay} | 19 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} |
20 | \opt{SANSA_E200_PAD}{\ButtonScrollUp} | 20 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} |
21 | & Zoom out\\ | 21 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack} |
22 | \opt{RECORDER_PAD}{\ButtonFOne} | 22 | \opt{IAUDIO_X5_PAD,GIGABEAT_PAD}{Long \ButtonSelect} |
23 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} | 23 | \opt{IRIVER_H10_PAD}{Long \ButtonPlay} |
24 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonLeft} | 24 | \opt{SANSA_E200_PAD}{\ButtonScrollUp} |
25 | \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD}{\ButtonSelect+\ButtonLeft} | 25 | \opt{SANSA_C200_PAD}{\ButtonVolDown} |
26 | \opt{IAUDIO_X5_PAD}{\ButtonPlay+\ButtonLeft} | 26 | & Zoom out\\ |
27 | \opt{IRIVER_H10_PAD}{\ButtonRew} | 27 | % |
28 | & Decrease iteration depth (less detail)\\ | 28 | \opt{RECORDER_PAD}{\ButtonFOne} |
29 | \opt{RECORDER_PAD}{\ButtonFTwo} | 29 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} |
30 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} | 30 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonLeft} |
31 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonRight} | 31 | \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonSelect+\ButtonLeft} |
32 | \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD}{\ButtonSelect+\ButtonRight} | 32 | \opt{IAUDIO_X5_PAD}{Long \ButtonPlay} |
33 | \opt{IAUDIO_X5_PAD}{\ButtonPlay+\ButtonRight} | 33 | \opt{IRIVER_H10_PAD}{\ButtonRew} |
34 | \opt{IRIVER_H10_PAD}{\ButtonFF} | 34 | \opt{GIGABEAT_PAD}{\ButtonVolDown} |
35 | & Increase iteration depth (more detail)\\ | 35 | & Decrease iteration depth (less detail)\\ |
36 | \opt{RECORDER_PAD}{\ButtonFThree} | 36 | % |
37 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} | 37 | \opt{RECORDER_PAD}{\ButtonFTwo} |
38 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD}{\ButtonRec} | 38 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} |
39 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} | 39 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonRight} |
40 | \opt{IRIVER_H10_PAD}{\ButtonPlay + \ButtonRew} | 40 | \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonSelect+\ButtonRight} |
41 | & Reset and return to the default image\\ | 41 | \opt{IAUDIO_X5_PAD}{\ButtonPlay} |
42 | \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} | 42 | \opt{IRIVER_H10_PAD}{\ButtonFF} |
43 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} | 43 | \opt{GIGABEAT_PAD}{\ButtonVolUp} |
44 | \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD}{\ButtonPower} | 44 | & Increase iteration depth (more detail)\\ |
45 | & Quit\\ | 45 | % |
46 | \end{btnmap} | 46 | \opt{RECORDER_PAD}{\ButtonFThree} |
47 | \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} | ||
48 | \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} | ||
49 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} | ||
50 | \opt{IRIVER_H10_PAD}{\ButtonPlay + \ButtonRew} | ||
51 | \opt{GIGABEAT_PAD}{\ButtonA} | ||
52 | & Reset and return to the default image\\ | ||
53 | % | ||
54 | \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} | ||
55 | \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} | ||
56 | \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,GIGABEAT_PAD}{\ButtonPower} | ||
57 | & Quit\\ | ||
58 | \end{btnmap} | ||
47 | \end{table} | 59 | \end{table} |