Nicer tns_move_selection
This commit is contained in:
parent
62f4ab037a
commit
c6726ed331
36
thumbs.c
36
thumbs.c
|
@ -32,8 +32,9 @@ void tns_init(tns_t *tns, int cnt) {
|
||||||
if (!tns)
|
if (!tns)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tns->cnt = tns->first = tns->sel = tns->vis = 0;
|
tns->cnt = tns->first = tns->sel = 0;
|
||||||
tns->thumbs = (thumb_t*) s_malloc(cnt * sizeof(thumb_t));
|
tns->thumbs = (thumb_t*) s_malloc(cnt * sizeof(thumb_t));
|
||||||
|
memset(tns->thumbs, 0, cnt * sizeof(thumb_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tns_free(tns_t *tns, win_t *win) {
|
void tns_free(tns_t *tns, win_t *win) {
|
||||||
|
@ -115,7 +116,6 @@ void tns_render(tns_t *tns, win_t *win) {
|
||||||
x += thumb_dim;
|
x += thumb_dim;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tns->vis = i - tns->first;
|
|
||||||
|
|
||||||
tns_highlight(tns, win, -1);
|
tns_highlight(tns, win, -1);
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,7 @@ void tns_highlight(tns_t *tns, win_t *win, int old) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
|
void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
|
||||||
int sel;
|
int sel, old;
|
||||||
|
|
||||||
if (!tns || !win)
|
if (!tns || !win)
|
||||||
return;
|
return;
|
||||||
|
@ -148,30 +148,28 @@ void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
|
||||||
|
|
||||||
switch (dir) {
|
switch (dir) {
|
||||||
case MOVE_LEFT:
|
case MOVE_LEFT:
|
||||||
if (sel % tns->cols > 0) {
|
if (sel % tns->cols > 0)
|
||||||
--tns->sel;
|
--sel;
|
||||||
tns_highlight(tns, win, sel);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case MOVE_RIGHT:
|
case MOVE_RIGHT:
|
||||||
if (sel % tns->cols < tns->cols - 1 && sel < tns->cnt - 1) {
|
if (sel % tns->cols < tns->cols - 1 && sel < tns->cnt - 1)
|
||||||
++tns->sel;
|
++sel;
|
||||||
tns_highlight(tns, win, sel);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case MOVE_UP:
|
case MOVE_UP:
|
||||||
if (sel / tns->cols > 0) {
|
if (sel / tns->cols > 0)
|
||||||
tns->sel -= tns->cols;
|
sel -= tns->cols;
|
||||||
tns_highlight(tns, win, sel);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case MOVE_DOWN:
|
case MOVE_DOWN:
|
||||||
if (sel / tns->cols < tns->rows - 1 && sel + tns->cols < tns->vis) {
|
if (sel / tns->cols < tns->rows - 1 && sel + tns->cols < tns->cnt)
|
||||||
tns->sel += tns->cols;
|
sel += tns->cols;
|
||||||
tns_highlight(tns, win, sel);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sel != tns->sel && tns->thumbs[sel].x != 0) {
|
||||||
|
old = tns->sel;
|
||||||
|
tns->sel = sel;
|
||||||
|
tns_highlight(tns, win, old);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int tns_translate(tns_t *tns, int x, int y) {
|
int tns_translate(tns_t *tns, int x, int y) {
|
||||||
|
|
Loading…
Reference in a new issue