struct VideoSystemInfo video;
struct AudioSystemInfo audio;
struct GfxInfo gfx;
+struct FontInfo font;
struct ArtworkInfo artwork;
struct JoystickInfo joystick;
struct SetupInfo setup;
gfx.draw_deactivation_mask = draw_deactivation_mask;
}
+void SetBackgroundBitmap(Bitmap *background_bitmap)
+{
+ gfx.background_bitmap = background_bitmap;
+}
+
/* ========================================================================= */
/* video functions */
{
if (gfx.draw_deactivation_mask != REDRAW_NONE)
{
- if ((gfx.draw_deactivation_mask & REDRAW_FIELD) &&
- x < gfx.sx + gfx.sxsize)
+ if (gfx.draw_deactivation_mask & REDRAW_ALL)
+ return TRUE;
+ else if ((gfx.draw_deactivation_mask & REDRAW_FIELD) &&
+ x < gfx.sx + gfx.sxsize)
return TRUE;
else if ((gfx.draw_deactivation_mask & REDRAW_DOORS) &&
x > gfx.dx)
return FALSE;
}
+inline boolean DrawingOnBackground(int x, int y)
+{
+ return (gfx.background_bitmap != NULL && x < gfx.sx + gfx.sxsize);
+}
+
inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap,
int src_x, int src_y,
int width, int height,
#endif
}
+inline void ClearRectangleOnBackground(Bitmap *bitmap, int x, int y,
+ int width, int height)
+{
+ if (!DrawingOnBackground(x, y))
+ ClearRectangle(bitmap, x, y, width, height);
+ else
+ BlitBitmap(gfx.background_bitmap, bitmap,
+ x - gfx.real_sx, y - gfx.real_sy, width, height, x, y);
+}
+
#if 0
#ifndef TARGET_SDL
static GC last_clip_gc = 0; /* needed for XCopyArea() through clip mask */
#endif
}
+inline void BlitBitmapOnBackground(Bitmap *src_bitmap, Bitmap *dst_bitmap,
+ int src_x, int src_y,
+ int width, int height,
+ int dst_x, int dst_y)
+{
+ if (!DrawingOnBackground(src_x, src_y))
+ BlitBitmap(src_bitmap, dst_bitmap, src_x, src_y, width, height,
+ dst_x, dst_y);
+ else
+ {
+ /* draw background */
+ BlitBitmap(gfx.background_bitmap, dst_bitmap,
+ dst_x - gfx.real_sx, dst_y - gfx.real_sy, width, height,
+ dst_x, dst_y);
+
+ /* draw foreground */
+ SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc,
+ dst_x - src_x, dst_y - src_y);
+ BlitBitmapMasked(src_bitmap, dst_bitmap, src_x, src_y, width, height,
+ dst_x, dst_y);
+ }
+}
+
inline void DrawSimpleWhiteLine(Bitmap *bitmap, int from_x, int from_y,
int to_x, int to_y)
{
if (bitmap->width != new_bitmap->width ||
bitmap->height != new_bitmap->height)
{
- Error(ERR_WARN, "ReloadCustomImage: new image has wrong dimensions");
+ Error(ERR_WARN, "ReloadCustomImage: new image '%s' has wrong dimensions",
+ filename);
FreeBitmap(new_bitmap);
return;
}