rnd-20080802-1-src
[rocksndiamonds.git] / src / libgame / image.c
index 7f2577514be688a80619521e7ad16d71d6a71d5a..8ccf1fcbe81350e15ed3502299e481600c109266 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment                      *
+* (c) 1994-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -385,7 +385,7 @@ XImageInfo *Image_to_Pixmap(Display *display, int screen, Visual *visual,
          if (!private_cmap)
          {
            if (options.verbose)
-             Error(ERR_RETURN, "switching to private colormap");
+             Error(ERR_INFO, "switching to private colormap");
 
            /* we just filled up the default colormap -- get a private one
               which contains all already allocated colors */
@@ -486,7 +486,7 @@ XImageInfo *Image_to_Pixmap(Display *display, int screen, Visual *visual,
       break;
   
     default:
-      Error(ERR_RETURN,"DirectColor, TrueColor or PseudoColor display needed");
+      Error(ERR_INFO,"DirectColor, TrueColor or PseudoColor display needed");
       SetError(error, "display class not supported");
 
       return NULL;
@@ -560,7 +560,7 @@ XImageInfo *Image_to_Pixmap(Display *display, int screen, Visual *visual,
        }
 
         default:
-         Error(ERR_RETURN, "RGB or TrueColor image needed");
+         Error(ERR_INFO, "RGB or TrueColor image needed");
          SetError(error, "image type not supported");
 
          return NULL;
@@ -594,7 +594,7 @@ XImageInfo *Image_to_Pixmap(Display *display, int screen, Visual *visual,
     }
 
     default:
-      Error(ERR_RETURN,"DirectColor, TrueColor or PseudoColor display needed");
+      Error(ERR_INFO,"DirectColor, TrueColor or PseudoColor display needed");
       SetError(error, "display class not supported");
 
       return NULL;
@@ -649,7 +649,11 @@ void ZoomPixmap(Display *display, GC gc, Pixmap src_pixmap, Pixmap dst_pixmap,
 
   if (scale_down)
   {
+#if 1
+    zoom_factor = MIN(src_width / dst_width, src_height / dst_height);
+#else
     zoom_factor = src_width / dst_width;
+#endif
 
     /* adjust source image size to integer multiple of destination size */
     src_width  = dst_width  * zoom_factor;
@@ -657,7 +661,11 @@ void ZoomPixmap(Display *display, GC gc, Pixmap src_pixmap, Pixmap dst_pixmap,
   }
   else
   {
+#if 1
+    zoom_factor = MIN(dst_width / src_width, dst_height / src_height);
+#else
     zoom_factor = dst_width / src_width;
+#endif
 
     /* no adjustment needed when scaling up (some pixels may be left blank) */
   }
@@ -1049,6 +1057,19 @@ void CreateImageWithSmallImages(int pos, int zoom_factor)
   img_info->scaled_up = TRUE;
 }
 
+void ScaleImage(int pos, int zoom_factor)
+{
+  ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
+
+  if (img_info == NULL || img_info->scaled_up)
+    return;
+
+  if (zoom_factor != 1)
+    ScaleBitmap(img_info->bitmap, zoom_factor);
+
+  img_info->scaled_up = TRUE;
+}
+
 void FreeAllImages()
 {
   FreeCustomArtworkLists(image_info);