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