| @@ -100,21 +100,17 @@ void exif_auto_orientate(const fileinfo_t *file) |
| 100 | 100 | | case 2: |
| 101 | 101 | | imlib_image_flip_vertical(); |
| 102 | 102 | | break; |
| 103 | | − | |
| 104 | 103 | | case 3: |
| 105 | 104 | | imlib_image_orientate(2); |
| 106 | 105 | | break; |
| 107 | | − | |
| 108 | 106 | | case 7: |
| 109 | 107 | | imlib_image_orientate(1); |
| 110 | 108 | | case 4: |
| 111 | 109 | | imlib_image_flip_horizontal(); |
| 112 | 110 | | break; |
| 113 | | − | |
| 114 | 111 | | case 6: |
| 115 | 112 | | imlib_image_orientate(1); |
| 116 | 113 | | break; |
| 117 | | − | |
| 118 | 114 | | case 8: |
| 119 | 115 | | imlib_image_orientate(3); |
| 120 | 116 | | break; |
| @@ -688,7 +684,7 @@ bool img_pan_edge(img_t *img, direction_t dir) |
| 688 | 684 | | |
| 689 | 685 | | void img_rotate(img_t *img, degree_t d) |
| 690 | 686 | | { |
| 691 | | − | int ox, oy, tmp; |
| 687 | + | int i, ox, oy, tmp; |
| 692 | 688 | | |
| 693 | 689 | | if (img == NULL || img->im == NULL || img->win == NULL) |
| 694 | 690 | | return; |
| @@ -696,6 +692,12 @@ void img_rotate(img_t *img, degree_t d) |
| 696 | 692 | | imlib_context_set_image(img->im); |
| 697 | 693 | | imlib_image_orientate(d); |
| 698 | 694 | | |
| 695 | + | for (i = 0; i < img->multi.cnt; i++) { |
| 696 | + | if (i != img->multi.sel) { |
| 697 | + | imlib_context_set_image(img->multi.frames[i].im); |
| 698 | + | imlib_image_orientate(d); |
| 699 | + | } |
| 700 | + | } |
| 699 | 701 | | if (d == DEGREE_90 || d == DEGREE_270) { |
| 700 | 702 | | ox = d == DEGREE_90 ? img->x : img->win->w - img->x - img->w * img->zoom; |
| 701 | 703 | | 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) |
| 708 | 710 | | img->h = tmp; |
| 709 | 711 | | img->checkpan = true; |
| 710 | 712 | | } |
| 711 | | − | |
| 712 | 713 | | img->dirty = true; |
| 713 | 714 | | } |
| 714 | 715 | | |
| 715 | 716 | | void img_flip(img_t *img, flipdir_t d) |
| 716 | 717 | | { |
| 717 | | − | if (img == NULL || img->im == NULL) |
| 718 | + | int i; |
| 719 | + | void (*imlib_flip_op[3])(void) = { |
| 720 | + | imlib_image_flip_horizontal, |
| 721 | + | imlib_image_flip_vertical, |
| 722 | + | imlib_image_flip_diagonal |
| 723 | + | }; |
| 724 | + | |
| 725 | + | d = (d & (FLIP_HORIZONTAL | FLIP_VERTICAL)) - 1; |
| 726 | + | |
| 727 | + | if (img == NULL || img->im == NULL || d < 0 || d >= ARRLEN(imlib_flip_op)) |
| 718 | 728 | | return; |
| 719 | 729 | | |
| 720 | 730 | | imlib_context_set_image(img->im); |
| 731 | + | imlib_flip_op[d](); |
| 721 | 732 | | |
| 722 | | − | switch (d) { |
| 723 | | − | case FLIP_HORIZONTAL: |
| 724 | | − | imlib_image_flip_horizontal(); |
| 725 | | − | break; |
| 726 | | − | case FLIP_VERTICAL: |
| 727 | | − | imlib_image_flip_vertical(); |
| 728 | | − | break; |
| 733 | + | for (i = 0; i < img->multi.cnt; i++) { |
| 734 | + | if (i != img->multi.sel) { |
| 735 | + | imlib_context_set_image(img->multi.frames[i].im); |
| 736 | + | imlib_flip_op[d](); |
| 737 | + | } |
| 729 | 738 | | } |
| 730 | 739 | | img->dirty = true; |
| 731 | 740 | | } |