ソースを参照

Refactored merged rotation code

master
Bert Münnich 11年前
コミット
56142bd3ba
5個のファイルの変更20行の追加30行の削除
  1. +5
    -12
      commands.c
  2. +3
    -3
      config.def.h
  3. +7
    -10
      image.c
  4. +1
    -1
      image.h
  5. +4
    -4
      types.h

+ 5
- 12
commands.c ファイルの表示

@@ -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)


+ 3
- 3
config.def.h ファイルの表示

@@ -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 },


+ 7
- 10
image.c ファイルの表示

@@ -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;


+ 1
- 1
image.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*);


+ 4
- 4
types.h ファイルの表示

@@ -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,


||||||
x
 
000:0
読み込み中…
キャンセル
保存