Mercurial > hg > forks > geeqie
changeset 2191:197cbcf2655b
Fix exif orientation in clutter rendering mode.
author | Laurent Monin <zas@norz.org> |
---|---|
date | Tue, 04 Sep 2012 11:15:45 +0200 |
parents | 904e3e385059 |
children | 44901a52cbf9 |
files | src/renderer-clutter.c |
diffstat | 1 files changed, 29 insertions(+), 64 deletions(-) [+] |
line wrap: on
line diff
--- a/src/renderer-clutter.c Thu Aug 30 22:16:43 2012 +0200 +++ b/src/renderer-clutter.c Tue Sep 04 11:15:45 2012 +0200 @@ -251,6 +251,8 @@ PixbufRenderer *pr = rc->pr; gint anchor_x = 0; gint anchor_y = 0; + gint rot_z = 0; + gint rot_y = 0; clutter_actor_set_anchor_point(CLUTTER_ACTOR(rc->texture), 0, 0); @@ -264,96 +266,59 @@ switch (pr->orientation) { case EXIF_ORIENTATION_TOP_LEFT: - /* normal */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 0, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 0, 0, 0, 0); - anchor_x = 0; - anchor_y = 0; + /* 1 - Horizontal (normal) */ break; case EXIF_ORIENTATION_TOP_RIGHT: - /* mirrored */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 0, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 180, 0, 0, 0); + /* 2 - Mirror horizontal */ + rot_y = 180; anchor_x = pr->width; - anchor_y = 0; break; case EXIF_ORIENTATION_BOTTOM_RIGHT: - /* upside down */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 180, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 0, 0, 0, 0); + /* 3 - Rotate 180 */ + rot_z = 180; anchor_x = pr->width; anchor_y = pr->height; break; case EXIF_ORIENTATION_BOTTOM_LEFT: - /* flipped */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 180, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 180, 0, 0, 0); - anchor_x = 0; + /* 4 - Mirror vertical */ + rot_z = 180; + rot_y = 180; anchor_y = pr->height; break; case EXIF_ORIENTATION_LEFT_TOP: - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - -90, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 180, 0, 0, 0); - anchor_x = 0; - anchor_y = 0; + /* 5 - Mirror horizontal and rotate 270 CW */ + rot_z = 270; + rot_y = 180; break; case EXIF_ORIENTATION_RIGHT_TOP: - /* rotated -90 (270) */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - -90, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 0, 0, 0, 0); - anchor_x = 0; - anchor_y = pr->height; + /* 6 - Rotate 90 CW */ + rot_z = 90; + anchor_x = pr->width; break; case EXIF_ORIENTATION_RIGHT_BOTTOM: - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 90, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 180, 0, 0, 0); + /* 7 - Mirror horizontal and rotate 90 CW */ + rot_z = 90; + rot_y = 180; anchor_x = pr->width; anchor_y = pr->height; break; case EXIF_ORIENTATION_LEFT_BOTTOM: - /* rotated 90 */ - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Z_AXIS, - 90, 0, 0, 0); - clutter_actor_set_rotation(CLUTTER_ACTOR(rc->texture), - CLUTTER_Y_AXIS, - 0, 0, 0, 0); - anchor_x = pr->width; - anchor_y = 0; + /* 8 - Rotate 270 CW */ + rot_z = 270; + anchor_y = pr->height; break; default: /* The other values are out of range */ break; } + clutter_actor_set_rotation( CLUTTER_ACTOR(rc->texture), + CLUTTER_Z_AXIS, + rot_z, 0, 0, 0); + clutter_actor_set_rotation( CLUTTER_ACTOR(rc->texture), + CLUTTER_Y_AXIS, + rot_y, 0, 0, 0); + clutter_actor_set_position(CLUTTER_ACTOR(rc->texture), pr->x_offset - pr->x_scroll + anchor_x, pr->y_offset - pr->y_scroll + anchor_y);