diff options
author | Lucas Rocha <lucasr@gnome.org> | 2007-09-09 13:31:53 +0000 |
---|---|---|
committer | Lucas Almeida Rocha <lucasr@src.gnome.org> | 2007-09-09 13:31:53 +0000 |
commit | 9ae5c5f8ae20c00de69a0f724f66c23a56845e80 (patch) | |
tree | 72cdc68af2c4e2b3690a2530c9c1f589b7416435 /src/eog-image-jpeg.c | |
parent | edfc068f3b9f7ef0964f304f5fb969b2066f4298 (diff) | |
download | eog-9ae5c5f8ae20c00de69a0f724f66c23a56845e80.tar.gz |
take the auto-orientation into account before saving image. added
2007-09-09 Lucas Rocha <lucasr@gnome.org>
* src/eog-image-jpeg.c (init_transform_info): take the
auto-orientation into account before saving image.
* src/eog-image-private.h: added "trans_autorotate" attribute.
* src/eog-image.c (eog_image_dispose, eog_image_init,
eog_image_needs_transformation,
eog_image_apply_transformations, eog_image_real_autorotate,
eog_image_reset_modifications): create separate instance of
EogTransform for the auto-orientation in order to avoid wrong
orientation of thumbnails. Fixes bug #465583.
svn path=/trunk/; revision=4069
Diffstat (limited to 'src/eog-image-jpeg.c')
-rw-r--r-- | src/eog-image-jpeg.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/eog-image-jpeg.c b/src/eog-image-jpeg.c index 539d5267..ed9019af 100644 --- a/src/eog-image-jpeg.c +++ b/src/eog-image-jpeg.c @@ -114,13 +114,27 @@ output_message_handler (j_common_ptr cinfo) static void init_transform_info (EogImage *image, jpeg_transform_info *info) { - JXFORM_CODE trans_code = JXFORM_NONE; + EogImagePrivate *priv; + EogTransform *composition = NULL; EogTransformType transformation; + JXFORM_CODE trans_code = JXFORM_NONE; g_return_if_fail (EOG_IS_IMAGE (image)); - if (image->priv->trans != NULL) { - transformation = eog_transform_get_transform_type (image->priv->trans); + priv = image->priv; + + if (priv->trans != NULL && priv->trans_autorotate != NULL) { + composition = eog_transform_compose (priv->trans, + priv->trans_autorotate); + } else if (priv->trans != NULL) { + composition = g_object_ref (priv->trans); + } else if (priv->trans_autorotate != NULL) { + composition = g_object_ref (priv->trans_autorotate); + } + + if (composition != NULL) { + transformation = eog_transform_get_transform_type (composition); + switch (transformation) { case EOG_TRANSFORM_ROT_90: trans_code = JXFORM_ROT_90; @@ -146,8 +160,9 @@ init_transform_info (EogImage *image, jpeg_transform_info *info) info->transform = trans_code; info->trim = FALSE; info->force_grayscale = FALSE; -} + g_object_unref (composition); +} static gboolean _save_jpeg_as_jpeg (EogImage *image, const char *file, EogImageSaveInfo *source, |