diff --git a/src/dspsubrs.c b/src/dspsubrs.c index 7fdfe8a..bf3e48b 100644 --- a/src/dspsubrs.c +++ b/src/dspsubrs.c @@ -69,6 +69,13 @@ LispPTR DSP_VideoColor(LispPTR *args) /* args[0] : black flag */ return ATOM_T; else return NIL; +#elif defined(SDL) + invert = args[0] & 0xFFFF; + sdl_set_invert(invert); + if (invert) + return ATOM_T; + else + return NIL; #else return NIL; #endif @@ -114,6 +121,11 @@ void DSP_SetMousePos(LispPTR *args) if (Mouse_Included) set_Xmouseposition((int)(GetSmalldata(args[0])), (int)(GetSmalldata(args[1]))); #endif /* XWINDOW */ +#ifdef SDL + int x = (int)(GetSmalldata(args[0])); + int y = (int)(GetSmalldata(args[1])); + sdl_setMousePosition(x, y); +#endif /* SDL */ } /**************************************************** diff --git a/src/sdl.c b/src/sdl.c index 02ba7bb..ef5d635 100644 --- a/src/sdl.c +++ b/src/sdl.c @@ -210,7 +210,7 @@ int should_update_texture = 0; void sdl_notify_damage(int x, int y, int w, int h) { should_update_texture = 1; } - +int do_invert = 0; void sdl_bitblt_to_screen(int _x, int _y, int _w, int _h) { //printf("bitblting\n"); int before = SDL_GetTicks(); @@ -228,9 +228,9 @@ void sdl_bitblt_to_screen(int _x, int _y, int _w, int _h) { //printf("%d/%d %d\n", x, y, b); int px = 0; if(w & (1 << (bpw - 1 - b))) { - px = 0xff000000; + px = do_invert ? 0xffffffff : 0xff000000; } else { - px = 0xffffffff; + px = do_invert ? 0xff000000 : 0xffffffff; } //printf("px is %x\n", px); int xx = thex + b; @@ -333,6 +333,12 @@ static int last_keystate[512] = { 0 }; /* } */ /* } */ /* } */ +void sdl_set_invert(int flag) { + do_invert = flag; +} +void sdl_setMousePosition(int x, int y) { + SDL_WarpMouseInWindow(sdl_window, x, y); +} int process_events_time = 0; void process_SDLevents() { // printf("processing events delta %dms\n", SDL_GetTicks() - process_events_time);