|
|
b2ba33 |
--- libgxps-0.3.0/libgxps/gxps-brush.c
|
|
|
b2ba33 |
+++ libgxps-0.3.0/libgxps/gxps-brush.c
|
|
|
5cd71d |
@@ -965,7 +965,7 @@ brush_end_element (GMarkupParseContext
|
|
|
5cd71d |
g_markup_parse_context_pop (context);
|
|
|
5cd71d |
} else if (strcmp (element_name, "ImageBrush") == 0) {
|
|
|
5cd71d |
GXPSBrushImage *brush_image;
|
|
|
5cd71d |
- GXPSImage *image;
|
|
|
5cd71d |
+ cairo_surface_t *image;
|
|
|
5cd71d |
GError *err = NULL;
|
|
|
5cd71d |
|
|
|
5cd71d |
brush_image = g_markup_parse_context_pop (context);
|
|
|
5cd71d |
@@ -976,14 +976,20 @@ brush_end_element (GMarkupParseContext
|
|
|
5cd71d |
cairo_matrix_t matrix;
|
|
|
5cd71d |
gdouble x_scale, y_scale;
|
|
|
5cd71d |
cairo_surface_t *clip_surface;
|
|
|
5cd71d |
+ double *res_x, *res_y;
|
|
|
5cd71d |
|
|
|
5cd71d |
- /* viewbox units is 1/96 inch, convert to pixels */
|
|
|
5cd71d |
- brush_image->viewbox.x *= image->res_x / 96;
|
|
|
5cd71d |
- brush_image->viewbox.y *= image->res_y / 96;
|
|
|
5cd71d |
- brush_image->viewbox.width *= image->res_x / 96;
|
|
|
5cd71d |
- brush_image->viewbox.height *= image->res_y / 96;
|
|
|
5cd71d |
+ res_x = cairo_surface_get_user_data (image, (const cairo_user_data_key_t *) 0x1);
|
|
|
5cd71d |
+ res_y = cairo_surface_get_user_data (image, (const cairo_user_data_key_t *) 0x2);
|
|
|
5cd71d |
|
|
|
5cd71d |
- clip_surface = cairo_surface_create_for_rectangle (image->surface,
|
|
|
5cd71d |
+ if (res_x != NULL && res_y != NULL) {
|
|
|
5cd71d |
+ /* viewbox units is 1/96 inch, convert to pixels */
|
|
|
5cd71d |
+ brush_image->viewbox.x *= *res_x / 96;
|
|
|
5cd71d |
+ brush_image->viewbox.y *= *res_y / 96;
|
|
|
5cd71d |
+ brush_image->viewbox.width *= *res_x / 96;
|
|
|
5cd71d |
+ brush_image->viewbox.height *= *res_y / 96;
|
|
|
5cd71d |
+ }
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+ clip_surface = cairo_surface_create_for_rectangle (image,
|
|
|
5cd71d |
brush_image->viewbox.x,
|
|
|
5cd71d |
brush_image->viewbox.y,
|
|
|
5cd71d |
brush_image->viewbox.width,
|
|
|
b2ba33 |
--- libgxps-0.3.0/libgxps/gxps-images.c
|
|
|
b2ba33 |
+++ libgxps-0.3.0/libgxps/gxps-images.c
|
|
|
5cd71d |
@@ -88,6 +88,45 @@ multiply_alpha (int alpha, int color)
|
|
|
5cd71d |
return ((temp + (temp >> 8)) >> 8);
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
+static void
|
|
|
5cd71d |
+image_set_res_x (cairo_surface_t *image,
|
|
|
5cd71d |
+ double res_x)
|
|
|
5cd71d |
+{
|
|
|
5cd71d |
+ double *x;
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+ x = g_new (double, 1);
|
|
|
5cd71d |
+ *x = res_x;
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+ cairo_surface_set_user_data (image,
|
|
|
5cd71d |
+ (const cairo_user_data_key_t *) 0x1,
|
|
|
5cd71d |
+ x,
|
|
|
5cd71d |
+ (cairo_destroy_func_t) g_free);
|
|
|
5cd71d |
+}
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+static void
|
|
|
5cd71d |
+image_set_res_y (cairo_surface_t *image,
|
|
|
5cd71d |
+ double res_y)
|
|
|
5cd71d |
+{
|
|
|
5cd71d |
+ double *y;
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+ y = g_new (double, 1);
|
|
|
5cd71d |
+ *y = res_y;
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+ cairo_surface_set_user_data (image,
|
|
|
5cd71d |
+ (const cairo_user_data_key_t *) 0x2,
|
|
|
5cd71d |
+ y,
|
|
|
5cd71d |
+ (cairo_destroy_func_t) g_free);
|
|
|
5cd71d |
+}
|
|
|
5cd71d |
+
|
|
|
5cd71d |
+static void
|
|
|
5cd71d |
+image_set_res (cairo_surface_t *image,
|
|
|
5cd71d |
+ double res_x,
|
|
|
5cd71d |
+ double res_y)
|
|
|
5cd71d |
+{
|
|
|
5cd71d |
+ image_set_res_x (image, res_x);
|
|
|
5cd71d |
+ image_set_res_y (image, res_y);
|
|
|
5cd71d |
+}
|
|
|
5cd71d |
+
|
|
|
5cd71d |
/* Premultiplies data and converts RGBA bytes => native endian
|
|
|
5cd71d |
* From cairo's cairo-png.c <http://cairographics.org> */
|
|
|
5cd71d |
static void
|
|
|
5cd71d |
@@ -163,14 +202,14 @@ fill_png_error (GError **error,
|
|
|
5cd71d |
|
|
|
5cd71d |
/* Adapted from cairo's read_png in cairo-png.c
|
|
|
5cd71d |
* http://cairographics.org/ */
|
|
|
5cd71d |
-static GXPSImage *
|
|
|
5cd71d |
+static cairo_surface_t *
|
|
|
5cd71d |
gxps_images_create_from_png (GXPSArchive *zip,
|
|
|
5cd71d |
const gchar *image_uri,
|
|
|
5cd71d |
GError **error)
|
|
|
5cd71d |
{
|
|
|
5cd71d |
#ifdef HAVE_LIBPNG
|
|
|
5cd71d |
GInputStream *stream;
|
|
|
5cd71d |
- GXPSImage *image = NULL;
|
|
|
5cd71d |
+ cairo_surface_t *image = NULL;
|
|
|
5cd71d |
char *png_err_msg = NULL;
|
|
|
5cd71d |
png_struct *png;
|
|
|
5cd71d |
png_info *info;
|
|
|
5cd71d |
@@ -181,6 +220,7 @@ gxps_images_create_from_png (GXPSArchive
|
|
|
5cd71d |
unsigned int i;
|
|
|
5cd71d |
cairo_format_t format;
|
|
|
5cd71d |
cairo_status_t status;
|
|
|
5cd71d |
+ double res_x, res_y;
|
|
|
5cd71d |
|
|
|
5cd71d |
stream = gxps_archive_open (zip, image_uri);
|
|
|
5cd71d |
if (!stream) {
|
|
|
5cd71d |
@@ -217,7 +257,7 @@ gxps_images_create_from_png (GXPSArchive
|
|
|
5cd71d |
g_free (png_err_msg);
|
|
|
5cd71d |
g_object_unref (stream);
|
|
|
5cd71d |
png_destroy_read_struct (&png, &info, NULL);
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
g_free (row_pointers);
|
|
|
5cd71d |
g_free (data);
|
|
|
5cd71d |
return NULL;
|
|
|
b2ba33 |
@@ -295,13 +335,12 @@ gxps_images_create_from_png (GXPSArchive
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- image = g_slice_new0 (GXPSImage);
|
|
|
5cd71d |
- image->res_x = png_get_x_pixels_per_meter (png, info) * METERS_PER_INCH;
|
|
|
5cd71d |
- if (image->res_x == 0)
|
|
|
5cd71d |
- image->res_x = 96;
|
|
|
5cd71d |
- image->res_y = png_get_y_pixels_per_meter (png, info) * METERS_PER_INCH;
|
|
|
5cd71d |
- if (image->res_y == 0)
|
|
|
5cd71d |
- image->res_y = 96;
|
|
|
5cd71d |
+ res_x = png_get_x_pixels_per_meter (png, info) * METERS_PER_INCH;
|
|
|
5cd71d |
+ if (res_x == 0)
|
|
|
5cd71d |
+ res_x = 96;
|
|
|
5cd71d |
+ res_y = png_get_y_pixels_per_meter (png, info) * METERS_PER_INCH;
|
|
|
5cd71d |
+ if (res_y == 0)
|
|
|
5cd71d |
+ res_y = 96;
|
|
|
5cd71d |
|
|
|
5cd71d |
data = g_malloc (png_height * stride);
|
|
|
5cd71d |
row_pointers = g_new (png_byte *, png_height);
|
|
|
b2ba33 |
@@ -315,23 +354,25 @@ gxps_images_create_from_png (GXPSArchive
|
|
|
5cd71d |
g_object_unref (stream);
|
|
|
5cd71d |
g_free (row_pointers);
|
|
|
5cd71d |
|
|
|
5cd71d |
- image->surface = cairo_image_surface_create_for_data (data, format,
|
|
|
5cd71d |
- png_width, png_height,
|
|
|
5cd71d |
- stride);
|
|
|
5cd71d |
- if (cairo_surface_status (image->surface)) {
|
|
|
5cd71d |
+ image = cairo_image_surface_create_for_data (data, format,
|
|
|
5cd71d |
+ png_width, png_height,
|
|
|
5cd71d |
+ stride);
|
|
|
5cd71d |
+ if (cairo_surface_status (image)) {
|
|
|
5cd71d |
fill_png_error (error, image_uri, NULL);
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
g_free (data);
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- status = cairo_surface_set_user_data (image->surface,
|
|
|
b2ba33 |
+ image_set_res (image, res_x, res_y);
|
|
|
b2ba33 |
+
|
|
|
5cd71d |
+ status = cairo_surface_set_user_data (image,
|
|
|
5cd71d |
&image_data_cairo_key,
|
|
|
5cd71d |
data,
|
|
|
5cd71d |
(cairo_destroy_func_t) g_free);
|
|
|
5cd71d |
if (status) {
|
|
|
5cd71d |
fill_png_error (error, image_uri, NULL);
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
g_free (data);
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
@@ -423,7 +463,7 @@ _jpeg_error_exit (j_common_ptr error)
|
|
|
5cd71d |
}
|
|
|
5cd71d |
#endif /* HAVE_LIBJPEG */
|
|
|
5cd71d |
|
|
|
5cd71d |
-static GXPSImage *
|
|
|
5cd71d |
+static cairo_surface_t *
|
|
|
5cd71d |
gxps_images_create_from_jpeg (GXPSArchive *zip,
|
|
|
5cd71d |
const gchar *image_uri,
|
|
|
5cd71d |
GError **error)
|
|
|
5cd71d |
@@ -433,7 +473,7 @@ gxps_images_create_from_jpeg (GXPSArchiv
|
|
|
5cd71d |
struct jpeg_error_mgr error_mgr;
|
|
|
5cd71d |
struct jpeg_decompress_struct cinfo;
|
|
|
5cd71d |
struct _jpeg_src_mgr src;
|
|
|
5cd71d |
- GXPSImage *image;
|
|
|
5cd71d |
+ cairo_surface_t *image;
|
|
|
5cd71d |
guchar *data;
|
|
|
5cd71d |
gint stride;
|
|
|
5cd71d |
JSAMPARRAY lines;
|
|
|
5cd71d |
@@ -484,28 +524,26 @@ gxps_images_create_from_jpeg (GXPSArchiv
|
|
|
5cd71d |
cinfo.do_fancy_upsampling = FALSE;
|
|
|
5cd71d |
jpeg_start_decompress (&cinfo);
|
|
|
5cd71d |
|
|
|
5cd71d |
- image = g_slice_new (GXPSImage);
|
|
|
5cd71d |
- image->surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
|
|
|
5cd71d |
- cinfo.output_width,
|
|
|
5cd71d |
- cinfo.output_height);
|
|
|
5cd71d |
- image->res_x = 96;
|
|
|
5cd71d |
- image->res_y = 96;
|
|
|
5cd71d |
- if (cairo_surface_status (image->surface)) {
|
|
|
5cd71d |
+ image = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
|
|
|
5cd71d |
+ cinfo.output_width,
|
|
|
5cd71d |
+ cinfo.output_height);
|
|
|
5cd71d |
+ image_set_res (image, 96, 96);
|
|
|
5cd71d |
+ if (cairo_surface_status (image)) {
|
|
|
5cd71d |
g_set_error (error,
|
|
|
5cd71d |
GXPS_ERROR,
|
|
|
5cd71d |
GXPS_ERROR_IMAGE,
|
|
|
5cd71d |
"Error loading JPEG image %s: %s",
|
|
|
5cd71d |
image_uri,
|
|
|
5cd71d |
- cairo_status_to_string (cairo_surface_status (image->surface)));
|
|
|
5cd71d |
+ cairo_status_to_string (cairo_surface_status (image)));
|
|
|
5cd71d |
jpeg_destroy_decompress (&cinfo);
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
g_object_unref (stream);
|
|
|
5cd71d |
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- data = cairo_image_surface_get_data (image->surface);
|
|
|
5cd71d |
- stride = cairo_image_surface_get_stride (image->surface);
|
|
|
5cd71d |
+ data = cairo_image_surface_get_data (image);
|
|
|
5cd71d |
+ stride = cairo_image_surface_get_stride (image);
|
|
|
5cd71d |
jpeg_stride = cinfo.output_width * cinfo.out_color_components;
|
|
|
5cd71d |
lines = cinfo.mem->alloc_sarray((j_common_ptr) &cinfo, JPOOL_IMAGE, jpeg_stride, 4);
|
|
|
5cd71d |
|
|
|
5cd71d |
@@ -535,7 +573,7 @@ gxps_images_create_from_jpeg (GXPSArchiv
|
|
|
5cd71d |
GXPS_DEBUG (g_message ("Unsupported jpeg color space %s",
|
|
|
5cd71d |
_jpeg_color_space_name (cinfo.out_color_space)));
|
|
|
5cd71d |
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
jpeg_destroy_decompress (&cinfo);
|
|
|
5cd71d |
g_object_unref (stream);
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
@@ -549,27 +587,25 @@ gxps_images_create_from_jpeg (GXPSArchiv
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
if (cinfo.density_unit == 1) { /* dots/inch */
|
|
|
5cd71d |
- image->res_x = cinfo.X_density;
|
|
|
5cd71d |
- image->res_y = cinfo.Y_density;
|
|
|
5cd71d |
+ image_set_res (image, cinfo.X_density, cinfo.Y_density);
|
|
|
5cd71d |
} else if (cinfo.density_unit == 2) { /* dots/cm */
|
|
|
5cd71d |
- image->res_x = cinfo.X_density * CENTIMETERS_PER_INCH;
|
|
|
5cd71d |
- image->res_y = cinfo.Y_density * CENTIMETERS_PER_INCH;
|
|
|
5cd71d |
+ image_set_res (image, cinfo.X_density * CENTIMETERS_PER_INCH, cinfo.Y_density * CENTIMETERS_PER_INCH);
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
jpeg_finish_decompress (&cinfo);
|
|
|
5cd71d |
jpeg_destroy_decompress (&cinfo);
|
|
|
5cd71d |
g_object_unref (stream);
|
|
|
5cd71d |
|
|
|
5cd71d |
- cairo_surface_mark_dirty (image->surface);
|
|
|
5cd71d |
+ cairo_surface_mark_dirty (image);
|
|
|
5cd71d |
|
|
|
5cd71d |
- if (cairo_surface_status (image->surface)) {
|
|
|
5cd71d |
+ if (cairo_surface_status (image)) {
|
|
|
5cd71d |
g_set_error (error,
|
|
|
5cd71d |
GXPS_ERROR,
|
|
|
5cd71d |
GXPS_ERROR_IMAGE,
|
|
|
5cd71d |
"Error loading JPEG image %s: %s",
|
|
|
5cd71d |
image_uri,
|
|
|
5cd71d |
- cairo_status_to_string (cairo_surface_status (image->surface)));
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_status_to_string (cairo_surface_status (image)));
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
@@ -728,7 +764,7 @@ _tiff_unmap_file (thandle_t handle,
|
|
|
5cd71d |
}
|
|
|
5cd71d |
#endif /* #ifdef HAVE_LIBTIFF */
|
|
|
5cd71d |
|
|
|
5cd71d |
-static GXPSImage *
|
|
|
5cd71d |
+static cairo_surface_t *
|
|
|
5cd71d |
gxps_images_create_from_tiff (GXPSArchive *zip,
|
|
|
5cd71d |
const gchar *image_uri,
|
|
|
5cd71d |
GError **error)
|
|
|
5cd71d |
@@ -736,7 +772,7 @@ gxps_images_create_from_tiff (GXPSArchiv
|
|
|
5cd71d |
#ifdef HAVE_LIBTIFF
|
|
|
5cd71d |
TIFF *tiff;
|
|
|
5cd71d |
TiffBuffer buffer;
|
|
|
5cd71d |
- GXPSImage *image;
|
|
|
5cd71d |
+ cairo_surface_t *image;
|
|
|
5cd71d |
gint width, height;
|
|
|
5cd71d |
guint16 res_unit;
|
|
|
5cd71d |
float res_x, res_y;
|
|
|
5cd71d |
@@ -802,49 +838,47 @@ gxps_images_create_from_tiff (GXPSArchiv
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- image = g_slice_new (GXPSImage);
|
|
|
5cd71d |
- image->surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
|
|
|
5cd71d |
- width, height);
|
|
|
5cd71d |
- image->res_x = 96;
|
|
|
5cd71d |
- image->res_y = 96;
|
|
|
5cd71d |
+ image = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
|
|
|
5cd71d |
+ width, height);
|
|
|
5cd71d |
+ image_set_res (image, 96, 96);
|
|
|
5cd71d |
|
|
|
5cd71d |
if (!TIFFGetField (tiff, TIFFTAG_RESOLUTIONUNIT, &res_unit))
|
|
|
5cd71d |
res_unit = 0;
|
|
|
5cd71d |
if (TIFFGetField (tiff, TIFFTAG_XRESOLUTION, &res_x)) {
|
|
|
5cd71d |
if (res_unit == 2) { /* inches */
|
|
|
5cd71d |
- image->res_x = res_x;
|
|
|
5cd71d |
+ image_set_res_x (image, res_x);
|
|
|
5cd71d |
} else if (res_unit == 3) { /* centimeters */
|
|
|
5cd71d |
- image->res_x = res_x * CENTIMETERS_PER_INCH;
|
|
|
5cd71d |
+ image_set_res_x (image, res_x * CENTIMETERS_PER_INCH);
|
|
|
5cd71d |
}
|
|
|
5cd71d |
}
|
|
|
5cd71d |
if (TIFFGetField (tiff, TIFFTAG_YRESOLUTION, &res_y)) {
|
|
|
5cd71d |
if (res_unit == 2) { /* inches */
|
|
|
5cd71d |
- image->res_y = res_y;
|
|
|
5cd71d |
+ image_set_res_y (image, res_y);
|
|
|
5cd71d |
} else if (res_unit == 3) { /* centimeters */
|
|
|
5cd71d |
- image->res_y = res_y * CENTIMETERS_PER_INCH;
|
|
|
5cd71d |
+ image_set_res_y (image, res_y * CENTIMETERS_PER_INCH);
|
|
|
5cd71d |
}
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- if (cairo_surface_status (image->surface)) {
|
|
|
5cd71d |
+ if (cairo_surface_status (image)) {
|
|
|
5cd71d |
g_set_error (error,
|
|
|
5cd71d |
GXPS_ERROR,
|
|
|
5cd71d |
GXPS_ERROR_IMAGE,
|
|
|
5cd71d |
"Error loading TIFF image %s: %s",
|
|
|
5cd71d |
image_uri,
|
|
|
5cd71d |
- cairo_status_to_string (cairo_surface_status (image->surface)));
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_status_to_string (cairo_surface_status (image)));
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
TIFFClose (tiff);
|
|
|
5cd71d |
_tiff_pop_handlers ();
|
|
|
5cd71d |
g_free (buffer.buffer);
|
|
|
5cd71d |
return NULL;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- data = cairo_image_surface_get_data (image->surface);
|
|
|
5cd71d |
+ data = cairo_image_surface_get_data (image);
|
|
|
5cd71d |
if (!TIFFReadRGBAImageOriented (tiff, width, height,
|
|
|
5cd71d |
(uint32 *)data,
|
|
|
5cd71d |
ORIENTATION_TOPLEFT, 1) || _tiff_error) {
|
|
|
5cd71d |
fill_tiff_error (error, image_uri);
|
|
|
5cd71d |
- gxps_image_free (image);
|
|
|
5cd71d |
+ cairo_surface_destroy (image);
|
|
|
5cd71d |
TIFFClose (tiff);
|
|
|
5cd71d |
_tiff_pop_handlers ();
|
|
|
5cd71d |
g_free (buffer.buffer);
|
|
|
5cd71d |
@@ -855,7 +889,7 @@ gxps_images_create_from_tiff (GXPSArchiv
|
|
|
5cd71d |
_tiff_pop_handlers ();
|
|
|
5cd71d |
g_free (buffer.buffer);
|
|
|
5cd71d |
|
|
|
5cd71d |
- stride = cairo_image_surface_get_stride (image->surface);
|
|
|
5cd71d |
+ stride = cairo_image_surface_get_stride (image);
|
|
|
5cd71d |
p = data;
|
|
|
5cd71d |
while (p < data + (height * stride)) {
|
|
|
5cd71d |
guint32 *pixel = (guint32 *)p;
|
|
|
5cd71d |
@@ -869,7 +903,7 @@ gxps_images_create_from_tiff (GXPSArchiv
|
|
|
5cd71d |
p += 4;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
- cairo_surface_mark_dirty (image->surface);
|
|
|
5cd71d |
+ cairo_surface_mark_dirty (image);
|
|
|
5cd71d |
|
|
|
5cd71d |
return image;
|
|
|
5cd71d |
#else
|
|
|
5cd71d |
@@ -897,12 +931,12 @@ gxps_images_guess_content_type (GXPSArch
|
|
|
5cd71d |
return mime_type;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
-GXPSImage *
|
|
|
5cd71d |
+cairo_surface_t *
|
|
|
5cd71d |
gxps_images_get_image (GXPSArchive *zip,
|
|
|
5cd71d |
const gchar *image_uri,
|
|
|
5cd71d |
GError **error)
|
|
|
5cd71d |
{
|
|
|
5cd71d |
- GXPSImage *image = NULL;
|
|
|
5cd71d |
+ cairo_surface_t *image = NULL;
|
|
|
5cd71d |
gchar *image_uri_lower;
|
|
|
5cd71d |
|
|
|
5cd71d |
/* First try with extensions,
|
|
|
5cd71d |
@@ -942,15 +976,3 @@ gxps_images_get_image (GXPSArchive *zip,
|
|
|
5cd71d |
|
|
|
5cd71d |
return image;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
-
|
|
|
5cd71d |
-void
|
|
|
5cd71d |
-gxps_image_free (GXPSImage *image)
|
|
|
5cd71d |
-{
|
|
|
5cd71d |
- if (G_UNLIKELY (!image))
|
|
|
5cd71d |
- return;
|
|
|
5cd71d |
-
|
|
|
5cd71d |
- if (G_LIKELY (image->surface))
|
|
|
5cd71d |
- cairo_surface_destroy (image->surface);
|
|
|
5cd71d |
-
|
|
|
5cd71d |
- g_slice_free (GXPSImage, image);
|
|
|
5cd71d |
-}
|
|
|
b2ba33 |
--- libgxps-0.3.0/libgxps/gxps-images.h
|
|
|
b2ba33 |
+++ libgxps-0.3.0/libgxps/gxps-images.h
|
|
|
5cd71d |
@@ -25,18 +25,9 @@
|
|
|
5cd71d |
|
|
|
5cd71d |
G_BEGIN_DECLS
|
|
|
5cd71d |
|
|
|
5cd71d |
-typedef struct _GXPSImage GXPSImage;
|
|
|
5cd71d |
-
|
|
|
5cd71d |
-struct _GXPSImage {
|
|
|
5cd71d |
- cairo_surface_t *surface;
|
|
|
5cd71d |
- double res_x;
|
|
|
5cd71d |
- double res_y;
|
|
|
5cd71d |
-};
|
|
|
5cd71d |
-
|
|
|
5cd71d |
-GXPSImage *gxps_images_get_image (GXPSArchive *zip,
|
|
|
5cd71d |
- const gchar *image_uri,
|
|
|
5cd71d |
- GError **error);
|
|
|
5cd71d |
-void gxps_image_free (GXPSImage *image);
|
|
|
5cd71d |
+cairo_surface_t *gxps_images_get_image (GXPSArchive *zip,
|
|
|
5cd71d |
+ const gchar *image_uri,
|
|
|
5cd71d |
+ GError **error);
|
|
|
5cd71d |
|
|
|
5cd71d |
G_END_DECLS
|
|
|
5cd71d |
|
|
|
b2ba33 |
--- libgxps-0.3.0/libgxps/gxps-page.c
|
|
|
b2ba33 |
+++ libgxps-0.3.0/libgxps/gxps-page.c
|
|
|
5cd71d |
@@ -77,12 +77,12 @@ gxps_page_error_quark (void)
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
/* Images */
|
|
|
5cd71d |
-GXPSImage *
|
|
|
5cd71d |
+cairo_surface_t *
|
|
|
5cd71d |
gxps_page_get_image (GXPSPage *page,
|
|
|
5cd71d |
const gchar *image_uri,
|
|
|
5cd71d |
GError **error)
|
|
|
5cd71d |
{
|
|
|
5cd71d |
- GXPSImage *image;
|
|
|
5cd71d |
+ cairo_surface_t *image;
|
|
|
5cd71d |
|
|
|
5cd71d |
if (page->priv->image_cache) {
|
|
|
5cd71d |
image = g_hash_table_lookup (page->priv->image_cache,
|
|
|
5cd71d |
@@ -99,12 +99,12 @@ gxps_page_get_image (GXPSPage *page,
|
|
|
5cd71d |
page->priv->image_cache = g_hash_table_new_full (g_str_hash,
|
|
|
5cd71d |
g_str_equal,
|
|
|
5cd71d |
(GDestroyNotify)g_free,
|
|
|
5cd71d |
- (GDestroyNotify)gxps_image_free);
|
|
|
5cd71d |
+ (GDestroyNotify)cairo_surface_destroy);
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
5cd71d |
g_hash_table_insert (page->priv->image_cache,
|
|
|
5cd71d |
g_strdup (image_uri),
|
|
|
5cd71d |
- image);
|
|
|
5cd71d |
+ cairo_surface_reference (image));
|
|
|
5cd71d |
return image;
|
|
|
5cd71d |
}
|
|
|
5cd71d |
|
|
|
b2ba33 |
--- libgxps-0.3.0/libgxps/gxps-page-private.h
|
|
|
b2ba33 |
+++ libgxps-0.3.0/libgxps/gxps-page-private.h
|
|
|
5cd71d |
@@ -58,9 +58,9 @@ struct _GXPSRenderContext {
|
|
|
5cd71d |
GXPSBrushVisual *visual;
|
|
|
5cd71d |
};
|
|
|
5cd71d |
|
|
|
5cd71d |
-GXPSImage *gxps_page_get_image (GXPSPage *page,
|
|
|
5cd71d |
- const gchar *image_uri,
|
|
|
5cd71d |
- GError **error);
|
|
|
5cd71d |
+cairo_surface_t *gxps_page_get_image (GXPSPage *page,
|
|
|
5cd71d |
+ const gchar *image_uri,
|
|
|
5cd71d |
+ GError **error);
|
|
|
5cd71d |
void gxps_page_render_parser_push (GMarkupParseContext *context,
|
|
|
5cd71d |
GXPSRenderContext *ctx);
|
|
|
5cd71d |
|