From c039d39a56579a206854fe0fd0f7b463d2b63932 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 13 Jul 2009 12:16:06 +0000 Subject: Make clix more usable on touchscreen targets git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21837 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/clix.c | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 16 deletions(-) (limited to 'apps') diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c index e04de3ca72..a6a3bdd626 100644 --- a/apps/plugins/clix.c +++ b/apps/plugins/clix.c @@ -139,31 +139,20 @@ PLUGIN_HEADER #elif CONFIG_KEYPAD == COWOND2_PAD #define CLIX_BUTTON_QUIT BUTTON_POWER -#elif (CONFIG_KEYPAD == ONDAVX747_PAD) || \ - (CONFIG_KEYPAD == MROBE500_PAD) +#elif (CONFIG_KEYPAD == ONDAVX747_PAD) +#define CLIX_BUTTON_QUIT BUTTON_POWER +#define CLIX_BUTTON_CLICK BUTTON_MENU + +#elif (CONFIG_KEYPAD == MROBE500_PAD) #define CLIX_BUTTON_QUIT BUTTON_POWER #else #error "no keymap" #endif -#ifdef HAVE_TOUCHSCREEN -#ifndef CLIX_BUTTON_LEFT -#define CLIX_BUTTON_LEFT BUTTON_MIDLEFT -#endif -#ifndef CLIX_BUTTON_RIGHT -#define CLIX_BUTTON_RIGHT BUTTON_MIDRIGHT -#endif #ifndef CLIX_BUTTON_CLICK #define CLIX_BUTTON_CLICK BUTTON_CENTER #endif -#ifndef CLIX_BUTTON_UP -#define CLIX_BUTTON_UP BUTTON_TOPMIDDLE -#endif -#ifndef CLIX_BUTTON_DOWN -#define CLIX_BUTTON_DOWN BUTTON_BOTTOMMIDDLE -#endif -#endif #define HIGHSCORE_FILE PLUGIN_GAMES_DIR "/clix.score" #define NUM_SCORES 5 @@ -717,8 +706,36 @@ static int clix_handle_game(struct clix_game_state_t* state) rb->button_get_w_tmo(end - *rb->current_tick); button = rb->button_status(); rb->button_clear_queue(); +#ifdef HAVE_TOUCHSCREEN + if(button & BUTTON_TOUCHSCREEN) + { + int x = rb->button_get_data() >> 16; + int y = rb->button_get_data() & 0xffff; + + x -= XOFS; + y -= YOFS; + if(x >= 0 && y >= 0) + { + x /= CELL_SIZE + 1; + y /= CELL_SIZE + 1; + + if(x < BOARD_WIDTH && y < BOARD_HEIGHT + && state->board[XYPOS(x, y)] != CC_BLACK) + { + if(state->x == x && state->y == y) + button = CLIX_BUTTON_CLICK; + else + { + state->x = x; + state->y = y; + } + } + } + } +#endif switch( button) { +#ifndef HAVE_TOUCHSCREEN #ifdef CLIX_BUTTON_SCROLL_BACK case CLIX_BUTTON_SCROLL_BACK: #endif @@ -761,6 +778,7 @@ static int clix_handle_game(struct clix_game_state_t* state) clix_move_cursor(state, true); break; +#endif case CLIX_BUTTON_CLICK: { if (state->selected_count > 1) { @@ -840,6 +858,9 @@ enum plugin_status plugin_start(const void* parameter) rb->lcd_set_foreground(LCD_WHITE); rb->lcd_set_background(LCD_BLACK); rb->lcd_setfont(FONT_SYSFIXED); +#ifdef HAVE_TOUCHSCREEN + rb->touchscreen_set_mode(TOUCHSCREEN_POINT); +#endif highscore_load(HIGHSCORE_FILE, highest, NUM_SCORES); -- cgit v1.2.3