X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Fimage.c;h=924504fdf9c1e3a8973191852a40ce854c71179e;hb=50d662681160c309ea86268c0d05794b87b75593;hp=0ab213747acd4a6c105e90ce9635732b8ca96e26;hpb=90cecafa3de2f118e550622932d1d30266c71226;p=chaz%2Fopenbox diff --git a/render/image.c b/render/image.c index 0ab21374..924504fd 100644 --- a/render/image.c +++ b/render/image.c @@ -73,12 +73,14 @@ static void AddPicture(RrImage *self, RrImagePic ***list, gint *len, /* add the picture as a key to point to this image in the cache */ g_hash_table_insert(self->cache->table, (*list)[0], self); +/* #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 +*/ } /*! Remove a picture from an Image. This may remove it from the "originals" @@ -88,13 +90,15 @@ static void RemovePicture(RrImage *self, RrImagePic ***list, { gint j; +/* #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 +*/ /* remove the picture as a key in the cache */ g_hash_table_remove(self->cache->table, (*list)[i]); @@ -221,7 +225,7 @@ static RrImagePic* ResizeImage(RrPixel32 *src, return pic; } -/*! This drawns an RGBA picture into the target, within the rectangle specified +/*! This draws an RGBA picture into the target, within the rectangle specified by the area parameter. If the area's size differs from the source's then it will be centered within the rectangle */ void DrawRGBA(RrPixel32 *target, gint target_w, gint target_h, @@ -329,10 +333,12 @@ void RrImageRef(RrImage *self) 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); while (self->n_resized > 0) @@ -352,10 +358,12 @@ void RrImageAddPicture(RrImage *self, RrPixel32 *data, gint w, gint h) /* make sure we don't already have this size.. */ for (i = 0; i < self->n_original; ++i) 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; } @@ -405,11 +413,13 @@ void RrImageDrawImage(RrPixel32 *target, RrTextureImage *img, pic = NULL; free_pic = FALSE; - /* is there an original of this size? (only w or h has to be right cuz - we maintain aspect ratios) */ + /* is there an original of this size? (only the larger of + w or h has to be right cuz we maintain aspect ratios) */ for (i = 0; i < self->n_original; ++i) - if (self->original[i]->width == area->width || - self->original[i]->height == area->height) + if ((self->original[i]->width >= self->original[i]->height && + self->original[i]->width == area->width) || + (self->original[i]->width <= self->original[i]->height && + self->original[i]->height == area->height)) { pic = self->original[i]; break; @@ -417,8 +427,10 @@ void RrImageDrawImage(RrPixel32 *target, RrTextureImage *img, /* is there a resize of this size? */ for (i = 0; i < self->n_resized; ++i) - if (self->resized[i]->width == area->width || - self->resized[i]->height == area->height) + if ((self->resized[i]->width >= self->resized[i]->height && + self->resized[i]->width == area->width) || + (self->resized[i]->width <= self->resized[i]->height && + self->resized[i]->height == area->height)) { gint j; RrImagePic *saved;