From 6bbfc093885043abdfa18826511ee053e52d08fa Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 14 Oct 2026 18:54:48 +0200 Subject: Fifth commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- image.c | 62 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 29 deletions(-) (limited to 'image.c') diff --git a/image.c b/image.c index d6b8c0c..db27147 100644 --- a/image.c +++ b/image.c @@ -10,56 +10,60 @@ forget_transformed_raster(void) } int -get_image(struct image *image) +get_image(struct image *image_out) { struct file *file = get_file(); + enum transformation t; if (!file || !file->image.raster) forget_transformed_raster(); if (!file) return 0; - image->raster = transformed_raster ? transformed_raster : file->image.raster; - image->vector = (trans & ~7u) ? NULL : file->image.vector; /* TODO implement support for colour manipulation */ - if (swaps_dimensions(trans)) { - image->width = file->image.height; - image->height = file->image.width; - image->has_x_dpi = file->image.has_y_dpi; - image->has_y_dpi = file->image.has_x_dpi; - image->x_dpi = file->image.y_dpi; - image->y_dpi = file->image.x_dpi; + t = apply_embedded_orientation ? multiply_transformations(trans, file->image.embedded_transformation) : trans; + image_out->raster = transformed_raster ? transformed_raster : file->image.raster; + image_out->vector = (t & ~7u) ? NULL : file->image.vector; /* TODO implement support for colour manipulation */ + if (swaps_dimensions(t)) { + image_out->width = file->image.height; + image_out->height = file->image.width; + image_out->has_x_dpi = file->image.has_y_dpi; + image_out->has_y_dpi = file->image.has_x_dpi; + image_out->x_dpi = file->image.y_dpi; + image_out->y_dpi = file->image.x_dpi; } else { - image->width = file->image.width; - image->height = file->image.height; - image->has_x_dpi = file->image.has_x_dpi; - image->has_y_dpi = file->image.has_y_dpi; - image->x_dpi = file->image.x_dpi; - image->y_dpi = file->image.y_dpi; + image_out->width = file->image.width; + image_out->height = file->image.height; + image_out->has_x_dpi = file->image.has_x_dpi; + image_out->has_y_dpi = file->image.has_y_dpi; + image_out->x_dpi = file->image.x_dpi; + image_out->y_dpi = file->image.y_dpi; } - image->has_transformer = get_affine_matrix(&image->transformer, trans, file->image.width, file->image.height); + image_out->embedded_transformation = file->image.embedded_transformation; + image_out->has_transformer = get_affine_matrix(&image_out->transformer, t, file->image.width, file->image.height); /* TODO there is a bug in cairo or rsvg that prevents rendering when the * linear part of the transformation has a negative component */ - if (trans) - image->vector = NULL; + if (t) + image_out->vector = NULL; return 1; } int -get_original_image(struct image *image) +get_original_image(struct image *image_out) { struct file *file = get_file(); if (!file || !file->image.raster) forget_transformed_raster(); if (!file) return 0; - image->raster = file->image.raster; - image->vector = file->image.vector; - image->width = file->image.width; - image->height = file->image.height; - image->has_x_dpi = file->image.has_x_dpi; - image->has_y_dpi = file->image.has_y_dpi; - image->has_transformer = 0; - image->x_dpi = file->image.x_dpi; - image->y_dpi = file->image.y_dpi; + image_out->raster = file->image.raster; + image_out->vector = file->image.vector; + image_out->width = file->image.width; + image_out->height = file->image.height; + image_out->has_x_dpi = file->image.has_x_dpi; + image_out->has_y_dpi = file->image.has_y_dpi; + image_out->embedded_transformation = file->image.embedded_transformation; + image_out->has_transformer = 0; + image_out->x_dpi = file->image.x_dpi; + image_out->y_dpi = file->image.y_dpi; return 1; } -- cgit v1.3.1