summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-07-13 12:16:06 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-07-13 12:16:06 +0000
commitc039d39a56579a206854fe0fd0f7b463d2b63932 (patch)
treea9b18e16e6835035cbca96aee70996fc3ac67699
parentb5b9cb031d0b1b3c802fde2f33e27ecf7d166778 (diff)
downloadrockbox-c039d39a56579a206854fe0fd0f7b463d2b63932.zip
rockbox-c039d39a56579a206854fe0fd0f7b463d2b63932.tar.gz
rockbox-c039d39a56579a206854fe0fd0f7b463d2b63932.tar.bz2
rockbox-c039d39a56579a206854fe0fd0f7b463d2b63932.tar.xz
Make clix more usable on touchscreen targets
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21837 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/clix.c53
1 files changed, 37 insertions, 16 deletions
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index e04de3c..a6a3bdd 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);