X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fui_sdl.c;h=a3e4d4b9cc681beb3671622c3845b082f6587ad6;hb=0dd55a90dfc0073f9432635a621c3ec6d2d9bca9;hp=7e97cbe74590073b0fc671eb0aec42ba364bbc53;hpb=03900b58142ae00b0bf708accbbe97e1ba83188b;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/ui_sdl.c b/AcessNative/acesskernel_src/ui_sdl.c index 7e97cbe7..a3e4d4b9 100644 --- a/AcessNative/acesskernel_src/ui_sdl.c +++ b/AcessNative/acesskernel_src/ui_sdl.c @@ -27,6 +27,7 @@ SDL_Thread *gInputThread; int giUI_Pitch = 0; tUI_KeybardCallback gUI_KeyboardCallback; Uint32 gUI_Keymap[2][SDLK_LAST]; // Upper/Lower case + int gbUpdateTriggered = 0; // === FUNCTIONS === int UI_Initialise(int MaxWidth, int MaxHeight) @@ -78,6 +79,7 @@ Uint32 UI_GetAcessKeyFromSDL(SDLKey Sym) case SDLK_0 ... SDLK_9: ret = Sym - SDLK_0 + KEYSYM_0; break; + case SDLK_SLASH: ret = KEYSYM_SLASH; break; case SDLK_CAPSLOCK: ret = KEYSYM_CAPS; break; case SDLK_TAB: ret = KEYSYM_TAB; break; case SDLK_UP: ret = KEYSYM_UPARROW; break; @@ -105,6 +107,7 @@ Uint32 UI_GetAcessKeyFromSDL(SDLKey Sym) case SDLK_RCTRL: ret = KEYSYM_RIGHTCTRL; break; case SDLK_RSHIFT: ret = KEYSYM_RIGHTSHIFT; break; case SDLK_RSUPER: ret = KEYSYM_RIGHTGUI; break; + case SDLK_BACKSPACE: ret = KEYSYM_BACKSP; break; default: printf("Unhandled key code %i\n", Sym); break; @@ -130,56 +133,57 @@ void UI_MainLoop(void) SDL_Event event; Uint32 acess_sym; - for( ;; ) + while( SDL_WaitEvent(&event) ) { - while(SDL_PollEvent(&event)) + switch(event.type) { - switch(event.type) - { - case SDL_QUIT: - AcessNative_Exit(); - return ; - - case SDL_KEYDOWN: - acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym); - // Enter key on acess returns \n, but SDL returns \r - if(event.key.keysym.sym == SDLK_RETURN) - event.key.keysym.unicode = '\n'; - - if( gUI_KeyboardCallback ) { - gUI_KeyboardCallback(KEY_ACTION_RAWSYM|acess_sym); - gUI_KeyboardCallback(KEY_ACTION_PRESS|event.key.keysym.unicode); - } - break; + case SDL_QUIT: + AcessNative_Exit(); + return ; + + case SDL_KEYDOWN: + acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym); + // Enter key on acess returns \n, but SDL returns \r + if(event.key.keysym.sym == SDLK_RETURN) + event.key.keysym.unicode = '\n'; + + if( gUI_KeyboardCallback ) { + gUI_KeyboardCallback(KEY_ACTION_RAWSYM|acess_sym); + gUI_KeyboardCallback(KEY_ACTION_PRESS|event.key.keysym.unicode); + } + break; + + case SDL_KEYUP: + acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym); - case SDL_KEYUP: - acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym); - - if( gUI_KeyboardCallback ) { - gUI_KeyboardCallback(KEY_ACTION_RAWSYM|acess_sym); - gUI_KeyboardCallback(KEY_ACTION_RELEASE|0); - } - break; - - case SDL_USEREVENT: + if( gUI_KeyboardCallback ) { + gUI_KeyboardCallback(KEY_ACTION_RAWSYM|acess_sym); + gUI_KeyboardCallback(KEY_ACTION_RELEASE|0); + } + break; + + case SDL_USEREVENT: + if( gbUpdateTriggered ) + { + gbUpdateTriggered = 0; SDL_UpdateRect(gScreen, 0, 0, giUI_Width, giUI_Height); SDL_Flip(gScreen); - break; - - case SDL_MOUSEMOTION: { - int abs[] = {event.motion.x, event.motion.y}; - int delta[] = {event.motion.xrel, event.motion.yrel}; - Mouse_HandleEvent(UI_GetButtonBits(SDL_GetMouseState(NULL, NULL)), delta, abs); - break; } - case SDL_MOUSEBUTTONUP: - case SDL_MOUSEBUTTONDOWN: { - int abs[] = {event.button.x, event.button.y}; - Mouse_HandleEvent(UI_GetButtonBits(SDL_GetMouseState(NULL, NULL)), NULL, abs); - break; } - - default: - break; } + break; + + case SDL_MOUSEMOTION: { + int abs[] = {event.motion.x, event.motion.y}; + int delta[] = {event.motion.xrel, event.motion.yrel}; + Mouse_HandleEvent(UI_GetButtonBits(SDL_GetMouseState(NULL, NULL)), delta, abs); + break; } + case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: { + int abs[] = {event.button.x, event.button.y}; + Mouse_HandleEvent(UI_GetButtonBits(SDL_GetMouseState(NULL, NULL)), NULL, abs); + break; } + + default: + break; } } } @@ -233,12 +237,16 @@ void UI_Redraw(void) { // TODO: Keep track of changed rectangle // SDL_UpdateRect(gScreen, 0, 0, giUI_Width, giUI_Height); - SDL_Event e; + if( gbUpdateTriggered == 0 ) + { + gbUpdateTriggered = 1; + SDL_Event e; - e.type = SDL_USEREVENT; - e.user.code = 0; - e.user.data1 = 0; - e.user.data2 = 0; + e.type = SDL_USEREVENT; + e.user.code = 0; + e.user.data1 = 0; + e.user.data2 = 0; - SDL_PushEvent( &e ); + SDL_PushEvent( &e ); + } }