fixed preview size of intermission levels for native BD level sets
[rocksndiamonds.git] / src / tools.c
index c271314e406df9222193be7e68343322a07014f3..537a0e2174e860ad0cefe01ac9a70e8df5d374ae 100644 (file)
@@ -3465,11 +3465,27 @@ void DrawMiniLevel(int size_x, int size_y, int scroll_x, int scroll_y)
   redraw_mask |= REDRAW_FIELD;
 }
 
+static int getPreviewLevelWidth(void)
+{
+  if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+    return (level.native_bd_level->cave->x2 - level.native_bd_level->cave->x1 + 1);
+
+  return lev_fieldx;
+}
+
+static int getPreviewLevelHeight(void)
+{
+  if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+    return (level.native_bd_level->cave->y2 - level.native_bd_level->cave->y1 + 1);
+
+  return lev_fieldy;
+}
+
 static void DrawPreviewLevelPlayfield(int from_x, int from_y)
 {
   boolean show_level_border = (BorderElement != EL_EMPTY);
-  int level_xsize = lev_fieldx + (show_level_border ? 2 : 0);
-  int level_ysize = lev_fieldy + (show_level_border ? 2 : 0);
+  int level_xsize = getPreviewLevelWidth()  + (show_level_border ? 2 : 0);
+  int level_ysize = getPreviewLevelHeight() + (show_level_border ? 2 : 0);
   int tile_size = preview.tile_size;
   int preview_width  = preview.xsize * tile_size;
   int preview_height = preview.ysize * tile_size;
@@ -3838,15 +3854,17 @@ static void PreparePreviewTileBitmap(void)
   int scale_down_factor = original_tilesize / preview.tile_size;
   Bitmap *src_bitmap;
   int src_x, src_y;
-  int element = EL_BD_ROCK;
-  int graphic = el2preimg(element);
+  int element_template = EL_BD_GAME_GRAPHICS_COLOR_TEMPLATE;
+  int graphic_template = el2preimg(element_template);
+  int element_default = EL_BD_ROCK;
+  int graphic_default = el2preimg(element_default);
 
   // create special preview bitmap and scale it down to preview tile size
-  getSizedGraphicSource(graphic, 0, original_tilesize, &src_bitmap, &src_x, &src_y);
+  getSizedGraphicSource(graphic_template, 0, original_tilesize, &src_bitmap, &src_x, &src_y);
   PreparePreviewTileBitmap_BD(src_bitmap, scale_down_factor);
 
   // force using special preview bitmap to replace original preview bitmap
-  getSizedGraphicSource(graphic, 0, preview.tile_size, &src_bitmap, &src_x, &src_y);
+  getSizedGraphicSource(graphic_default, 0, preview.tile_size, &src_bitmap, &src_x, &src_y);
   SetPreviewTileBitmapReference_BD(src_bitmap);
 }
 
@@ -10155,6 +10173,20 @@ void InitGraphicInfo_BD(void)
       g_bd->height = TILEY;
     }
   }
+
+  // game graphics template for level-specific colors for native BD levels
+  int graphic = IMG_BD_GAME_GRAPHICS_COLOR_TEMPLATE;
+  struct GraphicInfo_BD *g_bd = &graphic_info_bd_color_template;
+  Bitmap *src_bitmap;
+  int src_x, src_y;
+
+  getGraphicSourceExt(graphic, 0, &src_bitmap, &src_x, &src_y, FALSE);
+
+  g_bd->bitmap = src_bitmap;
+  g_bd->src_x  = src_x;
+  g_bd->src_y  = src_y;
+  g_bd->width  = TILEX;
+  g_bd->height = TILEY;
 }
 
 void InitGraphicInfo_EM(void)