summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/uisdl.c
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2010-02-16 17:34:48 +0000
committerFrank Gevaerts <frank@gevaerts.be>2010-02-16 17:34:48 +0000
commitf615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5 (patch)
tree94c1db09544b398ad15773c9923331a02e6cd92f /uisimulator/sdl/uisdl.c
parent13035a48afe35340828cccad2a2b0569434f155d (diff)
downloadrockbox-f615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5.tar.gz
rockbox-f615fb43d5321a37b8ba7f767c59d6bc0fe6e9b5.zip
Turn the simulator background into a clickable area. i.e. you click on the play button to press play. It also maps mouse scrollwheel events to rockbox scrollwheel events. This facilitates testing because you don't have to move your hand between the mouse and keyboard.
Author: Fred Bauer Flyspray: FS#11008 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24696 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/sdl/uisdl.c')
-rw-r--r--uisimulator/sdl/uisdl.c108
1 files changed, 93 insertions, 15 deletions
diff --git a/uisimulator/sdl/uisdl.c b/uisimulator/sdl/uisdl.c
index 3ab098e5ba..8cf4b42ba0 100644
--- a/uisimulator/sdl/uisdl.c
+++ b/uisimulator/sdl/uisdl.c
@@ -40,10 +40,12 @@
40#include "thread-sdl.h" 40#include "thread-sdl.h"
41#include "SDL_mutex.h" 41#include "SDL_mutex.h"
42#include "SDL_thread.h" 42#include "SDL_thread.h"
43#include "math.h"
44
43 45
44/* extern functions */ 46/* extern functions */
45extern void new_key(int key); 47extern void new_key(int key);
46 48extern int xy2button( int x, int y);
47void button_event(int key, bool pressed); 49void button_event(int key, bool pressed);
48 50
49SDL_Surface *gui_surface; 51SDL_Surface *gui_surface;
@@ -51,6 +53,8 @@ bool background = true; /* use backgrounds by default */
51#ifdef HAVE_REMOTE_LCD 53#ifdef HAVE_REMOTE_LCD
52static bool showremote = true; /* include remote by default */ 54static bool showremote = true; /* include remote by default */
53#endif 55#endif
56bool mapping = false;
57bool debug_buttons = false;
54 58
55bool lcd_display_redraw = true; /* Used for player simulator */ 59bool lcd_display_redraw = true; /* Used for player simulator */
56char having_new_lcd = true; /* Used for player simulator */ 60char having_new_lcd = true; /* Used for player simulator */
@@ -62,39 +66,102 @@ bool debug_audio = false;
62bool debug_wps = false; 66bool debug_wps = false;
63int wps_verbose_level = 3; 67int wps_verbose_level = 3;
64 68
69
70void irq_button_event(int key, bool pressed) {
71 sim_enter_irq_handler();
72 button_event( key, pressed );
73 sim_exit_irq_handler();
74}
75
76int sqr( int a ) {
77 return a*a;
78}
79
65void gui_message_loop(void) 80void gui_message_loop(void)
66{ 81{
67 SDL_Event event; 82 SDL_Event event;
68 bool done = false; 83 bool done = false;
84 static int x,y,xybutton = 0;
69 85
70 while(!done && SDL_WaitEvent(&event)) 86 while(!done && SDL_WaitEvent(&event))
71 { 87 {
72 switch(event.type) 88 switch(event.type)
73 { 89 {
74 case SDL_KEYDOWN: 90 case SDL_KEYDOWN:
75 sim_enter_irq_handler(); 91 irq_button_event(event.key.keysym.sym, true);
76 button_event(event.key.keysym.sym, true);
77 sim_exit_irq_handler();
78 break; 92 break;
79 case SDL_KEYUP: 93 case SDL_KEYUP:
80 sim_enter_irq_handler(); 94 irq_button_event(event.key.keysym.sym, false);
81 button_event(event.key.keysym.sym, false);
82 sim_exit_irq_handler();
83 break;
84#ifndef HAVE_TOUCHSCREEN
85 case SDL_MOUSEBUTTONDOWN: 95 case SDL_MOUSEBUTTONDOWN:
96 switch ( event.button.button ) {
97#ifdef HAVE_SCROLLWHEEL
98 case SDL_BUTTON_WHEELUP:
99 irq_button_event( SDLK_UP, true );
100 break;
101 case SDL_BUTTON_WHEELDOWN:
102 irq_button_event( SDLK_DOWN, true );
103 break;
104#endif
105 case SDL_BUTTON_LEFT:
106 case SDL_BUTTON_MIDDLE:
107 if ( mapping && background ) {
108 x = event.button.x;
109 y = event.button.y;
110 }
111 if ( background ) {
112 xybutton = xy2button( event.button.x, event.button.y );
113 if( xybutton )
114 irq_button_event( xybutton, true );
115 }
116 break;
117 default:
118 break;
119 }
120
86 if (debug_wps && event.button.button == 1) 121 if (debug_wps && event.button.button == 1)
87 { 122 {
88 printf("Mouse at: (%d, %d)\n", event.button.x, event.button.y); 123 if ( background )
124#ifdef HAVE_REMOTE
125 if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */
126 printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
127 else
128 printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 );
129#else
130 printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
131#endif
132 else
133 if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */
134 printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom );
135#ifdef HAVE_REMOTE
136 else
137 printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT );
138#endif
89 } 139 }
90 break; 140 break;
91#else
92 case SDL_MOUSEBUTTONUP: 141 case SDL_MOUSEBUTTONUP:
93 sim_enter_irq_handler(); 142 switch ( event.button.button ) {
94 button_event(BUTTON_TOUCHSCREEN, false); 143 /* The scrollwheel button up events are ignored as they are queued immediately */
95 sim_exit_irq_handler(); 144 case SDL_BUTTON_LEFT:
96 break; 145 case SDL_BUTTON_MIDDLE:
146 if ( mapping && background ) {
147 printf(" { SDLK_, %d, %d, %d, \"\" },\n", x, y, (int)sqrt( sqr(x-(int)event.button.x) + sqr(y-(int)event.button.y)) );
148 }
149 if ( background && xybutton ) {
150 irq_button_event( xybutton, false );
151 xybutton = 0;
152 }
153#ifdef HAVE_TOUCHSCREEN
154 else {
155 irq_button_event(BUTTON_TOUCHSCREEN, false);
156 }
97#endif 157#endif
158 break;
159 default:
160 break;
161 }
162 break;
163
164
98 case SDL_QUIT: 165 case SDL_QUIT:
99 done = true; 166 done = true;
100 break; 167 break;
@@ -244,6 +311,16 @@ int main(int argc, char *argv[])
244 printf("Root directory: %s\n", sim_root_dir); 311 printf("Root directory: %s\n", sim_root_dir);
245 } 312 }
246 } 313 }
314 else if (!strcmp("--mapping", argv[x]))
315 {
316 mapping = true;
317 printf("Printing click coords with drag radii.\n");
318 }
319 else if (!strcmp("--debugbuttons", argv[x]))
320 {
321 debug_buttons = true;
322 printf("Printing background button clicks.\n");
323 }
247 else 324 else
248 { 325 {
249 printf("rockboxui\n"); 326 printf("rockboxui\n");
@@ -258,6 +335,7 @@ int main(int argc, char *argv[])
258 printf(" --zoom [VAL]\t Window zoom (will disable backgrounds)\n"); 335 printf(" --zoom [VAL]\t Window zoom (will disable backgrounds)\n");
259 printf(" --alarm \t Simulate a wake-up on alarm\n"); 336 printf(" --alarm \t Simulate a wake-up on alarm\n");
260 printf(" --root [DIR]\t Set root directory\n"); 337 printf(" --root [DIR]\t Set root directory\n");
338 printf(" --mapping \t Output coordinates and radius for mapping backgrounds\n");
261 exit(0); 339 exit(0);
262 } 340 }
263 } 341 }