diff options
Diffstat (limited to 'apps/plugins/reversi')
-rw-r--r-- | apps/plugins/reversi/reversi-gui.c | 70 | ||||
-rw-r--r-- | apps/plugins/reversi/reversi-gui.h | 18 |
2 files changed, 63 insertions, 25 deletions
diff --git a/apps/plugins/reversi/reversi-gui.c b/apps/plugins/reversi/reversi-gui.c index c4c7506f2a..1d8b9c1fed 100644 --- a/apps/plugins/reversi/reversi-gui.c +++ b/apps/plugins/reversi/reversi-gui.c | |||
@@ -49,8 +49,12 @@ further options: | |||
49 | 49 | ||
50 | PLUGIN_HEADER | 50 | PLUGIN_HEADER |
51 | 51 | ||
52 | int font_width=4; | 52 | /* This is initialized at the start of the plugin and used to determine the |
53 | int font_height=8; | 53 | * Appropriate game board size/legend spacing if the font is larger than a cell |
54 | * height/width. | ||
55 | */ | ||
56 | static int font_width; | ||
57 | static int font_height; | ||
54 | 58 | ||
55 | /* Where the board begins */ | 59 | /* Where the board begins */ |
56 | #define XOFS 4 | 60 | #define XOFS 4 |
@@ -62,7 +66,7 @@ int font_height=8; | |||
62 | #define MARGIN_C_W 0 | 66 | #define MARGIN_C_W 0 |
63 | #define MARGIN_C_H 2 | 67 | #define MARGIN_C_H 2 |
64 | #else | 68 | #else |
65 | #define MARGIN_W (XOFS*2 + font_width*2) | 69 | #define MARGIN_W (XOFS*2 + 16) |
66 | #define MARGIN_H (YOFS*2+1) | 70 | #define MARGIN_H (YOFS*2+1) |
67 | #define MARGIN_C_W 1 | 71 | #define MARGIN_C_W 1 |
68 | #define MARGIN_C_H 0 | 72 | #define MARGIN_C_H 0 |
@@ -112,10 +116,13 @@ int font_height=8; | |||
112 | 116 | ||
113 | #if LCD_HEIGHT > LCD_WIDTH | 117 | #if LCD_HEIGHT > LCD_WIDTH |
114 | #define LEGEND_X(lc) (CELL_X(lc)) | 118 | #define LEGEND_X(lc) (CELL_X(lc)) |
115 | #define LEGEND_Y(lr) (CELL_Y(BOARD_SIZE+lr) + YOFS + 1) | 119 | #define LEGEND_Y(lr) ((CELL_HEIGHT > font_height) ? \ |
120 | CELL_Y(BOARD_SIZE+lr) + YOFS + 1 : \ | ||
121 | BOARD_HEIGHT + 2*YOFS + font_height*(lr-BOARD_SIZE)) | ||
116 | #else | 122 | #else |
117 | #define LEGEND_X(lc) (CELL_X(BOARD_SIZE+lc) + XOFS + 1) | 123 | #define LEGEND_X(lc) (CELL_X(BOARD_SIZE+lc) + XOFS + 1) |
118 | #define LEGEND_Y(lr) (CELL_Y(lr) > font_height*2 ? CELL_Y(lr) : font_height*(lr) + XOFS) | 124 | #define LEGEND_Y(lr) (CELL_HEIGHT > font_height ? \ |
125 | CELL_Y(lr) : font_height*(lr)+YOFS) | ||
119 | #endif | 126 | #endif |
120 | 127 | ||
121 | 128 | ||
@@ -152,23 +159,23 @@ static bool game_finished; | |||
152 | #if LCD_HEIGHT < LCD_WIDTH | 159 | #if LCD_HEIGHT < LCD_WIDTH |
153 | /* Define Menu button x, y, width, height */ | 160 | /* Define Menu button x, y, width, height */ |
154 | #define B_MENU_X LEGEND_X(0) | 161 | #define B_MENU_X LEGEND_X(0) |
155 | #define B_MENU_Y (LCD_HEIGHT/4) | 162 | #define B_MENU_Y (LCD_HEIGHT-LCD_HEIGHT/2) |
156 | #define B_MENU_W (LCD_WIDTH-LEGEND_X(0)) | 163 | #define B_MENU_W (LCD_WIDTH-LEGEND_X(0)) |
157 | #define B_MENU_H (LCD_HEIGHT/4) | 164 | #define B_MENU_H (LCD_HEIGHT/4) |
158 | /* Define Quit Button x, y, width, height */ | 165 | /* Define Quit Button x, y, width, height */ |
159 | #define B_QUIT_X LEGEND_X(0) | 166 | #define B_QUIT_X LEGEND_X(0) |
160 | #define B_QUIT_Y (LCD_HEIGHT/2) | 167 | #define B_QUIT_Y (LCD_HEIGHT-LCD_HEIGHT/4) |
161 | #define B_QUIT_W (LCD_WIDTH-LEGEND_X(0)) | 168 | #define B_QUIT_W (LCD_WIDTH-LEGEND_X(0)) |
162 | #define B_QUIT_H (LCD_HEIGHT/4) | 169 | #define B_QUIT_H (LCD_HEIGHT/4) |
163 | #else | 170 | #else |
164 | /* Define Menu button x, y, width, height */ | 171 | /* Define Menu button x, y, width, height */ |
165 | #define B_MENU_X (LCD_WIDTH/2) | 172 | #define B_MENU_X (LCD_WIDTH/2) |
166 | #define B_MENU_Y LEGEND_Y(0) | 173 | #define B_MENU_Y (CELL_HEIGHT*BOARD_SIZE+YOFS*2) |
167 | #define B_MENU_W (LCD_WIDTH/4) | 174 | #define B_MENU_W (LCD_WIDTH/4) |
168 | #define B_MENU_H (2*CELL_HEIGHT) | 175 | #define B_MENU_H (2*CELL_HEIGHT) |
169 | /* Define Quit Button x, y, width, height */ | 176 | /* Define Quit Button x, y, width, height */ |
170 | #define B_QUIT_X (LCD_WIDTH-LCD_WIDTH/4) | 177 | #define B_QUIT_X (LCD_WIDTH-LCD_WIDTH/4) |
171 | #define B_QUIT_Y LEGEND_Y(0) | 178 | #define B_QUIT_Y (CELL_HEIGHT*BOARD_SIZE+YOFS*2) |
172 | #define B_QUIT_W (LCD_WIDTH/4) | 179 | #define B_QUIT_W (LCD_WIDTH/4) |
173 | #define B_QUIT_H (2*CELL_HEIGHT) | 180 | #define B_QUIT_H (2*CELL_HEIGHT) |
174 | #endif | 181 | #endif |
@@ -273,6 +280,8 @@ static void reversi_gui_draw_cell(int x, int y, int color) { | |||
273 | /* Draws the complete screen */ | 280 | /* Draws the complete screen */ |
274 | static void reversi_gui_display_board(void) { | 281 | static void reversi_gui_display_board(void) { |
275 | int x, y, r, c, x_width, x_height; | 282 | int x, y, r, c, x_width, x_height; |
283 | /* This viewport is used to draw a scrolling score */ | ||
284 | struct viewport tempvp; | ||
276 | char buf[8]; | 285 | char buf[8]; |
277 | 286 | ||
278 | /* Clear the display buffer */ | 287 | /* Clear the display buffer */ |
@@ -307,20 +316,43 @@ static void reversi_gui_display_board(void) { | |||
307 | 316 | ||
308 | x = LEGEND_X(0); | 317 | x = LEGEND_X(0); |
309 | y = LEGEND_Y(0); | 318 | y = LEGEND_Y(0); |
310 | reversi_gui_draw_cell(x, y, BLACK); | 319 | reversi_gui_draw_cell(x, y+(LEGEND_Y(1)-LEGEND_Y(0))/2-CELL_WIDTH/2, BLACK); |
311 | rb->snprintf(buf, sizeof(buf), "%d", c); | 320 | rb->snprintf(buf, sizeof(buf), "%01d", c); |
312 | y += (CELL_HEIGHT-x_height) / 2; | 321 | |
313 | rb->lcd_putsxy(x + CELL_WIDTH + 2, y, buf); | 322 | tempvp.x=x+CELL_WIDTH+2; |
323 | tempvp.y=y; | ||
324 | tempvp.width=LCD_WIDTH-tempvp.x; | ||
325 | tempvp.height=LEGEND_Y(1); | ||
326 | |||
327 | tempvp.font=FONT_UI; | ||
328 | tempvp.drawmode=STYLE_DEFAULT; | ||
329 | #if LCD_DEPTH > 1 | ||
330 | tempvp.fg_pattern=0; | ||
331 | tempvp.bg_pattern=0xFFFF; | ||
332 | #ifdef HAVE_LCD_COLOR | ||
333 | tempvp.lss_pattern=0; | ||
334 | tempvp.lse_pattern=0; | ||
335 | tempvp.lst_pattern=0; | ||
336 | #endif | ||
337 | #endif | ||
338 | |||
339 | rb->lcd_set_viewport(&tempvp); | ||
340 | rb->lcd_puts_scroll(0, 0, buf); | ||
341 | rb->lcd_set_viewport(NULL); | ||
314 | 342 | ||
315 | y = LEGEND_Y(1); | 343 | y = LEGEND_Y(1); |
316 | reversi_gui_draw_cell(x, y, WHITE); | 344 | |
317 | rb->snprintf(buf, sizeof(buf), "%d", r); | 345 | reversi_gui_draw_cell(x, y+(LEGEND_Y(1)-LEGEND_Y(0))/2-CELL_WIDTH/2, WHITE); |
318 | y += (CELL_HEIGHT-x_height) / 2; | 346 | rb->snprintf(buf, sizeof(buf), "%01d", r); |
319 | rb->lcd_putsxy(x + CELL_WIDTH + 2, y, buf); | 347 | |
348 | tempvp.y=y; | ||
349 | rb->lcd_set_viewport(&tempvp); | ||
350 | rb->lcd_puts_scroll(0, 0, buf); | ||
351 | rb->lcd_set_viewport(NULL); | ||
320 | 352 | ||
321 | /* Draw the box around the current player */ | 353 | /* Draw the box around the current player */ |
322 | r = (cur_player == BLACK ? 0 : 1); | 354 | r = (cur_player == BLACK ? 0 : 1); |
323 | y = LEGEND_Y(r); | 355 | y = LEGEND_Y(r)+(LEGEND_Y(1)-LEGEND_Y(0))/2-CELL_WIDTH/2; |
324 | rb->lcd_drawrect(x, y, CELL_WIDTH+1, CELL_HEIGHT+1); | 356 | rb->lcd_drawrect(x, y, CELL_WIDTH+1, CELL_HEIGHT+1); |
325 | 357 | ||
326 | #if defined(HAVE_TOUCHSCREEN) | 358 | #if defined(HAVE_TOUCHSCREEN) |
@@ -576,7 +608,7 @@ enum plugin_status plugin_start(const void *parameter) { | |||
576 | char msg_buf[30]; | 608 | char msg_buf[30]; |
577 | 609 | ||
578 | /* Initialize Font Width and height */ | 610 | /* Initialize Font Width and height */ |
579 | rb->lcd_getstringsize("x", &font_width, &font_height); | 611 | rb->lcd_getstringsize("0", &font_width, &font_height); |
580 | 612 | ||
581 | #ifdef HAVE_TOUCHSCREEN | 613 | #ifdef HAVE_TOUCHSCREEN |
582 | rb->touchscreen_set_mode(TOUCHSCREEN_POINT); | 614 | rb->touchscreen_set_mode(TOUCHSCREEN_POINT); |
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h index a93fa344e4..1ad2d52ed3 100644 --- a/apps/plugins/reversi/reversi-gui.h +++ b/apps/plugins/reversi/reversi-gui.h | |||
@@ -64,8 +64,10 @@ | |||
64 | #define REVERSI_BUTTON_DOWN BUTTON_PLAY | 64 | #define REVERSI_BUTTON_DOWN BUTTON_PLAY |
65 | #define REVERSI_BUTTON_LEFT (BUTTON_LEFT | BUTTON_SCROLL_BACK) | 65 | #define REVERSI_BUTTON_LEFT (BUTTON_LEFT | BUTTON_SCROLL_BACK) |
66 | #define REVERSI_BUTTON_RIGHT (BUTTON_RIGHT | BUTTON_SCROLL_FWD) | 66 | #define REVERSI_BUTTON_RIGHT (BUTTON_RIGHT | BUTTON_SCROLL_FWD) |
67 | #define REVERSI_BUTTON_MAKE_MOVE (BUTTON_SELECT | BUTTON_REL) | 67 | #define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT |
68 | #define REVERSI_BUTTON_MENU (BUTTON_MENU | BUTTON_SELECT) | 68 | #define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS |
69 | #define REVERSI_BUTTON_MENU BUTTON_SELECT | ||
70 | #define REVERSI_BUTTON_MENU_LONGPRESS | ||
69 | 71 | ||
70 | #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) | 72 | #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) |
71 | #define REVERSI_BUTTON_QUIT BUTTON_POWER | 73 | #define REVERSI_BUTTON_QUIT BUTTON_POWER |
@@ -112,8 +114,10 @@ | |||
112 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN | 114 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN |
113 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT | 115 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT |
114 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT | 116 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT |
115 | #define REVERSI_BUTTON_MAKE_MOVE (BUTTON_SELECT|BUTTON_REL) | 117 | #define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT |
116 | #define REVERSI_BUTTON_MENU (BUTTON_SELECT|BUTTON_REPEAT) | 118 | #define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS |
119 | #define REVERSI_BUTTON_MENU BUTTON_SELECT | ||
120 | #define REVERSI_BUTTON_MENU_LONGPRESS | ||
117 | 121 | ||
118 | #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) | 122 | #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) |
119 | #define REVERSI_BUTTON_QUIT (BUTTON_HOME|BUTTON_REPEAT) | 123 | #define REVERSI_BUTTON_QUIT (BUTTON_HOME|BUTTON_REPEAT) |
@@ -121,8 +125,10 @@ | |||
121 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN | 125 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN |
122 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT | 126 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT |
123 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT | 127 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT |
124 | #define REVERSI_BUTTON_MAKE_MOVE (BUTTON_SELECT|BUTTON_REL) | 128 | #define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT |
125 | #define REVERSI_BUTTON_MENU (BUTTON_SELECT|BUTTON_REPEAT) | 129 | #define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS |
130 | #define REVERSI_BUTTON_MENU BUTTON_SELECT | ||
131 | #define REVERSI_BUTTON_MENU_LONGPRESS | ||
126 | 132 | ||
127 | #elif CONFIG_KEYPAD == MROBE500_PAD | 133 | #elif CONFIG_KEYPAD == MROBE500_PAD |
128 | #define REVERSI_BUTTON_QUIT BUTTON_POWER | 134 | #define REVERSI_BUTTON_QUIT BUTTON_POWER |