1/*
2    SDL - Simple DirectMedia Layer
3    Copyright (C) 1997-2012 Sam Lantinga
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    This library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with this library; if not, write to the Free Software
17    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
19    Sam Lantinga
20    slouken@libsdl.org
21*/
22#include "SDL_config.h"
23
24#include <qpe/qpeapplication.h>
25
26#include <stdio.h>
27#include <string.h>
28#include "SDL_error.h"
29#include "SDL_events.h"
30#include "SDL_QWin.h"
31#include "SDL_lowvideo.h"
32#include "SDL_timer.h"
33
34extern "C" {
35#include "../../events/SDL_sysevents.h"
36#include "../../events/SDL_events_c.h"
37#include "SDL_sysevents_c.h"
38
39  //  static SDLKey keymap[128];
40/* This is special because we know it will be run in a loop in a separate
41   thread.  Normally this function should loop as long as there are input
42   states changing, i.e. new events arriving.
43*/
44void QT_PumpEvents(_THIS)
45{
46  if(!qApp) {
47    return;
48  }
49  //  printf("processing events: %p\n", qApp);
50  //qApp->processOneEvent(); // wait for a event
51  qApp->processEvents(); // and process all outstanding ones
52#if 0
53  BView *view;
54	BRect bounds;
55	BPoint point;
56	uint32 buttons;
57	const uint32 button_masks[3] = {
58		B_PRIMARY_MOUSE_BUTTON,
59		B_TERTIARY_MOUSE_BUTTON,
60		B_SECONDARY_MOUSE_BUTTON,
61	};
62	unsigned int    i, j;
63
64	/* Check out the mouse buttons and position (slight race condition) */
65	if ( SDL_Win->Lock() ) {
66		/* Don't do anything if we have no view */
67		view = SDL_Win->View();
68		if ( ! view ) {
69			SDL_Win->Unlock();
70			return;
71		}
72		bounds = view->Bounds();
73		/* Get new input state, if still active */
74		if ( SDL_Win->IsActive() ) {
75			key_flip = !key_flip;
76			get_key_info(&keyinfo[key_flip]);
77			view->GetMouse(&point, &buttons, true);
78		} else {
79			key_flip = key_flip;
80			point = last_point;
81			buttons = last_buttons;
82		}
83		SDL_Win->Unlock();
84	} else {
85		return;
86	}
87
88	/* If our view is active, we'll find key changes here */
89	if ( SDL_memcmp(keyinfo[0].key_states, keyinfo[1].key_states, 16) != 0 ) {
90		for ( i=0; i<16; ++i ) {
91			Uint8 new_state, transition;
92
93			new_state = keyinfo[key_flip].key_states[i];
94			transition = keyinfo[!key_flip].key_states[i] ^
95					keyinfo[ key_flip].key_states[i];
96			for ( j=0; j<8; ++j ) {
97				if ( transition&0x80 )
98					QueueKey(i*8+j, new_state&0x80);
99				transition <<= 1;
100				new_state <<= 1;
101			}
102		}
103	}
104
105	/* We check keyboard, but not mouse if mouse isn't in window */
106	if ( ! bounds.Contains(point) ) {
107		/* Mouse moved outside our view? */
108		if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) {
109			SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
110			be_app->SetCursor(B_HAND_CURSOR);
111		}
112		return;
113	}
114	/* Has the mouse moved back into our view? */
115	if ( ! (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
116		/* Reset the B_HAND_CURSOR to our own */
117		SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
118		SDL_SetCursor(NULL);
119	}
120
121	/* Check for mouse motion */
122	if ( point != last_point ) {
123		int x, y;
124
125		SDL_Win->GetXYOffset(x, y);
126		x = (int)point.x - x;
127		y = (int)point.y - y;
128		SDL_PrivateMouseMotion(0, 0, x, y);
129	}
130	last_point = point;
131
132	/* Add any mouse button events */
133	for ( i=0; i<SDL_TABLESIZE(button_masks); ++i ) {
134		if ( (buttons ^ last_buttons) & button_masks[i] ) {
135			if ( buttons & button_masks[i] ) {
136				SDL_PrivateMouseButton(SDL_PRESSED, 1+i, 0, 0);
137			} else {
138				SDL_PrivateMouseButton(SDL_RELEASED, 1+i, 0, 0);
139			}
140		}
141	}
142	last_buttons = buttons;
143#endif
144}
145
146void QT_InitOSKeymap(_THIS)
147{
148#if 0
149  unsigned int i;
150
151  /* Initialize all the key states as "up" */
152  key_flip = 0;
153  SDL_memset(keyinfo[key_flip].key_states, 0, 16);
154
155  /* Initialize the key translation table */
156  for ( i=0; i<SDL_TABLESIZE(keymap); ++i )
157    keymap[i] = SDLK_UNKNOWN;
158
159  //  keymap[0x01]		= SDLK_ESCAPE;
160  //  keymap[B_F1_KEY]	= SDLK_F1;
161  //  keymap[B_F2_KEY]	= SDLK_F2;
162  //  keymap[B_F3_KEY]	= SDLK_F3;
163  //  keymap[B_F4_KEY]	= SDLK_F4;
164  //  keymap[B_F5_KEY]	= SDLK_F5;
165  //  keymap[B_F6_KEY]	= SDLK_F6;
166  //  keymap[B_F7_KEY]	= SDLK_F7;
167  //  keymap[B_F8_KEY]	= SDLK_F8;
168  //  keymap[B_F9_KEY]	= SDLK_F9;
169  //  keymap[B_F10_KEY]	= SDLK_F10;
170  //  keymap[B_F11_KEY]	= SDLK_F11;
171  //  keymap[B_F12_KEY]	= SDLK_F12;
172  //  keymap[B_PRINT_KEY]	= SDLK_PRINT;
173  //keymap[B_SCROLL_KEY]	= SDLK_SCROLLOCK;
174  //  keymap[B_PAUSE_KEY]	= SDLK_PAUSE;
175  keymap[0x11]		= SDLK_BACKQUOTE;
176  keymap[0x12]		= SDLK_1;
177  keymap[0x13]		= SDLK_2;
178  keymap[0x14]		= SDLK_3;
179  keymap[0x15]		= SDLK_4;
180  keymap[0x16]		= SDLK_5;
181  keymap[0x17]		= SDLK_6;
182  keymap[0x18]		= SDLK_7;
183  keymap[0x19]		= SDLK_8;
184  keymap[0x1a]		= SDLK_9;
185  keymap[0x1b]		= SDLK_0;
186  keymap[0x1c]		= SDLK_MINUS;
187  keymap[0x1d]		= SDLK_EQUALS;
188  keymap[0x1e]		= SDLK_BACKSPACE;
189  keymap[0x1f]		= SDLK_INSERT;
190  keymap[0x20]		= SDLK_HOME;
191  keymap[0x21]		= SDLK_PAGEUP;
192  //keymap[0x22]		= SDLK_NUMLOCK;
193  keymap[0x23]		= SDLK_KP_DIVIDE;
194  keymap[0x24]		= SDLK_KP_MULTIPLY;
195  keymap[0x25]		= SDLK_KP_MINUS;
196  keymap[0x26]		= SDLK_TAB;
197  keymap[0x27]		= SDLK_q;
198  keymap[0x28]		= SDLK_w;
199  keymap[0x29]		= SDLK_e;
200  keymap[0x2a]		= SDLK_r;
201  keymap[0x2b]		= SDLK_t;
202  keymap[0x2c]		= SDLK_y;
203  keymap[0x2d]		= SDLK_u;
204  keymap[0x2e]		= SDLK_i;
205  keymap[0x2f]		= SDLK_o;
206  keymap[0x30]		= SDLK_p;
207  keymap[0x31]		= SDLK_LEFTBRACKET;
208  keymap[0x32]		= SDLK_RIGHTBRACKET;
209  keymap[0x33]		= SDLK_BACKSLASH;
210  keymap[0x34]		= SDLK_DELETE;
211  keymap[0x35]		= SDLK_END;
212  keymap[0x36]		= SDLK_PAGEDOWN;
213  keymap[0x37]		= SDLK_KP7;
214  keymap[0x38]		= SDLK_KP8;
215  keymap[0x39]		= SDLK_KP9;
216  keymap[0x3a]		= SDLK_KP_PLUS;
217  //keymap[0x3b]		= SDLK_CAPSLOCK;
218  keymap[0x3c]		= SDLK_a;
219  keymap[0x3d]		= SDLK_s;
220  keymap[0x3e]		= SDLK_d;
221  keymap[0x3f]		= SDLK_f;
222  keymap[0x40]		= SDLK_g;
223  keymap[0x41]		= SDLK_h;
224  keymap[0x42]		= SDLK_j;
225  keymap[0x43]		= SDLK_k;
226  keymap[0x44]		= SDLK_l;
227  keymap[0x45]		= SDLK_SEMICOLON;
228  keymap[0x46]		= SDLK_QUOTE;
229  keymap[0x47]		= SDLK_RETURN;
230  keymap[0x48]		= SDLK_KP4;
231  keymap[0x49]		= SDLK_KP5;
232  keymap[0x4a]		= SDLK_KP6;
233  keymap[0x4b]		= SDLK_LSHIFT;
234  keymap[0x4c]		= SDLK_z;
235  keymap[0x4d]		= SDLK_x;
236  keymap[0x4e]		= SDLK_c;
237  keymap[0x4f]		= SDLK_v;
238  keymap[0x50]		= SDLK_b;
239  keymap[0x51]		= SDLK_n;
240  keymap[0x52]		= SDLK_m;
241  keymap[0x53]		= SDLK_COMMA;
242  keymap[0x54]		= SDLK_PERIOD;
243  keymap[0x55]		= SDLK_SLASH;
244  keymap[0x56]		= SDLK_RSHIFT;
245  keymap[0x57]		= SDLK_UP;
246  keymap[0x58]		= SDLK_KP1;
247  keymap[0x59]		= SDLK_KP2;
248  keymap[0x5a]		= SDLK_KP3;
249  keymap[0x5b]		= SDLK_KP_ENTER;
250  //keymap[0x5c]		= SDLK_LCTRL;
251  //keymap[0x5d]		= SDLK_LALT;
252  keymap[0x5e]		= SDLK_SPACE;
253  //keymap[0x5f]		= SDLK_RALT;
254  //keymap[0x60]		= SDLK_RCTRL;
255  keymap[0x61]		= SDLK_LEFT;
256  keymap[0x62]		= SDLK_DOWN;
257  keymap[0x63]		= SDLK_RIGHT;
258  keymap[0x64]		= SDLK_KP0;
259  keymap[0x65]		= SDLK_KP_PERIOD;
260  //keymap[0x66]		= SDLK_LMETA;
261  //keymap[0x67]		= SDLK_RMETA;
262  //keymap[0x68]		= SDLK_MENU;
263  keymap[0x69]		= SDLK_EURO;
264  keymap[0x6a]		= SDLK_KP_EQUALS;
265  keymap[0x6b]		= SDLK_POWER;
266#endif
267}
268
269}; /* Extern C */
270