]> Dogcows Code - chaz/openbox/blobdiff - render/image.c
Pointers are long-sized on x86_64.
[chaz/openbox] / render / image.c
index f6d70ee9a4ee9db62840a3b994340cee680aaebb..fc30714e8f9a7fb13ab97f55c8bed6f4b9ab4ab8 100644 (file)
@@ -75,9 +75,9 @@ static void AddPicture(RrImage *self, RrImagePic ***list, gint *len,
 
 #ifdef DEBUG
     g_debug("Adding %s picture to the cache:\n    "
-            "Image 0x%x, w %d h %d Hash %u",
+            "Image 0x%lx, w %d h %d Hash %u",
             (*list == self->original ? "ORIGINAL" : "RESIZED"),
-            (guint)self, pic->width, pic->height, RrImagePicHash(pic));
+            (gulong)self, pic->width, pic->height, RrImagePicHash(pic));
 #endif
 }
 
@@ -90,9 +90,9 @@ static void RemovePicture(RrImage *self, RrImagePic ***list,
 
 #ifdef DEBUG
     g_debug("Removing %s picture from the cache:\n    "
-            "Image 0x%x, w %d h %d Hash %u",
+            "Image 0x%lx, w %d h %d Hash %u",
             (*list == self->original ? "ORIGINAL" : "RESIZED"),
-            (guint)self, (*list)[i]->width, (*list)[i]->height,
+            (gulong)self, (*list)[i]->width, (*list)[i]->height,
             RrImagePicHash((*list)[i]));
 #endif
 
@@ -124,6 +124,12 @@ static RrImagePic* ResizeImage(RrPixel32 *src,
     gulong ratioX, ratioY;
     gulong aspectW, aspectH;
 
+    /* XXX should these variables be ensured to not be zero in the callers? */
+    srcW = srcW ? srcW : 1;
+    srcH = srcH ? srcH : 1;
+    dstW = dstW ? dstW : 1;
+    dstH = dstH ? dstH : 1;
+
     /* keep the aspect ratio */
     aspectW = dstW;
     aspectH = (gint)(dstW * ((gdouble)srcH / srcW));
@@ -131,11 +137,11 @@ static RrImagePic* ResizeImage(RrPixel32 *src,
         aspectH = dstH;
         aspectW = (gint)(dstH * ((gdouble)srcW / srcH));
     }
-    dstW = aspectW;
-    dstH = aspectH;
+    dstW = aspectW ? aspectW : 1;
+    dstH = aspectH ? aspectH : 1;
 
     if (srcW == dstW && srcH == dstH)
-        return NULL; /* no scaling needed ! */
+        return NULL; /* no scaling needed! */
 
     dststart = dst = g_new(RrPixel32, dstW * dstH);
 
@@ -294,6 +300,7 @@ void RrImageDrawRGBA(RrPixel32 *target, RrTextureRGBA *rgba,
             DrawRGBA(target, target_w, target_h,
                      scaled->data, scaled->width, scaled->height,
                      rgba->alpha, area);
+            RrImagePicFree(scaled);
     }
     else
         DrawRGBA(target, target_w, target_h,
@@ -324,7 +331,7 @@ void RrImageUnref(RrImage *self)
     if (self && --self->ref == 0) {
 #ifdef DEBUG
         g_debug("Refcount to 0, removing ALL pictures from the cache:\n    "
-                "Image 0x%x", (guint)self);
+                "Image 0x%lx", (gulong)self);
 #endif
         while (self->n_original > 0)
             RemovePicture(self, &self->original, 0, &self->n_original);
@@ -347,7 +354,7 @@ void RrImageAddPicture(RrImage *self, RrPixel32 *data, gint w, gint h)
         if (self->original[i]->width == w && self->original[i]->height == h) {
 #ifdef DEBUG
             g_debug("Found duplicate ORIGINAL image:\n    "
-                    "Image 0x%x, w %d h %d", (guint)self, w, h);
+                    "Image 0x%lx, w %d h %d", (gulong)self, w, h);
 #endif
             return;
         }
This page took 0.025037 seconds and 4 git commands to generate.