diff options
author | Bert Münnich <ber.t@posteo.de> | 2014-01-09 20:32:22 +0100 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2014-01-09 20:32:22 +0100 |
commit | 002c7e550bf7ebf7491fbaaa7c4f3710f871d76a (patch) | |
tree | 8cb8b5bc6f14be5147354dc5b77135a37b23cc96 | |
parent | 48700aa6c8f4b9ef6dc162ea5aa98ac4f9cc0630 (diff) |
Second take at rotating & flipping multi-frame images; fixes issue #121
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | image.c | 37 | ||||
-rw-r--r-- | types.h | 4 |
3 files changed, 26 insertions, 17 deletions
@@ -1,4 +1,4 @@ -VERSION = git-20140108 +VERSION = git-20140109 PREFIX = /usr/local MANPREFIX = $(PREFIX)/share/man @@ -100,21 +100,17 @@ void exif_auto_orientate(const fileinfo_t *file) case 2: imlib_image_flip_vertical(); break; - case 3: imlib_image_orientate(2); break; - case 7: imlib_image_orientate(1); case 4: imlib_image_flip_horizontal(); break; - case 6: imlib_image_orientate(1); break; - case 8: imlib_image_orientate(3); break; @@ -688,7 +684,7 @@ bool img_pan_edge(img_t *img, direction_t dir) void img_rotate(img_t *img, degree_t d) { - int ox, oy, tmp; + int i, ox, oy, tmp; if (img == NULL || img->im == NULL || img->win == NULL) return; @@ -696,6 +692,12 @@ void img_rotate(img_t *img, degree_t d) imlib_context_set_image(img->im); imlib_image_orientate(d); + for (i = 0; i < img->multi.cnt; i++) { + if (i != img->multi.sel) { + imlib_context_set_image(img->multi.frames[i].im); + imlib_image_orientate(d); + } + } if (d == DEGREE_90 || d == DEGREE_270) { ox = d == DEGREE_90 ? img->x : img->win->w - img->x - img->w * img->zoom; oy = d == DEGREE_270 ? img->y : img->win->h - img->y - img->h * img->zoom; @@ -708,24 +710,31 @@ void img_rotate(img_t *img, degree_t d) img->h = tmp; img->checkpan = true; } - img->dirty = true; } void img_flip(img_t *img, flipdir_t d) { - if (img == NULL || img->im == NULL) + int i; + void (*imlib_flip_op[3])(void) = { + imlib_image_flip_horizontal, + imlib_image_flip_vertical, + imlib_image_flip_diagonal + }; + + d = (d & (FLIP_HORIZONTAL | FLIP_VERTICAL)) - 1; + + if (img == NULL || img->im == NULL || d < 0 || d >= ARRLEN(imlib_flip_op)) return; imlib_context_set_image(img->im); + imlib_flip_op[d](); - switch (d) { - case FLIP_HORIZONTAL: - imlib_image_flip_horizontal(); - break; - case FLIP_VERTICAL: - imlib_image_flip_vertical(); - break; + for (i = 0; i < img->multi.cnt; i++) { + if (i != img->multi.sel) { + imlib_context_set_image(img->multi.frames[i].im); + imlib_flip_op[d](); + } } img->dirty = true; } @@ -45,8 +45,8 @@ typedef enum { } degree_t; typedef enum { - FLIP_HORIZONTAL, - FLIP_VERTICAL + FLIP_HORIZONTAL = 1, + FLIP_VERTICAL = 2 } flipdir_t; typedef enum { |