g_hash_table_insert(self->cache->table, (*list)[0], self);
#ifdef DEBUG
- g_message("Adding %s picture to the cache:\n "
- "Image 0x%x, w %d h %d Hash %u\n",
- (*list == self->original ? "ORIGINAL" : "RESIZED"),
- (guint)self, pic->width, pic->height, RrImagePicHash(pic));
+ g_debug("Adding %s picture to the cache:\n "
+ "Image 0x%x, w %d h %d Hash %u",
+ (*list == self->original ? "ORIGINAL" : "RESIZED"),
+ (guint)self, pic->width, pic->height, RrImagePicHash(pic));
#endif
}
gint j;
#ifdef DEBUG
- g_message("Removing %s picture from the cache:\n "
- "Image 0x%x, w %d h %d Hash %u\n",
- (*list == self->original ? "ORIGINAL" : "RESIZED"),
- (guint)self, (*list)[i]->width, (*list)[i]->height,
- RrImagePicHash((*list)[i]));
+ g_debug("Removing %s picture from the cache:\n "
+ "Image 0x%x, w %d h %d Hash %u",
+ (*list == self->original ? "ORIGINAL" : "RESIZED"),
+ (guint)self, (*list)[i]->width, (*list)[i]->height,
+ RrImagePicHash((*list)[i]));
#endif
/* remove the picture as a key in the cache */
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));
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);
DrawRGBA(target, target_w, target_h,
scaled->data, scaled->width, scaled->height,
rgba->alpha, area);
+ RrImagePicFree(scaled);
}
else
DrawRGBA(target, target_w, target_h,
{
if (self && --self->ref == 0) {
#ifdef DEBUG
- g_message("Refcount to 0, removing ALL pictures from the cache:\n "
- "Image 0x%x\n", (guint)self);
+ g_debug("Refcount to 0, removing ALL pictures from the cache:\n "
+ "Image 0x%x", (guint)self);
#endif
while (self->n_original > 0)
RemovePicture(self, &self->original, 0, &self->n_original);
for (i = 0; i < self->n_original; ++i)
if (self->original[i]->width == w && self->original[i]->height == h) {
#ifdef DEBUG
- g_message("Found duplicate ORIGINAL image:\n "
- "Image 0x%x, w %d h %d\n", (guint)self, w, h);
+ g_debug("Found duplicate ORIGINAL image:\n "
+ "Image 0x%x, w %d h %d", (guint)self, w, h);
#endif
return;
}