#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_NGAGE
#ifdef __cplusplus
extern "C" {
#endif
#include "../../events/SDL_events_c.h"
#include "../../events/SDL_keyboard_c.h"
#ifdef __cplusplus
}
#endif
#include "SDL_ngagevideo.h"
#include "SDL_ngageevents_c.h"
int HandleWsEvent(_THIS, const TWsEvent& aWsEvent);
void
NGAGE_PumpEvents(_THIS)
{
SDL_VideoData *phdata = (SDL_VideoData*)_this->driverdata;
while (phdata->NGAGE_WsEventStatus != KRequestPending)
{
phdata->NGAGE_WsSession.GetEvent(phdata->NGAGE_WsEvent);
HandleWsEvent(_this, phdata->NGAGE_WsEvent);
phdata->NGAGE_WsEventStatus = KRequestPending;
phdata->NGAGE_WsSession.EventReady(&phdata->NGAGE_WsEventStatus);
}
}
#include <bautils.h>
#include <hal.h>
extern void DisableKeyBlocking(_THIS);
extern void RedrawWindowL(_THIS);
TBool isCursorVisible = EFalse;
static SDL_Scancode ConvertScancode(_THIS, int key)
{
SDL_Keycode keycode;
switch(key)
{
case EStdKeyBackspace: keycode = SDLK_BACKSPACE;
break;
case 0x31: keycode = SDLK_1;
break;
case 0x32: keycode = SDLK_2;
break;
case 0x33: keycode = SDLK_3;
break;
case 0x34: keycode = SDLK_4;
break;
case 0x35: keycode = SDLK_5;
break;
case 0x36: keycode = SDLK_6;
break;
case 0x37: keycode = SDLK_7;
break;
case 0x38: keycode = SDLK_8;
break;
case 0x39: keycode = SDLK_9;
break;
case 0x30: keycode = SDLK_0;
break;
case 0x2a: keycode = SDLK_ASTERISK;
break;
case EStdKeyHash: keycode = SDLK_HASH;
break;
case EStdKeyDevice0: keycode = SDLK_SOFTLEFT;
break;
case EStdKeyDevice1: keycode = SDLK_SOFTRIGHT;
break;
case EStdKeyApplication0: keycode = SDLK_CALL;
break;
case EStdKeyApplication1: keycode = SDLK_ENDCALL;
break;
case EStdKeyDevice3: keycode = SDLK_SELECT;
break;
case EStdKeyUpArrow: keycode = SDLK_UP;
break;
case EStdKeyDownArrow: keycode = SDLK_DOWN;
break;
case EStdKeyLeftArrow: keycode = SDLK_LEFT;
break;
case EStdKeyRightArrow: keycode = SDLK_RIGHT;
break;
default:
keycode = SDLK_UNKNOWN;
break;
}
return SDL_GetScancodeFromKey(keycode);
}
int HandleWsEvent(_THIS, const TWsEvent& aWsEvent)
{
SDL_VideoData *phdata = (SDL_VideoData*)_this->driverdata;
int posted = 0;
switch (aWsEvent.Type())
{
case EEventKeyDown:
SDL_SendKeyboardKey(SDL_PRESSED, ConvertScancode(_this, aWsEvent.Key()->iScanCode));
break;
case EEventKeyUp:
SDL_SendKeyboardKey(SDL_RELEASED, ConvertScancode(_this, aWsEvent.Key()->iScanCode));
break;
case EEventFocusGained:
phdata->NGAGE_IsWindowFocused = ETrue;
DisableKeyBlocking(_this);
RedrawWindowL(_this);
break;
case EEventFocusLost:
{
phdata->NGAGE_IsWindowFocused = EFalse;
RWsSession s;
s.Connect();
RWindowGroup g(s);
g.Construct(TUint32(&g), EFalse);
g.EnableReceiptOfFocus(EFalse);
RWindow w(s);
w.Construct(g, TUint32(&w));
w.SetExtent(TPoint(0, 0), phdata->NGAGE_WsWindow.Size());
w.SetOrdinalPosition(0);
w.Activate();
w.Close();
g.Close();
s.Close();
break;
}
case EEventModifiersChanged:
break;
default:
break;
}
return posted;
}
#endif