mirror of
https://github.com/Interlisp/maiko.git
synced 2026-04-29 21:37:32 +00:00
Add support for inverting video and setting mouse position.
Use (IL:VIDEOCOLOR T/NIL) to change inversion.
This commit is contained in:
@@ -69,6 +69,13 @@ LispPTR DSP_VideoColor(LispPTR *args) /* args[0] : black flag */
|
|||||||
return ATOM_T;
|
return ATOM_T;
|
||||||
else
|
else
|
||||||
return NIL;
|
return NIL;
|
||||||
|
#elif defined(SDL)
|
||||||
|
invert = args[0] & 0xFFFF;
|
||||||
|
sdl_set_invert(invert);
|
||||||
|
if (invert)
|
||||||
|
return ATOM_T;
|
||||||
|
else
|
||||||
|
return NIL;
|
||||||
#else
|
#else
|
||||||
return NIL;
|
return NIL;
|
||||||
#endif
|
#endif
|
||||||
@@ -114,6 +121,11 @@ void DSP_SetMousePos(LispPTR *args)
|
|||||||
if (Mouse_Included)
|
if (Mouse_Included)
|
||||||
set_Xmouseposition((int)(GetSmalldata(args[0])), (int)(GetSmalldata(args[1])));
|
set_Xmouseposition((int)(GetSmalldata(args[0])), (int)(GetSmalldata(args[1])));
|
||||||
#endif /* XWINDOW */
|
#endif /* XWINDOW */
|
||||||
|
#ifdef SDL
|
||||||
|
int x = (int)(GetSmalldata(args[0]));
|
||||||
|
int y = (int)(GetSmalldata(args[1]));
|
||||||
|
sdl_setMousePosition(x, y);
|
||||||
|
#endif /* SDL */
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************
|
/****************************************************
|
||||||
|
|||||||
12
src/sdl.c
12
src/sdl.c
@@ -210,7 +210,7 @@ int should_update_texture = 0;
|
|||||||
void sdl_notify_damage(int x, int y, int w, int h) {
|
void sdl_notify_damage(int x, int y, int w, int h) {
|
||||||
should_update_texture = 1;
|
should_update_texture = 1;
|
||||||
}
|
}
|
||||||
|
int do_invert = 0;
|
||||||
void sdl_bitblt_to_screen(int _x, int _y, int _w, int _h) {
|
void sdl_bitblt_to_screen(int _x, int _y, int _w, int _h) {
|
||||||
//printf("bitblting\n");
|
//printf("bitblting\n");
|
||||||
int before = SDL_GetTicks();
|
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);
|
//printf("%d/%d %d\n", x, y, b);
|
||||||
int px = 0;
|
int px = 0;
|
||||||
if(w & (1 << (bpw - 1 - b))) {
|
if(w & (1 << (bpw - 1 - b))) {
|
||||||
px = 0xff000000;
|
px = do_invert ? 0xffffffff : 0xff000000;
|
||||||
} else {
|
} else {
|
||||||
px = 0xffffffff;
|
px = do_invert ? 0xff000000 : 0xffffffff;
|
||||||
}
|
}
|
||||||
//printf("px is %x\n", px);
|
//printf("px is %x\n", px);
|
||||||
int xx = thex + b;
|
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;
|
int process_events_time = 0;
|
||||||
void process_SDLevents() {
|
void process_SDLevents() {
|
||||||
// printf("processing events delta %dms\n", SDL_GetTicks() - process_events_time);
|
// printf("processing events delta %dms\n", SDL_GetTicks() - process_events_time);
|
||||||
|
|||||||
Reference in New Issue
Block a user