diff options
author | Teruaki Kawashima <teru@rockbox.org> | 2010-02-22 13:45:24 +0000 |
---|---|---|
committer | Teruaki Kawashima <teru@rockbox.org> | 2010-02-22 13:45:24 +0000 |
commit | c1bb06c3af4c5277e4a08c0084da86a69bc9d127 (patch) | |
tree | 28b3e52221e064c4f08a2229a2f7df2e4fe17263 /apps/plugins/lib/highscore.c | |
parent | adf5bbdc46529785ae988944f005863823b26722 (diff) | |
download | rockbox-c1bb06c3af4c5277e4a08c0084da86a69bc9d127.tar.gz rockbox-c1bb06c3af4c5277e4a08c0084da86a69bc9d127.zip |
plugin: implement highscore_show for player and use it in rockblox.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24861 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/lib/highscore.c')
-rw-r--r-- | apps/plugins/lib/highscore.c | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/apps/plugins/lib/highscore.c b/apps/plugins/lib/highscore.c index 20e472f9dc..9ada06e8fe 100644 --- a/apps/plugins/lib/highscore.c +++ b/apps/plugins/lib/highscore.c | |||
@@ -120,12 +120,15 @@ bool highscore_would_update(int score, struct highscore *scores, | |||
120 | } | 120 | } |
121 | 121 | ||
122 | #ifdef HAVE_LCD_BITMAP | 122 | #ifdef HAVE_LCD_BITMAP |
123 | void highscore_show(int position, struct highscore *scores, int num_scores, bool show_level) | 123 | #define MARGIN 5 |
124 | void highscore_show(int position, struct highscore *scores, int num_scores, | ||
125 | bool show_level) | ||
124 | { | 126 | { |
125 | int i, w, h; | 127 | int i, w, h; |
126 | char str[30]; | 128 | char str[30]; |
127 | #define MARGIN 5 | ||
128 | #ifdef HAVE_LCD_COLOR | 129 | #ifdef HAVE_LCD_COLOR |
130 | unsigned bgcolor = rb->lcd_get_background(); | ||
131 | unsigned fgcolor = rb->lcd_get_foreground(); | ||
129 | rb->lcd_set_background(LCD_BLACK); | 132 | rb->lcd_set_background(LCD_BLACK); |
130 | rb->lcd_set_foreground(LCD_WHITE); | 133 | rb->lcd_set_foreground(LCD_WHITE); |
131 | #endif | 134 | #endif |
@@ -141,7 +144,6 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool | |||
141 | rb->lcd_putsxy(LCD_WIDTH/2-w/2, MARGIN, "High Scores"); | 144 | rb->lcd_putsxy(LCD_WIDTH/2-w/2, MARGIN, "High Scores"); |
142 | rb->lcd_putsxy(LCD_WIDTH/4-w/4,2*h, "Score"); | 145 | rb->lcd_putsxy(LCD_WIDTH/4-w/4,2*h, "Score"); |
143 | 146 | ||
144 | /* Decide whether to display the level column or not */ | ||
145 | if(show_level) { | 147 | if(show_level) { |
146 | rb->lcd_putsxy(LCD_WIDTH*3/4-w/4,2*h, "Level"); | 148 | rb->lcd_putsxy(LCD_WIDTH*3/4-w/4,2*h, "Level"); |
147 | } | 149 | } |
@@ -158,7 +160,6 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool | |||
158 | rb->snprintf (str, sizeof (str), "%d", scores[i].score); | 160 | rb->snprintf (str, sizeof (str), "%d", scores[i].score); |
159 | rb->lcd_putsxy (LCD_WIDTH/4-w/4,3*h + h*i, str); | 161 | rb->lcd_putsxy (LCD_WIDTH/4-w/4,3*h + h*i, str); |
160 | 162 | ||
161 | /* Decide whether to display the level column or not */ | ||
162 | if(show_level) { | 163 | if(show_level) { |
163 | rb->snprintf (str, sizeof (str), "%d", scores[i].level); | 164 | rb->snprintf (str, sizeof (str), "%d", scores[i].level); |
164 | rb->lcd_putsxy (LCD_WIDTH*3/4-w/4,3*h + h*i, str); | 165 | rb->lcd_putsxy (LCD_WIDTH*3/4-w/4,3*h + h*i, str); |
@@ -168,7 +169,7 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool | |||
168 | #ifdef HAVE_LCD_COLOR | 169 | #ifdef HAVE_LCD_COLOR |
169 | rb->lcd_set_foreground(LCD_WHITE); | 170 | rb->lcd_set_foreground(LCD_WHITE); |
170 | #else | 171 | #else |
171 | rb->lcd_hline(MARGIN, LCD_WIDTH-MARGIN, 3*h + h*(i+1)); | 172 | rb->lcd_hline(MARGIN, LCD_WIDTH-MARGIN*2, 3*h + h*(i+1) - 1); |
172 | #endif | 173 | #endif |
173 | } | 174 | } |
174 | } | 175 | } |
@@ -177,5 +178,42 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool | |||
177 | rb->button_clear_queue(); | 178 | rb->button_clear_queue(); |
178 | rb->button_get(true); | 179 | rb->button_get(true); |
179 | rb->lcd_setfont(FONT_SYSFIXED); | 180 | rb->lcd_setfont(FONT_SYSFIXED); |
181 | #ifdef HAVE_LCD_COLOR | ||
182 | rb->lcd_set_background(bgcolor); | ||
183 | rb->lcd_set_foreground(fgcolor); | ||
184 | #endif | ||
185 | } | ||
186 | #else | ||
187 | struct scoreinfo { | ||
188 | struct highscore *scores; | ||
189 | int position; | ||
190 | bool show_level; | ||
191 | }; | ||
192 | static const char* get_score(int selected, void * data, | ||
193 | char * buffer, size_t buffer_len) | ||
194 | { | ||
195 | struct scoreinfo *scoreinfo = (struct scoreinfo *) data; | ||
196 | int len; | ||
197 | len = rb->snprintf(buffer, buffer_len, "%c%d) %4d", | ||
198 | (scoreinfo->position == selected?'*':' '), | ||
199 | selected+1, scoreinfo->scores[selected].score); | ||
200 | |||
201 | if (scoreinfo->show_level) | ||
202 | rb->snprintf(buffer + len, buffer_len - len, " %d", | ||
203 | scoreinfo->scores[selected].level); | ||
204 | return buffer; | ||
205 | } | ||
206 | |||
207 | void highscore_show(int position, struct highscore *scores, int num_scores, | ||
208 | bool show_level) | ||
209 | { | ||
210 | struct simplelist_info info; | ||
211 | struct scoreinfo scoreinfo = {scores, position, show_level}; | ||
212 | rb->simplelist_info_init(&info, "High Scores", num_scores, &scoreinfo); | ||
213 | if (position >= 0) | ||
214 | info.selection = position; | ||
215 | info.hide_selection = true; | ||
216 | info.get_name = get_score; | ||
217 | rb->simplelist_show_list(&info); | ||
180 | } | 218 | } |
181 | #endif /* HAVE_LCD_BITMAP */ | 219 | #endif /* HAVE_LCD_BITMAP */ |