aboutsummaryrefslogtreecommitdiffstats
path: root/image.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-10-14 18:54:48 +0200
committerMattias Andrée <m@maandree.se>2026-10-14 18:54:48 +0200
commit6bbfc093885043abdfa18826511ee053e52d08fa (patch)
tree2d76b446617658412930ba4147e0d2db837d000a /image.c
parentFourth commit (diff)
downloadgbild-master.tar.gz
gbild-master.tar.bz2
gbild-master.tar.xz
Fifth commitHEAD0.1master
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'image.c')
-rw-r--r--image.c62
1 files changed, 33 insertions, 29 deletions
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;
}