(color->blue >> 8);
}
+static pixman_image_t *image_cache;
+
+static pixman_image_t *
+new_image (void)
+{
+ pixman_image_t *image;
+
+ if (image_cache)
+ {
+ image = image_cache;
+ image_cache = image->next;
+ }
+ else
+ {
+ image = malloc (sizeof (pixman_image_t));
+ }
+
+ return image;
+}
+
+static void
+delete_image (pixman_image_t *image)
+{
+ image->next = image_cache;
+ image_cache = image;
+}
+
static pixman_image_t *
allocate_image (void)
{
- pixman_image_t *image = malloc (sizeof (pixman_image_t));
+ pixman_image_t *image = new_image();
if (image)
{
if (image->type == BITS && image->bits.free_me)
free (image->bits.free_me);
- free (image);
+ delete_image (image);
}
}
conical_gradient_t conical;
radial_gradient_t radial;
solid_fill_t solid;
+ pixman_image_t *next; /* Used in the image cache */
};
#define LOG2_BITMAP_PAD 5