+ Bitmap swap_bitmap;
+ Bitmap *new_bitmap, *tmp_bitmap_1, *tmp_bitmap_2, *tmp_bitmap_4,*tmp_bitmap_8;
+ int width_1, height_1, width_2, height_2, width_4, height_4, width_8,height_8;
+ int new_width, new_height;
+
+ /* calculate new image dimensions for normal sized image */
+ width_1 = old_bitmap->width * zoom_factor;
+ height_1 = old_bitmap->height * zoom_factor;
+
+ /* get image with normal size (this might require scaling up) */
+ if (zoom_factor != 1)
+ tmp_bitmap_1 = ZoomBitmap(old_bitmap, width_1, height_1);
+ else
+ tmp_bitmap_1 = old_bitmap;
+
+ /* this is only needed to make compilers happy */
+ tmp_bitmap_2 = tmp_bitmap_4 = tmp_bitmap_8 = NULL;
+
+ if (create_small_bitmaps)
+ {
+ /* calculate new image dimensions for small images */
+ width_2 = width_1 / 2;
+ height_2 = height_1 / 2;
+ width_4 = width_1 / 4;
+ height_4 = height_1 / 4;
+ width_8 = width_1 / 8;
+ height_8 = height_1 / 8;
+
+ /* get image with 1/2 of normal size (for use in the level editor) */
+ if (zoom_factor != 2)
+ tmp_bitmap_2 = ZoomBitmap(tmp_bitmap_1, width_1 / 2, height_1 / 2);
+ else
+ tmp_bitmap_2 = old_bitmap;
+
+ /* get image with 1/4 of normal size (for use in the level editor) */
+ if (zoom_factor != 4)
+ tmp_bitmap_4 = ZoomBitmap(tmp_bitmap_2, width_2 / 2, height_2 / 2);
+ else
+ tmp_bitmap_4 = old_bitmap;
+
+ /* get image with 1/8 of normal size (for use on the preview screen) */
+ if (zoom_factor != 8)
+ tmp_bitmap_8 = ZoomBitmap(tmp_bitmap_4, width_4 / 2, height_4 / 2);
+ else
+ tmp_bitmap_8 = old_bitmap;
+ }
+
+ /* if image was scaled up, create new clipmask for normal size image */
+ if (zoom_factor != 1)
+ {
+#if defined(TARGET_X11)
+ if (old_bitmap->clip_mask)
+ XFreePixmap(display, old_bitmap->clip_mask);
+
+ old_bitmap->clip_mask =
+ Pixmap_to_Mask(tmp_bitmap_1->drawable, width_1, height_1);
+
+ XSetClipMask(display, old_bitmap->stored_clip_gc, old_bitmap->clip_mask);
+#else
+ SDL_Surface *tmp_surface_1 = tmp_bitmap_1->surface;
+
+ if (old_bitmap->surface_masked)
+ SDL_FreeSurface(old_bitmap->surface_masked);
+
+ SDL_SetColorKey(tmp_surface_1, SDL_SRCCOLORKEY,
+ SDL_MapRGB(tmp_surface_1->format, 0x00, 0x00, 0x00));
+ if ((old_bitmap->surface_masked = SDL_DisplayFormat(tmp_surface_1)) ==NULL)
+ Error(ERR_EXIT, "SDL_DisplayFormat() failed");
+ SDL_SetColorKey(tmp_surface_1, 0, 0); /* reset transparent pixel */
+#endif
+ }