X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=71d9fbbe7274d71555b4c7ef90552b78a8e78124;hb=2c91866598fc7ff9b6a6075c288a6974bfc11965;hp=f586bd8baaf59cad189720185aa0b0853622c310;hpb=e89a21e95b3cb84d1515c0fb3378ce902a48c1c8;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index f586bd8b..71d9fbbe 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -65,10 +65,17 @@ static void FinalizeScreen(int draw_target) // copy tile selection cursor to render target buffer, if defined (above all) if (gfx.draw_tile_cursor_function != NULL) gfx.draw_tile_cursor_function(draw_target); + + // copy global animations to render target buffer, if defined (mouse pointer) + if (gfx.draw_global_anim_function != NULL) + gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_3); } static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay) { + if (program.headless) + return; + static DelayCounter update_screen_delay = { 50 }; // (milliseconds) SDL_Surface *screen = backbuffer->surface; @@ -553,6 +560,7 @@ static boolean SDLCreateScreen(boolean fullscreen) int screen_height = video.screen_height; int surface_flags = (fullscreen ? surface_flags_fullscreen : surface_flags_window); + int display_nr = options.display_nr; // default window size is unscaled video.window_width = screen_width; @@ -588,15 +596,14 @@ static boolean SDLCreateScreen(boolean fullscreen) if (sdl_window) { - SDL_DestroyWindow(sdl_window); - sdl_window = NULL; + SDL_SetWindowSize(sdl_window, video.window_width, video.window_height); } } if (sdl_window == NULL) sdl_window = SDL_CreateWindow(program.window_title, - SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED_DISPLAY(display_nr), + SDL_WINDOWPOS_CENTERED_DISPLAY(display_nr), video.window_width, video.window_height, surface_flags); @@ -796,7 +803,8 @@ void SDLSetWindowFullscreen(boolean fullscreen) { SDLSetWindowScaling(setup.window_scaling_percent); SDL_SetWindowPosition(sdl_window, - SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + SDL_WINDOWPOS_CENTERED_DISPLAY(options.display_nr), + SDL_WINDOWPOS_CENTERED_DISPLAY(options.display_nr)); video.fullscreen_initial = FALSE; } @@ -1450,14 +1458,14 @@ static void _PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) case 1: { // Assuming 8-bpp - *((Uint8 *)surface->pixels + y*surface->pitch + x) = color; + *((Uint8 *)surface->pixels + y * surface->pitch + x) = color; } break; case 2: { // Probably 15-bpp or 16-bpp - *((Uint16 *)surface->pixels + y*surface->pitch/2 + x) = color; + *((Uint16 *)surface->pixels + y * surface->pitch / 2 + x) = color; } break; @@ -1468,20 +1476,20 @@ static void _PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) int shift; // Gack - slow, but endian correct - pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3; + pix = (Uint8 *)surface->pixels + y * surface->pitch + x * 3; shift = surface->format->Rshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Gshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Bshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; } break; case 4: { // Probably 32-bpp - *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color; + *((Uint32 *)surface->pixels + y * surface->pitch / 4 + x) = color; } break; } @@ -1497,12 +1505,12 @@ static void _PutPixelRGB(SDL_Surface *surface, Sint16 x, Sint16 y, static void _PutPixel8(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) { - *((Uint8 *)surface->pixels + y*surface->pitch + x) = color; + *((Uint8 *)surface->pixels + y * surface->pitch + x) = color; } static void _PutPixel16(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) { - *((Uint16 *)surface->pixels + y*surface->pitch/2 + x) = color; + *((Uint16 *)surface->pixels + y * surface->pitch / 2 + x) = color; } static void _PutPixel24(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) @@ -1511,38 +1519,38 @@ static void _PutPixel24(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) int shift; // Gack - slow, but endian correct - pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3; + pix = (Uint8 *)surface->pixels + y * surface->pitch + x * 3; shift = surface->format->Rshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Gshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Bshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; } static void _PutPixel32(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) { - *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color; + *((Uint32 *)surface->pixels + y * surface->pitch / 4 + x) = color; } -static void _PutPixelX(SDL_Surface *dest,Sint16 x,Sint16 y,Uint32 color) +static void _PutPixelX(SDL_Surface *dest, Sint16 x, Sint16 y, Uint32 color) { switch (dest->format->BytesPerPixel) { case 1: - *((Uint8 *)dest->pixels + y*dest->pitch + x) = color; + *((Uint8 *)dest->pixels + y * dest->pitch + x) = color; break; case 2: - *((Uint16 *)dest->pixels + y*dest->pitch/2 + x) = color; + *((Uint16 *)dest->pixels + y * dest->pitch / 2 + x) = color; break; case 3: - _PutPixel24(dest,x,y,color); + _PutPixel24(dest, x, y, color); break; case 4: - *((Uint32 *)dest->pixels + y*dest->pitch/4 + x) = color; + *((Uint32 *)dest->pixels + y * dest->pitch / 4 + x) = color; break; } } @@ -1580,19 +1588,19 @@ static Sint32 sge_CalcYPitch(SDL_Surface *dest, Sint16 y) switch (dest->format->BytesPerPixel) { case 1: - return y*dest->pitch; + return y * dest->pitch; break; case 2: - return y*dest->pitch/2; + return y * dest->pitch / 2; break; case 3: - return y*dest->pitch; + return y * dest->pitch; break; case 4: - return y*dest->pitch/4; + return y * dest->pitch / 4; break; } } @@ -1628,13 +1636,13 @@ static void sge_pPutPixel(SDL_Surface *surface, Sint16 x, Sint32 ypitch, int shift; // Gack - slow, but endian correct - pix = (Uint8 *)surface->pixels + ypitch + x*3; + pix = (Uint8 *)surface->pixels + ypitch + x * 3; shift = surface->format->Rshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Gshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; shift = surface->format->Bshift; - *(pix+shift/8) = color>>shift; + *(pix + shift / 8) = color>>shift; } break; @@ -1902,22 +1910,6 @@ void SDLPutPixel(Bitmap *dst_bitmap, int x, int y, Pixel pixel) // quick (no, it's slow) and dirty hack to "invert" rectangle inside SDL surface // ---------------------------------------------------------------------------- -void SDLInvertArea(Bitmap *bitmap, int src_x, int src_y, - int width, int height, Uint32 color) -{ - int x, y; - - for (y = src_y; y < src_y + height; y++) - { - for (x = src_x; x < src_x + width; x++) - { - Uint32 pixel = SDLGetPixel(bitmap, x, y); - - SDLPutPixel(bitmap, x, y, pixel == BLACK_PIXEL ? color : BLACK_PIXEL); - } - } -} - void SDLCopyInverseMasked(Bitmap *src_bitmap, Bitmap *dst_bitmap, int src_x, int src_y, int width, int height, int dst_x, int dst_y)