diff options
author | Dave Hooper <dave@beermex.com> | 2009-07-18 12:33:13 +0000 |
---|---|---|
committer | Dave Hooper <dave@beermex.com> | 2009-07-18 12:33:13 +0000 |
commit | e5472c91cc81c2fc5f1db5265676fb1af048d41d (patch) | |
tree | 077a7744ba57a378d499f6000b1190ee4cc0366e | |
parent | 17b8805b49e1f3c096b885982b6e81a6742f6662 (diff) | |
download | rockbox-e5472c91cc81c2fc5f1db5265676fb1af048d41d.tar.gz rockbox-e5472c91cc81c2fc5f1db5265676fb1af048d41d.zip |
Make clix playable on ipod by fixing keymap (so up doesn't quit), button repeat logic (so holding down select doesn't repeatedly fire select events), and not clearing button queue so repeat/release events get detected
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21951 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/plugins/clix.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c index bfe33b90de..e0cf88bf08 100644 --- a/apps/plugins/clix.c +++ b/apps/plugins/clix.c | |||
@@ -65,12 +65,16 @@ PLUGIN_HEADER | |||
65 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | 65 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ |
66 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | 66 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
67 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | 67 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
68 | #define CLIX_BUTTON_QUIT BUTTON_MENU | 68 | #define CLIX_BUTTON_QUIT (BUTTON_SELECT | BUTTON_MENU) |
69 | #define CLIX_BUTTON_UP BUTTON_SCROLL_BACK | 69 | #define CLIX_BUTTON_UP BUTTON_MENU |
70 | #define CLIX_BUTTON_DOWN BUTTON_SCROLL_FWD | 70 | #define CLIX_BUTTON_DOWN BUTTON_PLAY |
71 | #define CLIX_BUTTON_CLICK BUTTON_SELECT | 71 | #define CLIX_BUTTON_SCROLL_FWD BUTTON_SCROLL_FWD |
72 | #define CLIX_BUTTON_RIGHT BUTTON_RIGHT | 72 | #define CLIX_BUTTON_SCROLL_BACK BUTTON_SCROLL_BACK |
73 | #define CLIX_BUTTON_LEFT BUTTON_LEFT | 73 | #define CLIX_BUTTON_CLICK (BUTTON_SELECT | BUTTON_REL) |
74 | #define CLIX_BUTTON_CLICK_PRE BUTTON_SELECT | ||
75 | #define CLIX_BUTTON_CLICK_PRE2 (BUTTON_SELECT | BUTTON_REPEAT) | ||
76 | #define CLIX_BUTTON_RIGHT BUTTON_RIGHT | ||
77 | #define CLIX_BUTTON_LEFT BUTTON_LEFT | ||
74 | 78 | ||
75 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) | 79 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) |
76 | #define CLIX_BUTTON_QUIT BUTTON_POWER | 80 | #define CLIX_BUTTON_QUIT BUTTON_POWER |
@@ -694,6 +698,8 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
694 | int start; | 698 | int start; |
695 | int end; | 699 | int end; |
696 | int oldx, oldy; | 700 | int oldx, oldy; |
701 | |||
702 | int lastbutton = BUTTON_NONE; | ||
697 | 703 | ||
698 | while(true) | 704 | while(true) |
699 | { | 705 | { |
@@ -710,9 +716,7 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
710 | oldx = state->x; | 716 | oldx = state->x; |
711 | oldy = state->y; | 717 | oldy = state->y; |
712 | 718 | ||
713 | rb->button_get_w_tmo(end - *rb->current_tick); | 719 | button = rb->button_get_w_tmo(end - *rb->current_tick); |
714 | button = rb->button_status(); | ||
715 | rb->button_clear_queue(); | ||
716 | #ifdef HAVE_TOUCHSCREEN | 720 | #ifdef HAVE_TOUCHSCREEN |
717 | if(button & BUTTON_TOUCHSCREEN) | 721 | if(button & BUTTON_TOUCHSCREEN) |
718 | { | 722 | { |
@@ -745,6 +749,7 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
745 | #ifndef HAVE_TOUCHSCREEN | 749 | #ifndef HAVE_TOUCHSCREEN |
746 | #ifdef CLIX_BUTTON_SCROLL_BACK | 750 | #ifdef CLIX_BUTTON_SCROLL_BACK |
747 | case CLIX_BUTTON_SCROLL_BACK: | 751 | case CLIX_BUTTON_SCROLL_BACK: |
752 | case CLIX_BUTTON_SCROLL_BACK|BUTTON_REPEAT: | ||
748 | #endif | 753 | #endif |
749 | case CLIX_BUTTON_UP: | 754 | case CLIX_BUTTON_UP: |
750 | if( state->y == 0 || | 755 | if( state->y == 0 || |
@@ -767,6 +772,7 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
767 | break; | 772 | break; |
768 | #ifdef CLIX_BUTTON_SCROLL_FWD | 773 | #ifdef CLIX_BUTTON_SCROLL_FWD |
769 | case CLIX_BUTTON_SCROLL_FWD: | 774 | case CLIX_BUTTON_SCROLL_FWD: |
775 | case CLIX_BUTTON_SCROLL_FWD|BUTTON_REPEAT: | ||
770 | #endif | 776 | #endif |
771 | case CLIX_BUTTON_DOWN: | 777 | case CLIX_BUTTON_DOWN: |
772 | if( state->y == (BOARD_HEIGHT - 1)) | 778 | if( state->y == (BOARD_HEIGHT - 1)) |
@@ -788,6 +794,15 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
788 | #endif | 794 | #endif |
789 | case CLIX_BUTTON_CLICK: | 795 | case CLIX_BUTTON_CLICK: |
790 | { | 796 | { |
797 | #ifdef CLIX_BUTTON_CLICK_PRE | ||
798 | #ifdef CLIX_BUTTON_CLICK_PRE2 | ||
799 | if (lastbutton != CLIX_BUTTON_CLICK_PRE | ||
800 | && lastbutton != CLIX_BUTTON_CLICK_PRE2) | ||
801 | #else | ||
802 | if (lastbutton != CLIX_BUTTON_CLICK_PRE) | ||
803 | #endif | ||
804 | break; | ||
805 | #endif | ||
791 | if (state->selected_count > 1) { | 806 | if (state->selected_count > 1) { |
792 | switch( clix_clear_selected( state)) | 807 | switch( clix_clear_selected( state)) |
793 | { | 808 | { |
@@ -842,6 +857,9 @@ static int clix_handle_game(struct clix_game_state_t* state) | |||
842 | 857 | ||
843 | break; | 858 | break; |
844 | } | 859 | } |
860 | |||
861 | if(button != BUTTON_NONE) | ||
862 | lastbutton = button; | ||
845 | 863 | ||
846 | if( (oldx != state->x || oldy != state->y) && | 864 | if( (oldx != state->x || oldy != state->y) && |
847 | state->board_selected[ XYPOS( oldx, oldy)] != | 865 | state->board_selected[ XYPOS( oldx, oldy)] != |