X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fui_sdl.c;h=520ac0091dd23f74a654a8589d7a99889bb47a28;hb=a448627c1d3d7bd7ad98c1d1251dc46492a6ef43;hp=11033d988c5a2e20670b46c1968119800f486161;hpb=542d8ba58741acef4f373b8e4395e03136c5404c;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/ui_sdl.c b/AcessNative/acesskernel_src/ui_sdl.c index 11033d98..520ac009 100644 --- a/AcessNative/acesskernel_src/ui_sdl.c +++ b/AcessNative/acesskernel_src/ui_sdl.c @@ -14,7 +14,6 @@ extern void AcessNative_Exit(void); // === PROTOTYPES === int UI_Initialise(int MaxWidth, int MaxHeight); - int UI_MainThread(void *Unused); void UI_BlitBitmap(int DstX, int DstY, int SrcW, int SrcH, Uint32 *Bitmap); void UI_BlitFramebuffer(int DstX, int DstY, int SrcX, int SrcY, int W, int H); void UI_FillBitmap(int X, int Y, int W, int H, Uint32 Value); @@ -36,12 +35,25 @@ int UI_Initialise(int MaxWidth, int MaxHeight) giUI_Width = MaxWidth; giUI_Height = MaxHeight; - // Start main thread - gInputThread = SDL_CreateThread(UI_MainThread, NULL); + // Set up video + SDL_Init(SDL_INIT_VIDEO); + printf("UI attempting %ix%i %ibpp\n", giUI_Width, giUI_Height, 32); + gScreen = SDL_SetVideoMode(giUI_Width, giUI_Height, 32, SDL_DOUBLEBUF); + if( !gScreen ) { + fprintf(stderr, "Couldn't set %ix%i video mode: %s\n", giUI_Width, giUI_Height, SDL_GetError()); + SDL_Quit(); + exit(2); + } + SDL_WM_SetCaption("Acess2", "Acess2"); - while(gScreen == NULL) - SDL_Delay(10); + giUI_Width = gScreen->w; + giUI_Height = gScreen->h; + giUI_Pitch = gScreen->pitch; + + printf("UI window %ix%i %i bytes per line\n", giUI_Width, giUI_Height, giUI_Pitch); + SDL_EnableUNICODE(1); + return 0; } @@ -100,28 +112,11 @@ Uint32 UI_GetAcessKeyFromSDL(SDLKey Sym, Uint16 Unicode) return ret; } -int UI_MainThread(void *Unused) +void UI_MainLoop(void) { SDL_Event event; Uint32 acess_sym; - - SDL_Init(SDL_INIT_VIDEO); - - // Set up video - gScreen = SDL_SetVideoMode(giUI_Width, giUI_Height, 32, 0); - if( !gScreen ) { - fprintf(stderr, "Couldn't set %ix%i video mode: %s\n", giUI_Width, giUI_Height, SDL_GetError()); - SDL_Quit(); - exit(2); - } - SDL_WM_SetCaption("Acess2", "Acess2"); - - giUI_Width = gScreen->w; - giUI_Height = gScreen->h; - giUI_Pitch = gScreen->pitch; - - SDL_EnableUNICODE(1); - + for( ;; ) { while(SDL_PollEvent(&event)) @@ -130,24 +125,33 @@ int UI_MainThread(void *Unused) { case SDL_QUIT: AcessNative_Exit(); - return 0; + return ; case SDL_KEYDOWN: acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym, event.key.keysym.unicode); - if( gUI_KeyboardCallback ) - gUI_KeyboardCallback(acess_sym); + if( gUI_KeyboardCallback ) { + gUI_KeyboardCallback(KEY_ACTION_RAWSYM|event.key.keysym.sym); + gUI_KeyboardCallback(KEY_ACTION_PRESS|acess_sym); + } break; case SDL_KEYUP: acess_sym = UI_GetAcessKeyFromSDL(event.key.keysym.sym, event.key.keysym.unicode); - if( gUI_KeyboardCallback ) - gUI_KeyboardCallback(0x80000000|acess_sym); + if( gUI_KeyboardCallback ) { + gUI_KeyboardCallback(KEY_ACTION_RAWSYM|event.key.keysym.sym); + gUI_KeyboardCallback(KEY_ACTION_RELEASE|acess_sym); + } break; - + + case SDL_USEREVENT: + SDL_UpdateRect(gScreen, 0, 0, giUI_Width, giUI_Height); + SDL_Flip(gScreen); + break; + default: break; } @@ -203,5 +207,13 @@ void UI_FillBitmap(int X, int Y, int W, int H, Uint32 Value) void UI_Redraw(void) { // TODO: Keep track of changed rectangle - SDL_UpdateRect(gScreen, 0, 0, giUI_Width, giUI_Height); +// SDL_UpdateRect(gScreen, 0, 0, giUI_Width, giUI_Height); + SDL_Event e; + + e.type = SDL_USEREVENT; + e.user.code = 0; + e.user.data1 = 0; + e.user.data2 = 0; + + SDL_PushEvent( &e ); }