summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2007-09-18 19:05:35 +0000
committerNils Wallménius <nils@rockbox.org>2007-09-18 19:05:35 +0000
commita896f3d8b8a6fa7ab422b23701c0ea7c245cb307 (patch)
treeadef537d65e0f648e0eefa41117518ea8c332e89 /apps
parent98a39fb0579e983d559c3b64144903481d7b7a9a (diff)
downloadrockbox-a896f3d8b8a6fa7ab422b23701c0ea7c245cb307.tar.gz
rockbox-a896f3d8b8a6fa7ab422b23701c0ea7c245cb307.zip
Simplify initing of the screens[] struct by using an initializer, also some reordering of the struct, and the required plugin api bump
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14743 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugin.h4
-rw-r--r--apps/screen_access.c294
-rw-r--r--apps/screen_access.h17
3 files changed, 150 insertions, 165 deletions
diff --git a/apps/plugin.h b/apps/plugin.h
index 3971a1357c..ab6213850d 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -112,12 +112,12 @@
112#define PLUGIN_MAGIC 0x526F634B /* RocK */ 112#define PLUGIN_MAGIC 0x526F634B /* RocK */
113 113
114/* increase this every time the api struct changes */ 114/* increase this every time the api struct changes */
115#define PLUGIN_API_VERSION 74 115#define PLUGIN_API_VERSION 75
116 116
117/* update this to latest version if a change to the api struct breaks 117/* update this to latest version if a change to the api struct breaks
118 backwards compatibility (and please take the opportunity to sort in any 118 backwards compatibility (and please take the opportunity to sort in any
119 new function which are "waiting" at the end of the function table) */ 119 new function which are "waiting" at the end of the function table) */
120#define PLUGIN_MIN_API_VERSION 74 120#define PLUGIN_MIN_API_VERSION 75
121 121
122/* plugin return codes */ 122/* plugin return codes */
123enum plugin_status { 123enum plugin_status {
diff --git a/apps/screen_access.c b/apps/screen_access.c
index b5731cf33a..251bd7e848 100644
--- a/apps/screen_access.c
+++ b/apps/screen_access.c
@@ -30,181 +30,168 @@
30#include "screen_access.h" 30#include "screen_access.h"
31#include "textarea.h" 31#include "textarea.h"
32 32
33struct screen screens[NB_SCREENS]; 33struct screen screens[NB_SCREENS] =
34
35void screen_init(struct screen * screen, enum screen_type screen_type)
36{ 34{
37 switch(screen_type)
38 { 35 {
39#ifdef HAVE_REMOTE_LCD 36 .screen_type=SCREEN_MAIN,
40 case SCREEN_REMOTE: 37 .width=LCD_WIDTH,
41 screen->is_color=false;/* No color remotes yet */ 38 .height=LCD_HEIGHT,
42 screen->pixel_format=LCD_REMOTE_PIXELFORMAT; 39 .depth=LCD_DEPTH,
43 screen->depth=LCD_REMOTE_DEPTH;
44 screen->has_disk_led=false;
45
46 screen->width=LCD_REMOTE_WIDTH;
47 screen->height=LCD_REMOTE_HEIGHT;
48 screen->setmargins=&lcd_remote_setmargins;
49 screen->getymargin=&lcd_remote_getymargin;
50 screen->getxmargin=&lcd_remote_getxmargin;
51 screen->getstringsize=&lcd_remote_getstringsize;
52#if 1 /* all remote LCDs are bitmapped so far */
53 screen->setfont=&lcd_remote_setfont;
54 screen->setfont(FONT_UI);
55 screen->mono_bitmap=&lcd_remote_mono_bitmap;
56 screen->mono_bitmap_part=&lcd_remote_mono_bitmap_part;
57 screen->bitmap=(screen_bitmap_func*)&lcd_remote_bitmap;
58 screen->bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part;
59 screen->set_drawmode=&lcd_remote_set_drawmode;
60#if LCD_REMOTE_DEPTH <= 2
61 /* No transparency yet for grayscale and mono lcd */
62 screen->transparent_bitmap=(screen_bitmap_func*)&lcd_remote_bitmap;
63 screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part;
64 /* No colour remotes yet */
65#endif
66#if LCD_REMOTE_DEPTH > 1
67#if defined(HAVE_LCD_COLOR) 40#if defined(HAVE_LCD_COLOR)
68 screen->color_to_native=&lcd_remote_color_to_native; 41 .is_color=true,
69#endif
70 screen->get_background=&lcd_remote_get_background;
71 screen->get_foreground=&lcd_remote_get_foreground;
72 screen->set_background=&lcd_remote_set_background;
73 screen->set_foreground=&lcd_remote_set_foreground;
74#endif /* LCD_REMOTE_DEPTH > 1 */
75 screen->update_rect=&lcd_remote_update_rect;
76 screen->fillrect=&lcd_remote_fillrect;
77 screen->drawrect=&lcd_remote_drawrect;
78 screen->drawpixel=&lcd_remote_drawpixel;
79 screen->drawline=&lcd_remote_drawline;
80 screen->vline=&lcd_remote_vline;
81 screen->hline=&lcd_remote_hline;
82 screen->scroll_step=&lcd_remote_scroll_step;
83 screen->invertscroll=&lcd_remote_invertscroll;
84 screen->puts_style_offset=&lcd_remote_puts_style_offset;
85 screen->puts_scroll_style=&lcd_remote_puts_scroll_style;
86 screen->puts_scroll_style_offset=&lcd_remote_puts_scroll_style_offset;
87#endif /* 1 */
88
89#if 0 /* no charcell remote LCDs so far */
90 screen->double_height=&lcd_remote_double_height;
91 screen->putc=&lcd_remote_putc;
92 screen->get_locked_pattern=&lcd_remote_get_locked_pattern;
93 screen->define_pattern=&lcd_remote_define_pattern;
94 screen->icon=&lcd_remote_icon;
95#endif /* 0 */
96
97 screen->init=&lcd_remote_init;
98 screen->putsxy=&lcd_remote_putsxy;
99 screen->puts=&lcd_remote_puts;
100 screen->puts_offset=&lcd_remote_puts_offset;
101 screen->puts_scroll=&lcd_remote_puts_scroll;
102 screen->puts_scroll_offset=&lcd_remote_puts_scroll_offset;
103 screen->scroll_speed=&lcd_remote_scroll_speed;
104 screen->scroll_delay=&lcd_remote_scroll_delay;
105 screen->stop_scroll=&lcd_remote_stop_scroll;
106 screen->clear_display=&lcd_remote_clear_display;
107 screen->update=&lcd_remote_update;
108 screen->backlight_on=&remote_backlight_on;
109 screen->backlight_off=&remote_backlight_off;
110 screen->is_backlight_on=&is_remote_backlight_on;
111 screen->backlight_set_timeout=&remote_backlight_set_timeout;
112 break;
113#endif /* HAVE_REMOTE_LCD */
114
115 case SCREEN_MAIN:
116 default:
117#if defined(HAVE_LCD_COLOR)
118 screen->is_color=true;
119#else 42#else
120 screen->is_color=false; 43 .is_color=false,
121#endif 44#endif
122#ifdef HAVE_LCD_BITMAP 45#ifdef HAVE_LCD_BITMAP
123 screen->pixel_format=LCD_PIXELFORMAT; 46 .pixel_format=LCD_PIXELFORMAT,
124#endif 47#endif
125 screen->depth=LCD_DEPTH;
126#if (CONFIG_LED == LED_VIRTUAL) 48#if (CONFIG_LED == LED_VIRTUAL)
127 screen->has_disk_led=false; 49 .has_disk_led=false,
128#elif defined(HAVE_REMOTE_LCD) 50#elif defined(HAVE_REMOTE_LCD)
129 screen->has_disk_led=true; 51 .has_disk_led=true,
130#endif 52#endif
131 screen->width=LCD_WIDTH; 53 .setmargins=&lcd_setmargins,
132 screen->height=LCD_HEIGHT; 54 .getymargin=&lcd_getymargin,
133 screen->setmargins=&lcd_setmargins; 55 .getxmargin=&lcd_getxmargin,
134 screen->getymargin=&lcd_getymargin; 56 .getstringsize=&lcd_getstringsize,
135 screen->getxmargin=&lcd_getxmargin;
136 screen->getstringsize=&lcd_getstringsize;
137#ifdef HAVE_LCD_BITMAP 57#ifdef HAVE_LCD_BITMAP
138 screen->setfont=&lcd_setfont; 58 .setfont=&lcd_setfont,
139 screen->setfont(FONT_UI); 59 .mono_bitmap=&lcd_mono_bitmap,
140 screen->mono_bitmap=&lcd_mono_bitmap; 60 .mono_bitmap_part=&lcd_mono_bitmap_part,
141 screen->mono_bitmap_part=&lcd_mono_bitmap_part; 61 .set_drawmode=&lcd_set_drawmode,
142 screen->set_drawmode=&lcd_set_drawmode; 62 .bitmap=(screen_bitmap_func*)&lcd_bitmap,
143 screen->bitmap=(screen_bitmap_func*)&lcd_bitmap; 63 .bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part,
144 screen->bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part;
145#if LCD_DEPTH <= 2 64#if LCD_DEPTH <= 2
146 /* No transparency yet for grayscale and mono lcd */ 65 /* No transparency yet for grayscale and mono lcd */
147 screen->transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap; 66 .transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap,
148 screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part; 67 .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_part,
149#else 68#else
150 screen->transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap_transparent; 69 .transparent_bitmap=(screen_bitmap_func*)&lcd_bitmap_transparent,
151 screen->transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_transparent_part; 70 .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_bitmap_transparent_part,
152#endif 71#endif
153#if LCD_DEPTH > 1 72#if LCD_DEPTH > 1
154#if defined(HAVE_LCD_COLOR) && defined(LCD_REMOTE_DEPTH) && LCD_REMOTE_DEPTH > 1 73#if defined(HAVE_LCD_COLOR) && defined(LCD_REMOTE_DEPTH) && LCD_REMOTE_DEPTH > 1
155 screen->color_to_native=&lcd_color_to_native; 74 .color_to_native=&lcd_color_to_native,
156#endif 75#endif
157 screen->get_background=&lcd_get_background; 76 .get_background=&lcd_get_background,
158 screen->get_foreground=&lcd_get_foreground; 77 .get_foreground=&lcd_get_foreground,
159 screen->set_background=&lcd_set_background; 78 .set_background=&lcd_set_background,
160 screen->set_foreground=&lcd_set_foreground; 79 .set_foreground=&lcd_set_foreground,
161#endif /* LCD_DEPTH > 1 */ 80#endif /* LCD_DEPTH > 1 */
162 screen->update_rect=&lcd_update_rect; 81 .update_rect=&lcd_update_rect,
163 screen->fillrect=&lcd_fillrect; 82 .fillrect=&lcd_fillrect,
164 screen->drawrect=&lcd_drawrect; 83 .drawrect=&lcd_drawrect,
165 screen->drawpixel=&lcd_drawpixel; 84 .drawpixel=&lcd_drawpixel,
166 screen->drawline=&lcd_drawline; 85 .drawline=&lcd_drawline,
167 screen->vline=&lcd_vline; 86 .vline=&lcd_vline,
168 screen->hline=&lcd_hline; 87 .hline=&lcd_hline,
169 screen->scroll_step=&lcd_scroll_step; 88 .scroll_step=&lcd_scroll_step,
170 screen->invertscroll=&lcd_invertscroll; 89 .invertscroll=&lcd_invertscroll,
171 screen->puts_style_offset=&lcd_puts_style_offset; 90 .puts_style_offset=&lcd_puts_style_offset,
172 screen->puts_scroll_style=&lcd_puts_scroll_style; 91 .puts_scroll_style=&lcd_puts_scroll_style,
173 screen->puts_scroll_style_offset=&lcd_puts_scroll_style_offset; 92 .puts_scroll_style_offset=&lcd_puts_scroll_style_offset,
174#endif /* HAVE_LCD_BITMAP */ 93#endif /* HAVE_LCD_BITMAP */
175 94
176#ifdef HAVE_LCD_CHARCELLS 95#ifdef HAVE_LCD_CHARCELLS
177 screen->double_height=&lcd_double_height; 96 .double_height=&lcd_double_height,
178 screen->putc=&lcd_putc; 97 .putc=&lcd_putc,
179 screen->get_locked_pattern=&lcd_get_locked_pattern; 98 .get_locked_pattern=&lcd_get_locked_pattern,
180 screen->define_pattern=&lcd_define_pattern; 99 .define_pattern=&lcd_define_pattern,
181 screen->unlock_pattern=&lcd_unlock_pattern; 100 .unlock_pattern=&lcd_unlock_pattern,
182 screen->icon=&lcd_icon; 101 .icon=&lcd_icon,
183#endif /* HAVE_LCD_CHARCELLS */ 102#endif /* HAVE_LCD_CHARCELLS */
184 103
185 screen->init=&lcd_init; 104 .putsxy=&lcd_putsxy,
186 screen->putsxy=&lcd_putsxy; 105 .puts=&lcd_puts,
187 screen->puts=&lcd_puts; 106 .puts_offset=&lcd_puts_offset,
188 screen->puts_offset=&lcd_puts_offset; 107 .puts_scroll=&lcd_puts_scroll,
189 screen->puts_scroll=&lcd_puts_scroll; 108 .puts_scroll_offset=&lcd_puts_scroll_offset,
190 screen->puts_scroll_offset=&lcd_puts_scroll_offset; 109 .scroll_speed=&lcd_scroll_speed,
191 screen->scroll_speed=&lcd_scroll_speed; 110 .scroll_delay=&lcd_scroll_delay,
192 screen->scroll_delay=&lcd_scroll_delay; 111 .stop_scroll=&lcd_stop_scroll,
193 screen->stop_scroll=&lcd_stop_scroll; 112 .clear_display=&lcd_clear_display,
194 screen->clear_display=&lcd_clear_display; 113 .update=&lcd_update,
195 screen->update=&lcd_update; 114 .backlight_on=&backlight_on,
196 screen->backlight_on=&backlight_on; 115 .backlight_off=&backlight_off,
197 screen->backlight_off=&backlight_off; 116 .is_backlight_on=&is_backlight_on,
198 screen->is_backlight_on=&is_backlight_on; 117 .backlight_set_timeout=&backlight_set_timeout
199 screen->backlight_set_timeout=&backlight_set_timeout;
200 break;
201 }
202 screen->screen_type=screen_type;
203#ifdef HAS_BUTTONBAR 118#ifdef HAS_BUTTONBAR
204 screen->has_buttonbar=false; 119 ,.has_buttonbar=false
205#endif 120#endif
206 gui_textarea_update_nblines(screen); 121 }
207} 122#ifdef HAVE_REMOTE_LCD
123 ,{
124 .screen_type=SCREEN_REMOTE,
125 .width=LCD_REMOTE_WIDTH,
126 .height=LCD_REMOTE_HEIGHT,
127 .depth=LCD_REMOTE_DEPTH,
128 .is_color=false,/* No color remotes yet */
129 .pixel_format=LCD_REMOTE_PIXELFORMAT,
130 .has_disk_led=false,
131 .setmargins=&lcd_remote_setmargins,
132 .getymargin=&lcd_remote_getymargin,
133 .getxmargin=&lcd_remote_getxmargin,
134 .getstringsize=&lcd_remote_getstringsize,
135#if 1 /* all remote LCDs are bitmapped so far */
136 .setfont=&lcd_remote_setfont,
137 .mono_bitmap=&lcd_remote_mono_bitmap,
138 .mono_bitmap_part=&lcd_remote_mono_bitmap_part,
139 .bitmap=(screen_bitmap_func*)&lcd_remote_bitmap,
140 .bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part,
141 .set_drawmode=&lcd_remote_set_drawmode,
142#if LCD_REMOTE_DEPTH <= 2
143 /* No transparency yet for grayscale and mono lcd */
144 .transparent_bitmap=(screen_bitmap_func*)&lcd_remote_bitmap,
145 .transparent_bitmap_part=(screen_bitmap_part_func*)&lcd_remote_bitmap_part,
146 /* No colour remotes yet */
147#endif
148#if LCD_REMOTE_DEPTH > 1
149#if defined(HAVE_LCD_COLOR)
150 .color_to_native=&lcd_remote_color_to_native,
151#endif
152 .get_background=&lcd_remote_get_background,
153 .get_foreground=&lcd_remote_get_foreground,
154 .set_background=&lcd_remote_set_background,
155 .set_foreground=&lcd_remote_set_foreground,
156#endif /* LCD_REMOTE_DEPTH > 1 */
157 .update_rect=&lcd_remote_update_rect,
158 .fillrect=&lcd_remote_fillrect,
159 .drawrect=&lcd_remote_drawrect,
160 .drawpixel=&lcd_remote_drawpixel,
161 .drawline=&lcd_remote_drawline,
162 .vline=&lcd_remote_vline,
163 .hline=&lcd_remote_hline,
164 .scroll_step=&lcd_remote_scroll_step,
165 .invertscroll=&lcd_remote_invertscroll,
166 .puts_style_offset=&lcd_remote_puts_style_offset,
167 .puts_scroll_style=&lcd_remote_puts_scroll_style,
168 .puts_scroll_style_offset=&lcd_remote_puts_scroll_style_offset,
169#endif /* 1 */
170
171#if 0 /* no charcell remote LCDs so far */
172 .double_height=&lcd_remote_double_height,
173 .putc=&lcd_remote_putc,
174 .get_locked_pattern=&lcd_remote_get_locked_pattern,
175 .define_pattern=&lcd_remote_define_pattern,
176 .icon=&lcd_remote_icon,
177#endif /* 0 */
178 .putsxy=&lcd_remote_putsxy,
179 .puts=&lcd_remote_puts,
180 .puts_offset=&lcd_remote_puts_offset,
181 .puts_scroll=&lcd_remote_puts_scroll,
182 .puts_scroll_offset=&lcd_remote_puts_scroll_offset,
183 .scroll_speed=&lcd_remote_scroll_speed,
184 .scroll_delay=&lcd_remote_scroll_delay,
185 .stop_scroll=&lcd_remote_stop_scroll,
186 .clear_display=&lcd_remote_clear_display,
187 .update=&lcd_remote_update,
188 .backlight_on=&remote_backlight_on,
189 .backlight_off=&remote_backlight_off,
190 .is_backlight_on=&is_remote_backlight_on,
191 .backlight_set_timeout=&remote_backlight_set_timeout
192 }
193#endif /* HAVE_REMOTE_LCD */
194};
208 195
209#ifdef HAVE_LCD_BITMAP 196#ifdef HAVE_LCD_BITMAP
210void screen_clear_area(struct screen * display, int xstart, int ystart, 197void screen_clear_area(struct screen * display, int xstart, int ystart,
@@ -220,5 +207,10 @@ void screen_access_init(void)
220{ 207{
221 int i; 208 int i;
222 FOR_NB_SCREENS(i) 209 FOR_NB_SCREENS(i)
223 screen_init(&screens[i], i); 210 {
211#ifdef HAVE_LCD_BITMAP
212 ((struct screen*)&screens[i])->setfont(FONT_UI);
213#endif
214 gui_textarea_update_nblines(&screens[i]);
215 }
224} 216}
diff --git a/apps/screen_access.h b/apps/screen_access.h
index 822aab4a88..05a53d5d0f 100644
--- a/apps/screen_access.h
+++ b/apps/screen_access.h
@@ -51,18 +51,20 @@ typedef void screen_bitmap_part_func(const void *src, int src_x, int src_y,
51typedef void screen_bitmap_func(const void *src, int x, int y, int width, 51typedef void screen_bitmap_func(const void *src, int x, int y, int width,
52 int height); 52 int height);
53 53
54/* if this struct is changed the plugin api may break so bump the api
55 versions in plugin.h */
54struct screen 56struct screen
55{ 57{
56 int width, height;
57 int nb_lines;
58 enum screen_type screen_type; 58 enum screen_type screen_type;
59 int width, height;
59 int depth; 60 int depth;
60 bool is_color; 61 int nb_lines;
61#ifdef HAVE_LCD_BITMAP 62#ifdef HAVE_LCD_BITMAP
62 int pixel_format; 63 int pixel_format;
63#endif 64#endif
64 int char_width; 65 int char_width;
65 int char_height; 66 int char_height;
67 bool is_color;
66#if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) 68#if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD)
67 bool has_disk_led; 69 bool has_disk_led;
68#endif 70#endif
@@ -72,7 +74,6 @@ struct screen
72 void (*setmargins)(int x, int y); 74 void (*setmargins)(int x, int y);
73 int (*getxmargin)(void); 75 int (*getxmargin)(void);
74 int (*getymargin)(void); 76 int (*getymargin)(void);
75
76 int (*getstringsize)(const unsigned char *str, int *w, int *h); 77 int (*getstringsize)(const unsigned char *str, int *w, int *h);
77#if defined(HAVE_LCD_BITMAP) || defined(HAVE_REMOTE_LCD) /* always bitmap */ 78#if defined(HAVE_LCD_BITMAP) || defined(HAVE_REMOTE_LCD) /* always bitmap */
78 void (*setfont)(int newfont); 79 void (*setfont)(int newfont);
@@ -124,7 +125,6 @@ struct screen
124 void (*define_pattern)(unsigned long ucs, const char *pattern); 125 void (*define_pattern)(unsigned long ucs, const char *pattern);
125 void (*unlock_pattern)(unsigned long ucs); 126 void (*unlock_pattern)(unsigned long ucs);
126#endif 127#endif
127 void (*init)(void);
128 void (*putsxy)(int x, int y, const unsigned char *str); 128 void (*putsxy)(int x, int y, const unsigned char *str);
129 void (*puts)(int x, int y, const unsigned char *str); 129 void (*puts)(int x, int y, const unsigned char *str);
130 void (*puts_offset)(int x, int y, const unsigned char *str, int offset); 130 void (*puts_offset)(int x, int y, const unsigned char *str, int offset);
@@ -142,13 +142,6 @@ struct screen
142 void (*backlight_set_timeout)(int index); 142 void (*backlight_set_timeout)(int index);
143}; 143};
144 144
145/*
146 * Initializes the given screen structure for a given display
147 * - screen : the screen structure
148 * - display_type : currently 2 possibles values : MAIN or REMOTE
149 */
150extern void screen_init(struct screen * screen, enum screen_type screen_type);
151
152#ifdef HAS_BUTTONBAR 145#ifdef HAS_BUTTONBAR
153/* 146/*
154 * Sets if the given screen has a buttonbar or not 147 * Sets if the given screen has a buttonbar or not