@@ -397,21 +397,14 @@ bool i_fit_to_img(arg_t a) | |||||
bool i_rotate(arg_t a) | bool i_rotate(arg_t a) | ||||
{ | { | ||||
rotate_t rot = (rotate_t) a; | degree_t degree = (degree_t) a; | ||||
if (mode == MODE_IMAGE) { | if (mode == MODE_IMAGE) { | ||||
if (rot == ROTATE_90) { | img_rotate(&img, degree); | ||||
img_rotate(&img, 1); | return true; | ||||
return true; | } else { | ||||
} else if (rot == ROTATE_270) { | return false; | ||||
img_rotate(&img, 3); | |||||
return true; | |||||
} else if (rot == ROTATE_180) { | |||||
img_rotate(&img, 2); | |||||
return true; | |||||
} | |||||
} | } | ||||
return false; | |||||
} | } | ||||
bool i_flip(arg_t a) | bool i_flip(arg_t a) | ||||
@@ -114,9 +114,9 @@ static const keymap_t keys[] = { | |||||
{ false, XK_E, i_fit_to_win, (arg_t) SCALE_HEIGHT }, | { false, XK_E, i_fit_to_win, (arg_t) SCALE_HEIGHT }, | ||||
{ false, XK_W, i_fit_to_img, (arg_t) None }, | { false, XK_W, i_fit_to_img, (arg_t) None }, | ||||
{ false, XK_less, i_rotate, (arg_t) ROTATE_270 }, | { false, XK_less, i_rotate, (arg_t) DEGREE_270 }, | ||||
{ false, XK_greater, i_rotate, (arg_t) ROTATE_90 }, | { false, XK_greater, i_rotate, (arg_t) DEGREE_90 }, | ||||
{ false, XK_question, i_rotate, (arg_t) ROTATE_180 }, | { false, XK_question, i_rotate, (arg_t) DEGREE_180 }, | ||||
{ false, XK_backslash, i_flip, (arg_t) FLIP_HORIZONTAL }, | { false, XK_backslash, i_flip, (arg_t) FLIP_HORIZONTAL }, | ||||
{ false, XK_bar, i_flip, (arg_t) FLIP_VERTICAL }, | { false, XK_bar, i_flip, (arg_t) FLIP_VERTICAL }, | ||||
@@ -650,25 +650,22 @@ bool img_pan_edge(img_t *img, direction_t dir) | |||||
} | } | ||||
} | } | ||||
void img_rotate(img_t *img, int d) | void img_rotate(img_t *img, degree_t d) | ||||
{ | { | ||||
win_t *win; | |||||
int ox, oy, tmp; | int ox, oy, tmp; | ||||
if (img == NULL || img->im == NULL || img->win == NULL) | if (img == NULL || img->im == NULL || img->win == NULL) | ||||
return; | return; | ||||
win = img->win; | |||||
ox = d == 1 ? img->x : win->w - img->x - img->w * img->zoom; | |||||
oy = d == 3 ? img->y : win->h - img->y - img->h * img->zoom; | |||||
imlib_context_set_image(img->im); | imlib_context_set_image(img->im); | ||||
/* rotates by `90 * d` degrees in the clockwise direction */ | |||||
imlib_image_orientate(d); | imlib_image_orientate(d); | ||||
if (d == 1 || d == 3) { | if (d == DEGREE_90 || d == DEGREE_270) { | ||||
img->x = oy + (win->w - win->h) / 2; | ox = d == DEGREE_90 ? img->x : img->win->w - img->x - img->w * img->zoom; | ||||
img->y = ox + (win->h - win->w) / 2; | oy = d == DEGREE_270 ? img->y : img->win->h - img->y - img->h * img->zoom; | ||||
img->x = oy + (img->win->w - img->win->h) / 2; | |||||
img->y = ox + (img->win->h - img->win->w) / 2; | |||||
tmp = img->w; | tmp = img->w; | ||||
img->w = img->h; | img->w = img->h; | ||||
@@ -76,7 +76,7 @@ bool img_move(img_t*, float, float); | |||||
bool img_pan(img_t*, direction_t, int); | bool img_pan(img_t*, direction_t, int); | ||||
bool img_pan_edge(img_t*, direction_t); | bool img_pan_edge(img_t*, direction_t); | ||||
void img_rotate(img_t*, int); | void img_rotate(img_t*, degree_t); | ||||
void img_flip(img_t*, flipdir_t); | void img_flip(img_t*, flipdir_t); | ||||
void img_toggle_antialias(img_t*); | void img_toggle_antialias(img_t*); | ||||
@@ -39,10 +39,10 @@ typedef enum { | |||||
} direction_t; | } direction_t; | ||||
typedef enum { | typedef enum { | ||||
ROTATE_90, | DEGREE_90 = 1, | ||||
ROTATE_270, | DEGREE_180 = 2, | ||||
ROTATE_180 | DEGREE_270 = 3 | ||||
} rotate_t; | } degree_t; | ||||
typedef enum { | typedef enum { | ||||
FLIP_HORIZONTAL, | FLIP_HORIZONTAL, | ||||