projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bug with referencing out-of-scope structures
[rocksndiamonds.git]
/
src
/
libgame
/
sdl.c
diff --git
a/src/libgame/sdl.c
b/src/libgame/sdl.c
index cbdbdc1cfcac586f1a414bc5e2f3d053a3636d2b..b75f2c8c6e58f27c5c359bbf573df1cec32cc525 100644
(file)
--- a/
src/libgame/sdl.c
+++ b/
src/libgame/sdl.c
@@
-151,6
+151,9
@@
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
dst_rect1 = &dst_rect_screen;
#if defined(HAS_SCREEN_KEYBOARD)
dst_rect1 = &dst_rect_screen;
#if defined(HAS_SCREEN_KEYBOARD)
+ SDL_Rect src_rect_up = { 0, 0, video.width, video.height };
+ SDL_Rect dst_rect_up = dst_rect_screen;
+
if (video.shifted_up || video.shifted_up_delay)
{
int time_current = SDL_GetTicks();
if (video.shifted_up || video.shifted_up_delay)
{
int time_current = SDL_GetTicks();
@@
-171,8
+174,9
@@
static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
video.shifted_up_delay = 0;
}
video.shifted_up_delay = 0;
}
- SDL_Rect src_rect_up = { 0, pos, video.width, video.height - pos };
- SDL_Rect dst_rect_up = { xoff, yoff, video.width, video.height - pos };
+ src_rect_up.y = pos;
+ src_rect_up.h = video.height - pos;
+ dst_rect_up.h = video.height - pos;
if (video.screen_rendering_mode == SPECIAL_RENDERING_TARGET ||
video.screen_rendering_mode == SPECIAL_RENDERING_DOUBLE)
if (video.screen_rendering_mode == SPECIAL_RENDERING_TARGET ||
video.screen_rendering_mode == SPECIAL_RENDERING_DOUBLE)
@@
-297,14
+301,28
@@
static boolean equalSDLPixelFormat(SDL_PixelFormat *format1,
format1->Bmask == format2->Bmask);
}
format1->Bmask == format2->Bmask);
}
-static
Pixel SDLGetColorKey(SDL_Surface *
surface)
+static
void SDLCopyColorKey(SDL_Surface *src_surface, SDL_Surface *dst_
surface)
{
Pixel color_key;
{
Pixel color_key;
+ Uint8 r, g, b;
+
+ // check if source surface has a color key
+ if (SDL_GetColorKey(src_surface, &color_key) == 0)
+ {
+ // get RGB values of color key of source surface
+ SDL_GetRGB(color_key, src_surface->format, &r, &g, &b);
- if (SDL_GetColorKey(surface, &color_key) != 0)
-
return -1
;
+ // get color key from RGB values in destination surface format
+
color_key = SDL_MapRGB(dst_surface->format, r, g, b)
;
- return color_key;
+ // set color key in destination surface
+ SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL, color_key);
+ }
+ else
+ {
+ // unset color key in destination surface
+ SDL_SetColorKey(dst_surface, UNSET_TRANSPARENT_PIXEL, 0);
+ }
}
static boolean SDLHasColorKey(SDL_Surface *surface)
}
static boolean SDLHasColorKey(SDL_Surface *surface)
@@
-324,7
+342,7
@@
static boolean SDLHasAlpha(SDL_Surface *surface)
return (blend_mode == SDL_BLENDMODE_BLEND);
}
return (blend_mode == SDL_BLENDMODE_BLEND);
}
-
static
void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
+void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
{
SDL_BlendMode blend_mode = (set ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
{
SDL_BlendMode blend_mode = (set ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
@@
-366,8
+384,7
@@
SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
// workaround for a bug in SDL 2.0.12 (which does not convert the color key)
if (SDLHasColorKey(surface) && !SDLHasColorKey(new_surface))
// workaround for a bug in SDL 2.0.12 (which does not convert the color key)
if (SDLHasColorKey(surface) && !SDLHasColorKey(new_surface))
- SDL_SetColorKey(new_surface, SET_TRANSPARENT_PIXEL,
- SDLGetColorKey(surface));
+ SDLCopyColorKey(surface, new_surface);
return new_surface;
}
return new_surface;
}
@@
-863,6
+880,8
@@
void SDLSetScreenProperties(void)
SDLSetDisplaySize();
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
SDLSetDisplaySize();
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
+
+ SetOverlayGridSizeAndButtons();
}
void SDLSetScreenRenderingMode(char *screen_rendering_mode)
}
void SDLSetScreenRenderingMode(char *screen_rendering_mode)
@@
-1210,6
+1229,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
draw_border_function();
UpdateScreen_WithFrameDelay(&dst_rect2);
draw_border_function();
UpdateScreen_WithFrameDelay(&dst_rect2);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
}
}
}
}
@@
-1266,6
+1288,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect2);
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect2);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
else // fading in, fading out or cross-fading
}
}
else // fading in, fading out or cross-fading
@@
-1292,6
+1317,9
@@
void SDLFadeRectangle(int x, int y, int width, int height,
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect);
// only update the region of the screen that is affected from fading
UpdateScreen_WithFrameDelay(&dst_rect);
+
+ if (PendingEscapeKeyEvent())
+ break;
}
}
}
}
@@
-2269,8
+2297,7
@@
Bitmap *SDLZoomBitmap(Bitmap *src_bitmap, int dst_width, int dst_height)
// set color key for zoomed surface from source surface, if defined
if (SDLHasColorKey(src_surface))
// set color key for zoomed surface from source surface, if defined
if (SDLHasColorKey(src_surface))
- SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL,
- SDLGetColorKey(src_surface));
+ SDLCopyColorKey(src_surface, dst_surface);
// create native non-transparent surface for opaque blitting
dst_bitmap->surface = SDLGetOpaqueSurface(dst_surface);
// create native non-transparent surface for opaque blitting
dst_bitmap->surface = SDLGetOpaqueSurface(dst_surface);
@@
-2695,7
+2722,7
@@
void SDLInitJoysticks(void)
boolean print_warning = !sdl_joystick_subsystem_initialized;
char *mappings_file_base = getPath2(options.conf_directory,
GAMECONTROLLER_BASENAME);
boolean print_warning = !sdl_joystick_subsystem_initialized;
char *mappings_file_base = getPath2(options.conf_directory,
GAMECONTROLLER_BASENAME);
- char *mappings_file_user = getPath2(getUserGameDataDir(),
+ char *mappings_file_user = getPath2(get
Main
UserGameDataDir(),
GAMECONTROLLER_BASENAME);
int num_mappings;
int i;
GAMECONTROLLER_BASENAME);
int num_mappings;
int i;