| @@ -337,6 +337,8 @@ bool img_load(img_t *img, const fileinfo_t *file) |
| 337 | 337 | | |
| 338 | 338 | | img->w = imlib_image_get_width(); |
| 339 | 339 | | img->h = imlib_image_get_height(); |
| 340 | + | img->flip = FLIP_NONE; |
| 341 | + | img->rotation = DEGREE_0; |
| 340 | 342 | | img->scalemode = options->scalemode; |
| 341 | 343 | | img->re = false; |
| 342 | 344 | | img->checkpan = false; |
| @@ -689,10 +691,14 @@ bool img_pan_edge(img_t *img, direction_t dir) |
| 689 | 691 | | void img_rotate(img_t *img, degree_t d) |
| 690 | 692 | | { |
| 691 | 693 | | int ox, oy, tmp; |
| 694 | + | bool reapply = d == -1; |
| 692 | 695 | | |
| 693 | 696 | | if (img == NULL || img->im == NULL || img->win == NULL) |
| 694 | 697 | | return; |
| 695 | 698 | | |
| 699 | + | if (reapply) |
| 700 | + | d = img->rotation; |
| 701 | + | |
| 696 | 702 | | imlib_context_set_image(img->im); |
| 697 | 703 | | imlib_image_orientate(d); |
| 698 | 704 | | |
| @@ -708,25 +714,29 @@ void img_rotate(img_t *img, degree_t d) |
| 708 | 714 | | img->h = tmp; |
| 709 | 715 | | img->checkpan = true; |
| 710 | 716 | | } |
| 711 | | − | |
| 717 | + | if (!reapply) |
| 718 | + | img->rotation = (img->rotation + d) % 4; |
| 712 | 719 | | img->dirty = true; |
| 713 | 720 | | } |
| 714 | 721 | | |
| 715 | 722 | | void img_flip(img_t *img, flipdir_t d) |
| 716 | 723 | | { |
| 724 | + | bool reapply = d == -1; |
| 725 | + | |
| 717 | 726 | | if (img == NULL || img->im == NULL) |
| 718 | 727 | | return; |
| 719 | 728 | | |
| 729 | + | if (reapply) |
| 730 | + | d = img->flip; |
| 731 | + | |
| 720 | 732 | | imlib_context_set_image(img->im); |
| 721 | 733 | | |
| 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; |
| 729 | | − | } |
| 734 | + | if (d & FLIP_HORIZONTAL) |
| 735 | + | imlib_image_flip_horizontal(); |
| 736 | + | if (d & FLIP_VERTICAL) |
| 737 | + | imlib_image_flip_vertical(); |
| 738 | + | if (!reapply) |
| 739 | + | img->flip ^= d; |
| 730 | 740 | | img->dirty = true; |
| 731 | 741 | | } |
| 732 | 742 | | |
| @@ -785,6 +795,10 @@ bool img_frame_goto(img_t *img, int n) |
| 785 | 795 | | img->checkpan = true; |
| 786 | 796 | | img->dirty = true; |
| 787 | 797 | | |
| 798 | + | if (img->flip != FLIP_NONE) |
| 799 | + | img_flip(img, -1); |
| 800 | + | if (img->rotation != DEGREE_0) |
| 801 | + | img_rotate(img, -1); |
| 788 | 802 | | return true; |
| 789 | 803 | | } |
| 790 | 804 | | |