X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fsdl.c;h=e573d3637458592d200bcb56afcf9e1064ce5321;hb=adebc3d223c1611d7c947adba6a8b34885033aec;hp=d8100125d9f0e5ad92e85d773f936d9bfa8ec24a;hpb=8d46c5298f0fcce7bdb52f3835b2fbbdc403dfe0;p=rocksndiamonds.git diff --git a/src/sdl.c b/src/sdl.c index d8100125..e573d363 100644 --- a/src/sdl.c +++ b/src/sdl.c @@ -15,6 +15,7 @@ #ifdef USE_SDL_LIBRARY #include "main.h" +#include "misc.h" inline void SDLCopyArea(SDL_Surface *src_surface, SDL_Surface *dst_surface, int src_x, int src_y, @@ -34,7 +35,9 @@ inline void SDLCopyArea(SDL_Surface *src_surface, SDL_Surface *dst_surface, dst_rect.h = height; SDL_BlitSurface(src_surface, &src_rect, dst_surface, &dst_rect); - SDL_UpdateRect(dst_surface, dst_x, dst_y, width, height); + + if (dst_surface == window) + SDL_UpdateRect(dst_surface, dst_x, dst_y, width, height); } inline void SDLFillRectangle(SDL_Surface *surface, int x, int y, @@ -50,6 +53,30 @@ inline void SDLFillRectangle(SDL_Surface *surface, int x, int y, rect.w = width; rect.h = height; + SDL_FillRect(surface, &rect, + SDL_MapRGB(surface->format, color_r, color_g, color_b)); + SDL_UpdateRect(surface, x, y, width, height); +} + +inline void SDLDrawSimpleLine(SDL_Surface *surface, int from_x, int from_y, + int to_x, int to_y, unsigned int color) +{ + SDL_Rect rect; + unsigned int color_r = (color >> 2) & 0xff; + unsigned int color_g = (color >> 1) & 0xff; + unsigned int color_b = (color >> 0) & 0xff; + + if (from_x > to_x) + swap_numbers(&from_x, &to_x); + + if (from_y > to_y) + swap_numbers(&from_y, &to_y); + + rect.x = from_x; + rect.y = from_y; + rect.w = (to_x - from_x + 1); + rect.h = (to_y - from_y + 1); + SDL_FillRect(surface, &rect, SDL_MapRGB(surface->format, color_r, color_g, color_b)); }