Преглед на файлове

Mouse-wheel scrolling in thumb mode

master
Bert преди 14 години
родител
ревизия
a30901210c
променени са 4 файла, в които са добавени 61 реда и са изтрити 20 реда
  1. +1
    -1
      Makefile
  2. +16
    -4
      main.c
  3. +36
    -8
      thumbs.c
  4. +8
    -7
      thumbs.h

+ 1
- 1
Makefile Целия файл

@@ -1,6 +1,6 @@
all: sxiv

VERSION=git-20110219
VERSION=git-20110220

CC?=gcc
PREFIX?=/usr/local


+ 16
- 4
main.c Целия файл

@@ -397,19 +397,25 @@ void on_keypress(XKeyEvent *kev) {
/* move selection */
case XK_h:
case XK_Left:
changed = tns_move_selection(&tns, &win, MOVE_LEFT);
changed = tns_move_selection(&tns, &win, TNS_LEFT);
break;
case XK_j:
case XK_Down:
changed = tns_move_selection(&tns, &win, MOVE_DOWN);
changed = tns_move_selection(&tns, &win, TNS_DOWN);
break;
case XK_k:
case XK_Up:
changed = tns_move_selection(&tns, &win, MOVE_UP);
changed = tns_move_selection(&tns, &win, TNS_UP);
break;
case XK_l:
case XK_Right:
changed = tns_move_selection(&tns, &win, MOVE_RIGHT);
changed = tns_move_selection(&tns, &win, TNS_RIGHT);
break;

/* scroll */
case XK_bracketleft:
break;
case XK_bracketright:
break;
}
}
@@ -524,6 +530,12 @@ void on_buttonpress(XButtonEvent *bev) {
break;
}
break;
case Button4:
changed = tns_scroll(&tns, TNS_UP);
break;
case Button5:
changed = tns_scroll(&tns, TNS_DOWN);
break;
}
}



+ 36
- 8
thumbs.c Целия файл

@@ -88,21 +88,27 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) {
}

void tns_check_view(tns_t *tns, Bool scrolled) {
int r;

if (!tns)
return;

tns->first -= tns->first % tns->cols;
r = fileidx % tns->cols;

if (scrolled) {
/* move selection into visible area */
if (fileidx >= tns->first + tns->cols * tns->rows)
fileidx = tns->first + r + tns->cols * (tns->rows - 1);
else if (fileidx < tns->first)
fileidx = tns->first + r;
} else {
/* scroll to selection */
if (tns->first + tns->cols * tns->rows <= fileidx) {
tns->first = fileidx - fileidx % tns->cols -
tns->cols * (tns->rows - 1);
tns->first = fileidx - r - tns->cols * (tns->rows - 1);
tns->dirty = 1;
} else if (tns->first > fileidx) {
tns->first = fileidx - fileidx % tns->cols;
tns->first = fileidx - r;
tns->dirty = 1;
}
}
@@ -167,7 +173,7 @@ void tns_highlight(tns_t *tns, win_t *win, int n, Bool hl) {
win_draw(win);
}

int tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
int tns_move_selection(tns_t *tns, win_t *win, tnsdir_t dir) {
int old;

if (!tns || !win)
@@ -176,19 +182,19 @@ int tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
old = fileidx;

switch (dir) {
case MOVE_LEFT:
case TNS_LEFT:
if (fileidx > 0)
--fileidx;
break;
case MOVE_RIGHT:
case TNS_RIGHT:
if (fileidx < tns->cnt - 1)
++fileidx;
break;
case MOVE_UP:
case TNS_UP:
if (fileidx >= tns->cols)
fileidx -= tns->cols;
break;
case MOVE_DOWN:
case TNS_DOWN:
if (fileidx + tns->cols < tns->cnt)
fileidx += tns->cols;
break;
@@ -204,6 +210,28 @@ int tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
return fileidx != old;
}

int tns_scroll(tns_t *tns, tnsdir_t dir) {
int old;

if (!tns)
return 0;

old = tns->first;

if (dir == TNS_DOWN && tns->first + tns->cols * tns->rows < tns->cnt)
tns->first += tns->cols;
else if (dir == TNS_UP && tns->first >= tns->cols)
tns->first -= tns->cols;

if (tns->first != old) {
tns_check_view(tns, True);
tns->dirty = 1;
return 1;
} else {
return 0;
}
}

int tns_translate(tns_t *tns, int x, int y) {
int n;
thumb_t *t;


+ 8
- 7
thumbs.h Целия файл

@@ -21,12 +21,12 @@

#include "window.h"

typedef enum movedir_e {
MOVE_LEFT = 0,
MOVE_RIGHT,
MOVE_UP,
MOVE_DOWN
} movedir_t;
typedef enum tnsdir_e {
TNS_LEFT = 0,
TNS_RIGHT,
TNS_UP,
TNS_DOWN
} tnsdir_t;

typedef struct thumb_s {
Pixmap pm;
@@ -56,7 +56,8 @@ void tns_load(tns_t*, win_t*, const char*);
void tns_render(tns_t*, win_t*);
void tns_highlight(tns_t*, win_t*, int, Bool);

int tns_move_selection(tns_t*, win_t*, movedir_t);
int tns_move_selection(tns_t*, win_t*, tnsdir_t);
int tns_scroll(tns_t*, tnsdir_t);

int tns_translate(tns_t*, int, int);



Loading…
Отказ
Запис