summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2009-12-09 14:59:18 -0500
committerDana Jansens <danakj@orodu.net>2009-12-09 15:09:22 -0500
commit7a926bb82fc724b3a1b50a385b4040ab7fee6878 (patch)
treecb1fbb61303ddc5b586f99f9c7e3ffb97fd1fcc9
parent543828c23f36315e27516a88b7bd0bc8998e741c (diff)
Find a valid image to use in the image cache. Fixes bug #1149
The larger of the width and height has to match. If the smaller matches, then it would have to be resized down to fit inside the area, so that does not count.
-rw-r--r--render/image.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/render/image.c b/render/image.c
index 96486437..c8e839ce 100644
--- a/render/image.c
+++ b/render/image.c
@@ -221,7 +221,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,
@@ -405,11 +405,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 +419,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;