146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997-2004 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 2001 Hsieh-Fu Tsai 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 2002 Greg Haerr <greg@censoft.com> 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Library General Public 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2 of the License, or (at your option) any later version. 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Library General Public License for more details. 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Library General Public 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Hsieh-Fu Tsai 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner clare@setabox.com 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h" 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_keysym.h" 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../../events/SDL_events_c.h" 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_nxevents_c.h" 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_nximage_c.h" 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner// The translation tables from a nanox keysym to a SDL keysym 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic SDLKey NX_NONASCII_keymap [MWKEY_LAST + 1] ; 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid NX_InitOSKeymap (_THIS) 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int i ; 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("enter NX_InitOSKeymap\n") ; 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // Map the nanox scancodes to SDL keysyms 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for (i = 0; i < SDL_arraysize (NX_NONASCII_keymap); ++ i) 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [i] = SDLK_UNKNOWN ; 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_LEFT & 0xFF] = SDLK_LEFT ; 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_RIGHT & 0xFF] = SDLK_RIGHT ; 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_UP & 0xFF] = SDLK_UP ; 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_DOWN & 0xFF] = SDLK_DOWN ; 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_INSERT & 0xFF] = SDLK_INSERT ; 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_DELETE & 0xFF] = SDLK_DELETE ; 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_HOME & 0xFF] = SDLK_HOME ; 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_END & 0xFF] = SDLK_END ; 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_PAGEUP & 0xFF] = SDLK_PAGEUP ; 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_PAGEDOWN & 0xFF] = SDLK_PAGEDOWN ; 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP0 & 0xFF] = SDLK_KP0 ; 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP1 & 0xFF] = SDLK_KP1 ; 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP2 & 0xFF] = SDLK_KP2 ; 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP3 & 0xFF] = SDLK_KP3 ; 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP4 & 0xFF] = SDLK_KP4 ; 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP5 & 0xFF] = SDLK_KP5 ; 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP6 & 0xFF] = SDLK_KP6 ; 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP7 & 0xFF] = SDLK_KP7 ; 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP8 & 0xFF] = SDLK_KP8 ; 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP9 & 0xFF] = SDLK_KP9 ; 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_PERIOD & 0xFF] = SDLK_KP_PERIOD ; 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_DIVIDE & 0xFF] = SDLK_KP_DIVIDE ; 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_MULTIPLY & 0xFF] = SDLK_KP_MULTIPLY ; 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_MINUS & 0xFF] = SDLK_KP_MINUS ; 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_PLUS & 0xFF] = SDLK_KP_PLUS ; 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_ENTER & 0xFF] = SDLK_KP_ENTER ; 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_KP_EQUALS & 0xFF] = SDLK_KP_EQUALS ; 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F1 & 0xFF] = SDLK_F1 ; 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F2 & 0xFF] = SDLK_F2 ; 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F3 & 0xFF] = SDLK_F3 ; 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F4 & 0xFF] = SDLK_F4 ; 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F5 & 0xFF] = SDLK_F5 ; 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F6 & 0xFF] = SDLK_F6 ; 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F7 & 0xFF] = SDLK_F7 ; 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F8 & 0xFF] = SDLK_F8 ; 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F9 & 0xFF] = SDLK_F9 ; 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F10 & 0xFF] = SDLK_F10 ; 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F11 & 0xFF] = SDLK_F11 ; 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_F12 & 0xFF] = SDLK_F12 ; 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_NUMLOCK & 0xFF] = SDLK_NUMLOCK ; 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_CAPSLOCK & 0xFF] = SDLK_CAPSLOCK ; 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_SCROLLOCK & 0xFF] = SDLK_SCROLLOCK ; 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_LSHIFT & 0xFF] = SDLK_LSHIFT ; 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_RSHIFT & 0xFF] = SDLK_RSHIFT ; 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_LCTRL & 0xFF] = SDLK_LCTRL ; 9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_RCTRL & 0xFF] = SDLK_RCTRL ; 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_LALT & 0xFF] = SDLK_LALT ; 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_RALT & 0xFF] = SDLK_RALT ; 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_LMETA & 0xFF] = SDLK_LMETA ; 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_RMETA & 0xFF] = SDLK_RMETA ; 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_ALTGR & 0xFF] = SDLK_MODE ; 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_PRINT & 0xFF] = SDLK_PRINT ; 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_SYSREQ & 0xFF] = SDLK_SYSREQ ; 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_PAUSE & 0xFF] = SDLK_PAUSE ; 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_BREAK & 0xFF] = SDLK_BREAK ; 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_NONASCII_keymap [MWKEY_MENU & 0xFF] = SDLK_MENU ; 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("leave NX_InitOSKeymap\n") ; 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11246be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_keysym * NX_TranslateKey (GR_EVENT_KEYSTROKE * keystroke, SDL_keysym * keysym) 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GR_KEY ch = keystroke -> ch ; 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("enter NX_TranslateKey\n") ; 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> scancode = keystroke -> scancode ; 11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> sym = SDLK_UNKNOWN ; 12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (ch & MWKEY_NONASCII_MASK) { 12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> sym = NX_NONASCII_keymap [ch & 0xFF] ; 12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else { 12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> sym = ch & 0x7F ; 12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod = KMOD_NONE ; 12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if 1 // Retrieve more mode information 13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GR_KEYMOD mod = keystroke -> modifiers ; 13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_LSHIFT) 13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_LSHIFT ; 13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_RSHIFT) 13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_RSHIFT ; 13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_LCTRL) 13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_LCTRL ; 13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_RCTRL) 14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_RCTRL ; 14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_LALT) 14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_LALT ; 14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_RALT) 14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_RALT ; 14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_LMETA) 14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_LMETA ; 14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_RMETA) 14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_RMETA ; 14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_NUM) 15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_NUM ; 15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_CAPS) 15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_CAPS ; 15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (mod & MWKMOD_ALTGR) 15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> mod |= KMOD_MODE ; 15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner keysym -> unicode = ch ; 15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("leave NX_TranslateKey\n") ; 16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return keysym ; 16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic int check_boundary (_THIS, int x, int y) 16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (x < OffsetX || y < OffsetY || x > OffsetX + this -> screen -> w || 16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner y > OffsetY + this -> screen -> h) 16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 0 ; 16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 1 ; 17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid NX_PumpEvents (_THIS) 17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GR_EVENT event ; 17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner static GR_BUTTON last_button_down = 0 ; 17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GrCheckNextEvent (& event) ; 17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner while (event.type != GR_EVENT_TYPE_NONE) { 18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // dispatch event 18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner switch (event.type) { 18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_MOUSE_ENTER : 18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("mouse enter\n") ; 18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (1, SDL_APPMOUSEFOCUS) ; 18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_MOUSE_EXIT : 19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 19246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("mouse exit\n") ; 19346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (0, SDL_APPMOUSEFOCUS) ; 19446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 19546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 19646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_FOCUS_IN : 19846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 19946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("focus in\n") ; 20046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (1, SDL_APPINPUTFOCUS) ; 20146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 20246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 20346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_FOCUS_OUT : 20546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 20646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("focus out\n") ; 20746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS) ; 20846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 20946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 21046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 21146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_MOUSE_MOTION : 21246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 21346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("mouse motion\n") ; 21446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 21546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (SDL_VideoSurface) { 21646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currently_fullscreen) { 21746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (check_boundary (this, event.button.x, event.button.y)) { 21846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseMotion (0, 0, event.button.x - OffsetX, 21946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner event.button.y - OffsetY) ; 22046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 22146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else { 22246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseMotion (0, 0, event.button.x, event.button.y) ; 22346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 22446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 22546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 22646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 22746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_BUTTON_DOWN : 22946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 23046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int button = event.button.buttons ; 23146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 23246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("button down\n") ; 23346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 23446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner switch (button) { 23546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case MWBUTTON_L : 23646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner button = 1 ; 23746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 23846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case MWBUTTON_M : 23946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner button = 2 ; 24046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 24146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case MWBUTTON_R : 24246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner button = 3 ; 24346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 24446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner default : 24546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner button = 0 ; 24646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 24746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner last_button_down = button ; 24846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 24946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currently_fullscreen) { 25046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (check_boundary (this, event.button.x, event.button.y)) { 25146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseButton (SDL_PRESSED, button, 25246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner event.button.x - OffsetX, event.button.y - OffsetY) ; 25346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 25446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else { 25546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseButton (SDL_PRESSED, button, 25646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner event.button.x, event.button.y) ; 25746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 25846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 25946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 26046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 26146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // do not konw which button is released 26246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_BUTTON_UP : 26346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 26446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("button up\n") ; 26546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 26646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currently_fullscreen) { 26746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (check_boundary (this, event.button.x, event.button.y)) { 26846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseButton (SDL_RELEASED, last_button_down, 26946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner event.button.x - OffsetX, event.button.y - OffsetY) ; 27046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 27146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } else { 27246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateMouseButton (SDL_RELEASED, last_button_down, 27346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner event.button.x, event.button.y) ; 27446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 27546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner last_button_down = 0 ; 27646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 27746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 27846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 27946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_KEY_DOWN : 28046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 28146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_keysym keysym ; 28246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 28346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("key down\n") ; 28446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateKeyboard (SDL_PRESSED, 28546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_TranslateKey (& event.keystroke, & keysym)) ; 28646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 28746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 28846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 28946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_KEY_UP : 29046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 29146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_keysym keysym ; 29246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 29346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("key up\n") ; 29446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateKeyboard (SDL_RELEASED, 29546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_TranslateKey (& event.keystroke, & keysym)) ; 29646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 29746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 29846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 29946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_CLOSE_REQ : 30046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 30146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("close require\n") ; 30246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateQuit () ; 30346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 30446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 30546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 30646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_EXPOSURE : 30746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 30846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("event_type_exposure\n") ; 30946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (SDL_VideoSurface) { 31046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_RefreshDisplay (this) ;//, & event.exposure) ; 31146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 31246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 31346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 31446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 31546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_EVENT_TYPE_UPDATE : 31646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 31746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner switch (event.update.utype) { 31846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_MAP : 31946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 32046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("GR_UPDATE_MAP\n") ; 32146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // If we're not active, make ourselves active 32246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (!(SDL_GetAppState () & SDL_APPACTIVE)) { 32346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // Send an internal activate event 32446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (1, SDL_APPACTIVE) ; 32546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 32646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (SDL_VideoSurface) { 32746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner NX_RefreshDisplay (this) ; 32846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 32946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 33046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 33146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 33246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_UNMAP : 33346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_UNMAPTEMP : 33446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 33546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("GR_UPDATE_UNMAP or GR_UPDATE_UNMAPTEMP\n") ; 33646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // If we're active, make ourselves inactive 33746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (SDL_GetAppState () & SDL_APPACTIVE) { 33846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner // Send an internal deactivate event 33946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateAppActive (0, SDL_APPACTIVE | SDL_APPINPUTFOCUS) ; 34046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 34146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 34246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 34346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 34446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_SIZE : 34546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 34646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("GR_UPDATE_SIZE\n") ; 34746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_PrivateResize (event.update.width, event.update.height) ; 34846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 34946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 35046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 35146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_MOVE : 35246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case GR_UPDATE_REPARENT : 35346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 35446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("GR_UPDATE_MOVE or GR_UPDATE_REPARENT\n") ; 35546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef ENABLE_NANOX_DIRECT_FB 35646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (Clientfb) { 35746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Get current window position and fb pointer*/ 35846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (currently_fullscreen) 35946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GrGetWindowFBInfo(FSwindow, &fbinfo); 36046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else 36146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GrGetWindowFBInfo(SDL_Window, &fbinfo); 36246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 36346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 36446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 36546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 36646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 36746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner default : 36846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("unknown GR_EVENT_TYPE_UPDATE\n") ; 36946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 37046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 37146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break ; 37246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 37346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 37446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner default : 37546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 37646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Dprintf ("pump event default\n") ; 37746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 37846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 37946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 38046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner GrCheckNextEvent (& event) ; 38146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 38246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 383