if (pic) {
g_free(pic->data);
g_free(pic->name);
- g_free(pic);
+ g_slice_free(RrImagePic, pic);
}
}
}
}
- pic = g_new(RrImagePic, 1);
+ pic = g_slice_new(RrImagePic);
RrImagePicInit(pic, NULL, dstW, dstH, dststart);
return pic;
g_assert(cache != NULL);
- self = g_new0(RrImage, 1);
+ self = g_slice_new0(RrImage);
self->ref = 1;
self->cache = cache;
return self;
RemovePicture(self, &self->original, 0, &self->n_original);
while (self->n_resized > 0)
RemovePicture(self, &self->resized, 0, &self->n_resized);
- g_free(self);
+ g_slice_free(RrImage, self);
}
}
}
/* add the new picture */
- pic = g_new(RrImagePic, 1);
+ pic = g_slice_new(RrImagePic);
RrImagePicInit(pic, name, w, h, g_memdup(data, w*h*sizeof(RrPixel32)));
AddPicture(self, &self->original, &self->n_original, pic);
}
/* our size difference metric.. */
wdiff = self->original[i]->width - area->width;
+ if (wdiff < 0) wdiff *= 2; /* prefer scaling down than up */
hdiff = self->original[i]->height - area->height;
+ if (hdiff < 0) hdiff *= 2; /* prefer scaling down than up */
diff = (wdiff * wdiff) + (hdiff * hdiff);
/* find the smallest difference */