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 (at) 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 34 extern "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 */ 44 void 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 146 void 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