X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=render%2Fimage.c;h=fc30714e8f9a7fb13ab97f55c8bed6f4b9ab4ab8;hb=44df758d6b7a0f268118275cfc44b885f83f784c;hp=c7452fceeb263aee3abff0b4d038008869dedd9d;hpb=ceb77efdd44e993b1ed4e9d908f93baf22b2b22c;p=chaz%2Fopenbox diff --git a/render/image.c b/render/image.c index c7452fce..fc30714e 100644 --- a/render/image.c +++ b/render/image.c @@ -74,10 +74,10 @@ static void AddPicture(RrImage *self, RrImagePic ***list, gint *len, 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%lx, w %d h %d Hash %u", + (*list == self->original ? "ORIGINAL" : "RESIZED"), + (gulong)self, pic->width, pic->height, RrImagePicHash(pic)); #endif } @@ -89,11 +89,11 @@ static void RemovePicture(RrImage *self, RrImagePic ***list, 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%lx, w %d h %d Hash %u", + (*list == self->original ? "ORIGINAL" : "RESIZED"), + (gulong)self, (*list)[i]->width, (*list)[i]->height, + RrImagePicHash((*list)[i])); #endif /* remove the picture as a key in the cache */ @@ -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, @@ -323,8 +330,8 @@ void RrImageUnref(RrImage *self) { 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%lx", (gulong)self); #endif while (self->n_original > 0) RemovePicture(self, &self->original, 0, &self->n_original); @@ -346,8 +353,8 @@ void RrImageAddPicture(RrImage *self, RrPixel32 *data, gint w, gint h) 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%lx, w %d h %d", (gulong)self, w, h); #endif return; }