diff options
author | Jesse Hall <jessehall@google.com> | 2012-07-23 10:12:30 -0700 |
---|---|---|
committer | android code review <noreply-gerritcodereview@google.com> | 2012-07-23 10:12:30 -0700 |
commit | 2b3a42e7d0b441f71fc2e2b07269dd1f8151c977 (patch) | |
tree | ded6ee18c4e1f33df235e53615a6d65e2d64f4ef /distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc | |
parent | 3dcbebfd43e409c3bbff7fc79288e40666a947fd (diff) | |
parent | 9682c8870b8ff5e4ac2e4c70b759f791c6f38c1f (diff) | |
download | external_qemu-2b3a42e7d0b441f71fc2e2b07269dd1f8151c977.zip external_qemu-2b3a42e7d0b441f71fc2e2b07269dd1f8151c977.tar.gz external_qemu-2b3a42e7d0b441f71fc2e2b07269dd1f8151c977.tar.bz2 |
Merge changes I505c4aea,I2ae0529c
* changes:
Import SDL release-1.2.15
Handle SDL windows with BGRA color
Diffstat (limited to 'distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc')
-rw-r--r-- | distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc b/distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc new file mode 100644 index 0000000..4aaf814 --- /dev/null +++ b/distrib/sdl-1.2.15/src/video/qtopia/SDL_sysevents.cc @@ -0,0 +1,269 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include <qpe/qpeapplication.h> + +#include <stdio.h> +#include <string.h> +#include "SDL_error.h" +#include "SDL_events.h" +#include "SDL_QWin.h" +#include "SDL_lowvideo.h" +#include "SDL_timer.h" + +extern "C" { +#include "../../events/SDL_sysevents.h" +#include "../../events/SDL_events_c.h" +#include "SDL_sysevents_c.h" + + // static SDLKey keymap[128]; +/* This is special because we know it will be run in a loop in a separate + thread. Normally this function should loop as long as there are input + states changing, i.e. new events arriving. +*/ +void QT_PumpEvents(_THIS) +{ + if(!qApp) { + return; + } + // printf("processing events: %p\n", qApp); + //qApp->processOneEvent(); // wait for a event + qApp->processEvents(); // and process all outstanding ones +#if 0 + BView *view; + BRect bounds; + BPoint point; + uint32 buttons; + const uint32 button_masks[3] = { + B_PRIMARY_MOUSE_BUTTON, + B_TERTIARY_MOUSE_BUTTON, + B_SECONDARY_MOUSE_BUTTON, + }; + unsigned int i, j; + + /* Check out the mouse buttons and position (slight race condition) */ + if ( SDL_Win->Lock() ) { + /* Don't do anything if we have no view */ + view = SDL_Win->View(); + if ( ! view ) { + SDL_Win->Unlock(); + return; + } + bounds = view->Bounds(); + /* Get new input state, if still active */ + if ( SDL_Win->IsActive() ) { + key_flip = !key_flip; + get_key_info(&keyinfo[key_flip]); + view->GetMouse(&point, &buttons, true); + } else { + key_flip = key_flip; + point = last_point; + buttons = last_buttons; + } + SDL_Win->Unlock(); + } else { + return; + } + + /* If our view is active, we'll find key changes here */ + if ( SDL_memcmp(keyinfo[0].key_states, keyinfo[1].key_states, 16) != 0 ) { + for ( i=0; i<16; ++i ) { + Uint8 new_state, transition; + + new_state = keyinfo[key_flip].key_states[i]; + transition = keyinfo[!key_flip].key_states[i] ^ + keyinfo[ key_flip].key_states[i]; + for ( j=0; j<8; ++j ) { + if ( transition&0x80 ) + QueueKey(i*8+j, new_state&0x80); + transition <<= 1; + new_state <<= 1; + } + } + } + + /* We check keyboard, but not mouse if mouse isn't in window */ + if ( ! bounds.Contains(point) ) { + /* Mouse moved outside our view? */ + if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) { + SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS); + be_app->SetCursor(B_HAND_CURSOR); + } + return; + } + /* Has the mouse moved back into our view? */ + if ( ! (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) { + /* Reset the B_HAND_CURSOR to our own */ + SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); + SDL_SetCursor(NULL); + } + + /* Check for mouse motion */ + if ( point != last_point ) { + int x, y; + + SDL_Win->GetXYOffset(x, y); + x = (int)point.x - x; + y = (int)point.y - y; + SDL_PrivateMouseMotion(0, 0, x, y); + } + last_point = point; + + /* Add any mouse button events */ + for ( i=0; i<SDL_TABLESIZE(button_masks); ++i ) { + if ( (buttons ^ last_buttons) & button_masks[i] ) { + if ( buttons & button_masks[i] ) { + SDL_PrivateMouseButton(SDL_PRESSED, 1+i, 0, 0); + } else { + SDL_PrivateMouseButton(SDL_RELEASED, 1+i, 0, 0); + } + } + } + last_buttons = buttons; +#endif +} + +void QT_InitOSKeymap(_THIS) +{ +#if 0 + unsigned int i; + + /* Initialize all the key states as "up" */ + key_flip = 0; + SDL_memset(keyinfo[key_flip].key_states, 0, 16); + + /* Initialize the key translation table */ + for ( i=0; i<SDL_TABLESIZE(keymap); ++i ) + keymap[i] = SDLK_UNKNOWN; + + // keymap[0x01] = SDLK_ESCAPE; + // keymap[B_F1_KEY] = SDLK_F1; + // keymap[B_F2_KEY] = SDLK_F2; + // keymap[B_F3_KEY] = SDLK_F3; + // keymap[B_F4_KEY] = SDLK_F4; + // keymap[B_F5_KEY] = SDLK_F5; + // keymap[B_F6_KEY] = SDLK_F6; + // keymap[B_F7_KEY] = SDLK_F7; + // keymap[B_F8_KEY] = SDLK_F8; + // keymap[B_F9_KEY] = SDLK_F9; + // keymap[B_F10_KEY] = SDLK_F10; + // keymap[B_F11_KEY] = SDLK_F11; + // keymap[B_F12_KEY] = SDLK_F12; + // keymap[B_PRINT_KEY] = SDLK_PRINT; + //keymap[B_SCROLL_KEY] = SDLK_SCROLLOCK; + // keymap[B_PAUSE_KEY] = SDLK_PAUSE; + keymap[0x11] = SDLK_BACKQUOTE; + keymap[0x12] = SDLK_1; + keymap[0x13] = SDLK_2; + keymap[0x14] = SDLK_3; + keymap[0x15] = SDLK_4; + keymap[0x16] = SDLK_5; + keymap[0x17] = SDLK_6; + keymap[0x18] = SDLK_7; + keymap[0x19] = SDLK_8; + keymap[0x1a] = SDLK_9; + keymap[0x1b] = SDLK_0; + keymap[0x1c] = SDLK_MINUS; + keymap[0x1d] = SDLK_EQUALS; + keymap[0x1e] = SDLK_BACKSPACE; + keymap[0x1f] = SDLK_INSERT; + keymap[0x20] = SDLK_HOME; + keymap[0x21] = SDLK_PAGEUP; + //keymap[0x22] = SDLK_NUMLOCK; + keymap[0x23] = SDLK_KP_DIVIDE; + keymap[0x24] = SDLK_KP_MULTIPLY; + keymap[0x25] = SDLK_KP_MINUS; + keymap[0x26] = SDLK_TAB; + keymap[0x27] = SDLK_q; + keymap[0x28] = SDLK_w; + keymap[0x29] = SDLK_e; + keymap[0x2a] = SDLK_r; + keymap[0x2b] = SDLK_t; + keymap[0x2c] = SDLK_y; + keymap[0x2d] = SDLK_u; + keymap[0x2e] = SDLK_i; + keymap[0x2f] = SDLK_o; + keymap[0x30] = SDLK_p; + keymap[0x31] = SDLK_LEFTBRACKET; + keymap[0x32] = SDLK_RIGHTBRACKET; + keymap[0x33] = SDLK_BACKSLASH; + keymap[0x34] = SDLK_DELETE; + keymap[0x35] = SDLK_END; + keymap[0x36] = SDLK_PAGEDOWN; + keymap[0x37] = SDLK_KP7; + keymap[0x38] = SDLK_KP8; + keymap[0x39] = SDLK_KP9; + keymap[0x3a] = SDLK_KP_PLUS; + //keymap[0x3b] = SDLK_CAPSLOCK; + keymap[0x3c] = SDLK_a; + keymap[0x3d] = SDLK_s; + keymap[0x3e] = SDLK_d; + keymap[0x3f] = SDLK_f; + keymap[0x40] = SDLK_g; + keymap[0x41] = SDLK_h; + keymap[0x42] = SDLK_j; + keymap[0x43] = SDLK_k; + keymap[0x44] = SDLK_l; + keymap[0x45] = SDLK_SEMICOLON; + keymap[0x46] = SDLK_QUOTE; + keymap[0x47] = SDLK_RETURN; + keymap[0x48] = SDLK_KP4; + keymap[0x49] = SDLK_KP5; + keymap[0x4a] = SDLK_KP6; + keymap[0x4b] = SDLK_LSHIFT; + keymap[0x4c] = SDLK_z; + keymap[0x4d] = SDLK_x; + keymap[0x4e] = SDLK_c; + keymap[0x4f] = SDLK_v; + keymap[0x50] = SDLK_b; + keymap[0x51] = SDLK_n; + keymap[0x52] = SDLK_m; + keymap[0x53] = SDLK_COMMA; + keymap[0x54] = SDLK_PERIOD; + keymap[0x55] = SDLK_SLASH; + keymap[0x56] = SDLK_RSHIFT; + keymap[0x57] = SDLK_UP; + keymap[0x58] = SDLK_KP1; + keymap[0x59] = SDLK_KP2; + keymap[0x5a] = SDLK_KP3; + keymap[0x5b] = SDLK_KP_ENTER; + //keymap[0x5c] = SDLK_LCTRL; + //keymap[0x5d] = SDLK_LALT; + keymap[0x5e] = SDLK_SPACE; + //keymap[0x5f] = SDLK_RALT; + //keymap[0x60] = SDLK_RCTRL; + keymap[0x61] = SDLK_LEFT; + keymap[0x62] = SDLK_DOWN; + keymap[0x63] = SDLK_RIGHT; + keymap[0x64] = SDLK_KP0; + keymap[0x65] = SDLK_KP_PERIOD; + //keymap[0x66] = SDLK_LMETA; + //keymap[0x67] = SDLK_RMETA; + //keymap[0x68] = SDLK_MENU; + keymap[0x69] = SDLK_EURO; + keymap[0x6a] = SDLK_KP_EQUALS; + keymap[0x6b] = SDLK_POWER; +#endif +} + +}; /* Extern C */ |