Apply flip & rotation on all frames of a multi-frame image; fixes issue #121
This commit is contained in:
parent
e82397db15
commit
f795273b65
32
image.c
32
image.c
|
@ -337,6 +337,8 @@ bool img_load(img_t *img, const fileinfo_t *file)
|
|||
|
||||
img->w = imlib_image_get_width();
|
||||
img->h = imlib_image_get_height();
|
||||
img->flip = FLIP_NONE;
|
||||
img->rotation = DEGREE_0;
|
||||
img->scalemode = options->scalemode;
|
||||
img->re = false;
|
||||
img->checkpan = false;
|
||||
|
@ -689,10 +691,14 @@ bool img_pan_edge(img_t *img, direction_t dir)
|
|||
void img_rotate(img_t *img, degree_t d)
|
||||
{
|
||||
int ox, oy, tmp;
|
||||
bool reapply = d == -1;
|
||||
|
||||
if (img == NULL || img->im == NULL || img->win == NULL)
|
||||
return;
|
||||
|
||||
if (reapply)
|
||||
d = img->rotation;
|
||||
|
||||
imlib_context_set_image(img->im);
|
||||
imlib_image_orientate(d);
|
||||
|
||||
|
@ -708,25 +714,29 @@ void img_rotate(img_t *img, degree_t d)
|
|||
img->h = tmp;
|
||||
img->checkpan = true;
|
||||
}
|
||||
|
||||
if (!reapply)
|
||||
img->rotation = (img->rotation + d) % 4;
|
||||
img->dirty = true;
|
||||
}
|
||||
|
||||
void img_flip(img_t *img, flipdir_t d)
|
||||
{
|
||||
bool reapply = d == -1;
|
||||
|
||||
if (img == NULL || img->im == NULL)
|
||||
return;
|
||||
|
||||
if (reapply)
|
||||
d = img->flip;
|
||||
|
||||
imlib_context_set_image(img->im);
|
||||
|
||||
switch (d) {
|
||||
case FLIP_HORIZONTAL:
|
||||
imlib_image_flip_horizontal();
|
||||
break;
|
||||
case FLIP_VERTICAL:
|
||||
imlib_image_flip_vertical();
|
||||
break;
|
||||
}
|
||||
if (d & FLIP_HORIZONTAL)
|
||||
imlib_image_flip_horizontal();
|
||||
if (d & FLIP_VERTICAL)
|
||||
imlib_image_flip_vertical();
|
||||
if (!reapply)
|
||||
img->flip ^= d;
|
||||
img->dirty = true;
|
||||
}
|
||||
|
||||
|
@ -785,6 +795,10 @@ bool img_frame_goto(img_t *img, int n)
|
|||
img->checkpan = true;
|
||||
img->dirty = true;
|
||||
|
||||
if (img->flip != FLIP_NONE)
|
||||
img_flip(img, -1);
|
||||
if (img->rotation != DEGREE_0)
|
||||
img_rotate(img, -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
3
image.h
3
image.h
|
@ -57,6 +57,9 @@ typedef struct {
|
|||
bool aa;
|
||||
bool alpha;
|
||||
|
||||
flipdir_t flip;
|
||||
degree_t rotation;
|
||||
|
||||
Imlib_Color_Modifier cmod;
|
||||
int gamma;
|
||||
|
||||
|
|
Loading…
Reference in New Issue