/* init/close functions */
/* ========================================================================= */
-void InitProgramInfo(char *argv0, char *config_filename,
- char *userdata_subdir, char *userdata_subdir_unix,
+void InitProgramInfo(char *argv0, char *config_filename, char *userdata_subdir,
char *program_title, char *icon_title,
char *icon_filename, char *cookie_prefix,
int program_version)
program.config_filename = config_filename;
program.userdata_subdir = userdata_subdir;
- program.userdata_subdir_unix = userdata_subdir_unix;
program.userdata_path = getUserGameDataDir();
program.program_title = program_title;
program.exit_function = exit_function;
/* set signal handlers to custom exit function */
- signal(SIGINT, exit_function);
+ // signal(SIGINT, exit_function);
signal(SIGTERM, exit_function);
/* set exit function to automatically cleanup SDL stuff after exit() */
// this is initialized in GetOptions(), but may already be used before
options.verbose = TRUE;
-#if defined(PLATFORM_MACOSX)
- updateUserGameDataDir();
-#endif
-
OpenLogFiles();
#if defined(TARGET_SDL2)
gfx.field_save_buffer = field_save_buffer;
- gfx.drawing_area_changed = FALSE;
-
SetDrawDeactivationMask(REDRAW_NONE); /* do not deactivate drawing */
SetDrawBackgroundMask(REDRAW_NONE); /* deactivate masked drawing */
}
gfx.draw_busy_anim_function = draw_busy_anim_function;
}
+void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(void))
+{
+ gfx.draw_global_anim_function = draw_global_anim_function;
+}
+
void InitGfxCustomArtworkInfo()
{
gfx.override_level_graphics = FALSE;
}
inline static void sysFillRectangle(Bitmap *bitmap, int x, int y,
- int width, int height, Pixel color)
+ int width, int height, Pixel color)
{
SDLFillRectangle(bitmap, x, y, width, height, color);
+
+ if (bitmap == backbuffer)
+ SetRedrawMaskFromArea(x, y, width, height);
}
inline static void sysCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap,
{
SDLCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height,
dst_x, dst_y, mask_mode);
+
+ if (dst_bitmap == backbuffer)
+ SetRedrawMaskFromArea(dst_x, dst_y, width, height);
}
void LimitScreenUpdates(boolean enable)
{
}
+void SetRedrawMaskFromArea(int x, int y, int width, int height)
+{
+ int x1 = x;
+ int y1 = y;
+ int x2 = x + width - 1;
+ int y2 = y + height - 1;
+
+ if (width == 0 || height == 0)
+ return;
+
+ if (IN_GFX_FIELD_FULL(x1, y1) && IN_GFX_FIELD_FULL(x2, y2))
+ redraw_mask |= REDRAW_FIELD;
+ else if (IN_GFX_DOOR_1(x1, y1) && IN_GFX_DOOR_1(x2, y2))
+ redraw_mask |= REDRAW_DOOR_1;
+ else if (IN_GFX_DOOR_2(x1, y1) && IN_GFX_DOOR_2(x2, y2))
+ redraw_mask |= REDRAW_DOOR_2;
+ else if (IN_GFX_DOOR_3(x1, y1) && IN_GFX_DOOR_3(x2, y2))
+ redraw_mask |= REDRAW_DOOR_3;
+ else
+ redraw_mask = REDRAW_ALL;
+}
+
inline static boolean CheckDrawingArea(int x, int y, int width, int height,
int draw_mask)
{
CheckDrawingArea(x, y, 1, 1, gfx.draw_background_mask));
}
-boolean DrawingAreaChanged()
-{
- int drawing_area_changed = gfx.drawing_area_changed;
-
- // reset flag for change of drawing area after querying it
- gfx.drawing_area_changed = FALSE;
-
- return drawing_area_changed;
-}
-
static boolean InClippedRectangle(Bitmap *bitmap, int *x, int *y,
int *width, int *height, boolean is_dest)
{
Error(ERR_EXIT, "LoadCustomImage(): cannot find file '%s'", basename);
if ((new_bitmap = LoadImage(filename)) == NULL)
- Error(ERR_EXIT, "LoadImage() failed: %s", GetError());
+ Error(ERR_EXIT, "LoadImage('%s') failed: %s", basename, GetError());
return new_bitmap;
}
if ((new_bitmap = LoadImage(filename)) == NULL)
{
- Error(ERR_WARN, "LoadImage() failed: %s", GetError());
+ Error(ERR_WARN, "LoadImage('%s') failed: %s", basename, GetError());
return;
}
CreateScaledBitmaps(bitmaps, zoom_factor, tile_size, TRUE);
}
+void CreateBitmapTextures(Bitmap **bitmaps)
+{
+ SDLCreateBitmapTextures(bitmaps[IMG_BITMAP_STANDARD]);
+}
+
void ScaleBitmap(Bitmap **bitmaps, int zoom_factor)
{
CreateScaledBitmaps(bitmaps, zoom_factor, 0, FALSE);