/* add the picture as a key to point to this image in the cache */
g_hash_table_insert(self->cache->table, (*list)[0], self);
/* 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%lx, w %d h %d Hash %u",
(*list == self->original ? "ORIGINAL" : "RESIZED"),
(gulong)self, pic->width, pic->height, RrImagePicHash(pic));
#endif
#ifdef DEBUG
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
#ifdef DEBUG
g_debug("Removing %s picture from the cache:\n "
"Image 0x%lx, w %d h %d Hash %u",
#ifdef DEBUG
g_debug("Removing %s picture from the cache:\n "
"Image 0x%lx, w %d h %d Hash %u",
(gulong)self, (*list)[i]->width, (*list)[i]->height,
RrImagePicHash((*list)[i]));
#endif
(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]);
/* remove the picture as a key in the cache */
g_hash_table_remove(self->cache->table, (*list)[i]);
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,
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,
#ifdef DEBUG
g_debug("Refcount to 0, removing ALL pictures from the cache:\n "
"Image 0x%lx", (gulong)self);
#endif
#ifdef DEBUG
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);
while (self->n_resized > 0)
while (self->n_original > 0)
RemovePicture(self, &self->original, 0, &self->n_original);
while (self->n_resized > 0)
/* 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) {
/* 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%lx, w %d h %d", (gulong)self, w, h);
#endif
#ifdef DEBUG
g_debug("Found duplicate ORIGINAL image:\n "
"Image 0x%lx, w %d h %d", (gulong)self, w, h);
#endif
- /* 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) */
- 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))
- 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))