Krolyxon
Commit 515e410

Branches

Refs →

nsxiv515e410

Use win_t member in img_t & tns_t instead of parameters

Author
Bert Münnich
Date
2011-09-17 17:23 +0200
Parent
82df0b3
Commit
515e41045198074cc1b015c6296f536edbfedff5

+150 −135

7 files changed

  1. M Makefile +1 −1
  2. M commands.c +14 −14
  3. M image.c +80 −74
  4. M image.h +19 −17
  5. M main.c +6 −7
  6. M thumbs.c +18 −13
  7. M thumbs.h +12 −9
M Makefile View
@@ -1,4 +1,4 @@
1−VERSION = git-20110912
1+VERSION = git-20110917
22
33 CC = gcc
44 CFLAGS = -Wall -pedantic -O2
M commands.c View
@@ -54,7 +54,7 @@ bool it_quit(arg_t a) {
5454 bool it_switch_mode(arg_t a) {
5555 if (mode == MODE_IMAGE) {
5656 if (!tns.thumbs)
57− tns_init(&tns, filecnt);
57+ tns_init(&tns, filecnt, &win);
5858 img_close(&img, false);
5959 reset_timeout(reset_cursor);
6060 if (img.slideshow) {
@@ -180,16 +180,16 @@ bool it_move(arg_t a) {
180180 direction_t dir = (direction_t) a;
181181
182182 if (mode == MODE_IMAGE)
183− return img_pan(&img, &win, dir, false);
183+ return img_pan(&img, dir, false);
184184 else
185− return tns_move_selection(&tns, &win, dir);
185+ return tns_move_selection(&tns, dir);
186186 }
187187
188188 bool i_pan_screen(arg_t a) {
189189 direction_t dir = (direction_t) a;
190190
191191 if (mode == MODE_IMAGE)
192− return img_pan(&img, &win, dir, true);
192+ return img_pan(&img, dir, true);
193193 else
194194 return false;
195195 }
@@ -198,7 +198,7 @@ bool i_pan_edge(arg_t a) {
198198 direction_t dir = (direction_t) a;
199199
200200 if (mode == MODE_IMAGE)
201− return img_pan_edge(&img, &win, dir);
201+ return img_pan_edge(&img, dir);
202202 else
203203 return false;
204204 }
@@ -245,8 +245,8 @@ bool i_drag(arg_t a) {
245245 if (dragging)
246246 next = XCheckIfEvent(win.env.dpy, &e, is_motionnotify, None);
247247 if ((!dragging || !next) && (dx != 0 || dy != 0)) {
248− if (img_move(&img, &win, dx, dy))
249− img_render(&img, &win);
248+ if (img_move(&img, dx, dy))
249+ img_render(&img);
250250 dx = dy = 0;
251251 }
252252 }
@@ -265,19 +265,19 @@ bool i_zoom(arg_t a) {
265265 return false;
266266
267267 if (scale > 0)
268− return img_zoom_in(&img, &win);
268+ return img_zoom_in(&img);
269269 else if (scale < 0)
270− return img_zoom_out(&img, &win);
270+ return img_zoom_out(&img);
271271 else
272− return img_zoom(&img, &win, 1.0);
272+ return img_zoom(&img, 1.0);
273273 }
274274
275275 bool i_fit_to_win(arg_t a) {
276276 bool ret;
277277
278278 if (mode == MODE_IMAGE) {
279− if ((ret = img_fit_win(&img, &win)))
280− img_center(&img, &win);
279+ if ((ret = img_fit_win(&img)))
280+ img_center(&img);
281281 return ret;
282282 } else {
283283 return false;
@@ -309,10 +309,10 @@ bool i_rotate(arg_t a) {
309309
310310 if (mode == MODE_IMAGE) {
311311 if (dir == DIR_LEFT) {
312− img_rotate_left(&img, &win);
312+ img_rotate_left(&img);
313313 return true;
314314 } else if (dir == DIR_RIGHT) {
315− img_rotate_right(&img, &win);
315+ img_rotate_right(&img);
316316 return true;
317317 }
318318 }
M image.c View
@@ -49,26 +49,26 @@ void img_init(img_t *img, win_t *win) {
4949 zoom_min = zoom_levels[0] / 100.0;
5050 zoom_max = zoom_levels[ARRLEN(zoom_levels) - 1] / 100.0;
5151
52− if (img) {
53− img->im = NULL;
54− img->multi.cap = img->multi.cnt = 0;
55− img->multi.animate = false;
56− img->zoom = options->zoom;
57− img->zoom = MAX(img->zoom, zoom_min);
58− img->zoom = MIN(img->zoom, zoom_max);
59− img->checkpan = false;
60− img->dirty = false;
61− img->aa = options->aa;
62− img->alpha = true;
63− img->slideshow = false;
64− img->ss_delay = SLIDESHOW_DELAY * 1000;
65− }
52+ if (!img || !win)
53+ return;
6654
67− if (win) {
68− imlib_context_set_display(win->env.dpy);
69− imlib_context_set_visual(win->env.vis);
70− imlib_context_set_colormap(win->env.cmap);
71− }
55+ imlib_context_set_display(win->env.dpy);
56+ imlib_context_set_visual(win->env.vis);
57+ imlib_context_set_colormap(win->env.cmap);
58+
59+ img->im = NULL;
60+ img->win = win;
61+ img->zoom = options->zoom;
62+ img->zoom = MAX(img->zoom, zoom_min);
63+ img->zoom = MIN(img->zoom, zoom_max);
64+ img->checkpan = false;
65+ img->dirty = false;
66+ img->aa = options->aa;
67+ img->alpha = true;
68+ img->slideshow = false;
69+ img->ss_delay = SLIDESHOW_DELAY * 1000;
70+ img->multi.cap = img->multi.cnt = 0;
71+ img->multi.animate = false;
7272 }
7373
7474 #if EXIF_SUPPORT
@@ -311,14 +311,13 @@ bool img_load(img_t *img, const fileinfo_t *file) {
311311 img_load_gif(img, file);
312312 #endif
313313
314+ img->w = imlib_image_get_width();
315+ img->h = imlib_image_get_height();
314316 img->scalemode = options->scalemode;
315317 img->re = false;
316318 img->checkpan = false;
317319 img->dirty = true;
318320
319− img->w = imlib_image_get_width();
320− img->h = imlib_image_get_height();
321−
322321 return true;
323322 }
324323
@@ -345,12 +344,14 @@ void img_close(img_t *img, bool decache) {
345344 }
346345 }
347346
348−void img_check_pan(img_t *img, win_t *win, bool moved) {
347+void img_check_pan(img_t *img, bool moved) {
348+ win_t *win;
349349 int ox, oy;
350350
351− if (!img || !win)
351+ if (!img || !img->im || !img->win)
352352 return;
353353
354+ win = img->win;
354355 ox = img->x;
355356 oy = img->y;
356357
@@ -375,15 +376,17 @@ void img_check_pan(img_t *img, win_t *win, bool moved) {
375376 img->dirty = true;
376377 }
377378
378−bool img_fit(img_t *img, win_t *win) {
379+bool img_fit(img_t *img) {
379380 float z, zmax, zw, zh;
380381
381− if (!img || !win || img->scalemode == SCALE_ZOOM)
382+ if (!img || !img->im || !img->win)
383+ return false;
384+ if (img->scalemode == SCALE_ZOOM)
382385 return false;
383386
384387 zmax = img->scalemode == SCALE_DOWN ? 1.0 : zoom_max;
385− zw = (float) win->w / (float) img->w;
386− zh = (float) win->h / (float) img->h;
388+ zw = (float) img->win->w / (float) img->w;
389+ zh = (float) img->win->h / (float) img->h;
387390
388391 z = MIN(zw, zh);
389392 z = MAX(z, zoom_min);
@@ -398,14 +401,16 @@ bool img_fit(img_t *img, win_t *win) {
398401 }
399402 }
400403
401−void img_render(img_t *img, win_t *win) {
404+void img_render(img_t *img) {
405+ win_t *win;
402406 int sx, sy, sw, sh;
403407 int dx, dy, dw, dh;
404408
405− if (!img || !img->im || !win)
409+ if (!img || !img->im || !img->win)
406410 return;
407411
408− img_fit(img, win);
412+ win = img->win;
413+ img_fit(img);
409414
410415 if (!img->re) {
411416 /* rendered for the first time */
@@ -421,7 +426,7 @@ void img_render(img_t *img, win_t *win) {
421426 }
422427
423428 if (img->checkpan) {
424− img_check_pan(img, win, false);
429+ img_check_pan(img, false);
425430 img->checkpan = false;
426431 }
427432
@@ -467,25 +472,25 @@ void img_render(img_t *img, win_t *win) {
467472 img->dirty = false;
468473 }
469474
470−bool img_fit_win(img_t *img, win_t *win) {
471− if (!img || !img->im || !win)
475+bool img_fit_win(img_t *img) {
476+ if (!img || !img->im)
472477 return false;
473478
474479 img->scalemode = SCALE_FIT;
475− return img_fit(img, win);
480+ return img_fit(img);
476481 }
477482
478−bool img_center(img_t *img, win_t *win) {
483+bool img_center(img_t *img) {
479484 int ox, oy;
480485
481− if (!img || !win)
486+ if (!img || !img->im || !img->win)
482487 return false;
483488
484489 ox = img->x;
485490 oy = img->y;
486491
487− img->x = (win->w - img->w * img->zoom) / 2;
488− img->y = (win->h - img->h * img->zoom) / 2;
492+ img->x = (img->win->w - img->w * img->zoom) / 2;
493+ img->y = (img->win->h - img->h * img->zoom) / 2;
489494
490495 if (ox != img->x || oy != img->y) {
491496 img->dirty = true;
@@ -495,8 +500,8 @@ bool img_center(img_t *img, win_t *win) {
495500 }
496501 }
497502
498−bool img_zoom(img_t *img, win_t *win, float z) {
499− if (!img || !img->im || !win)
503+bool img_zoom(img_t *img, float z) {
504+ if (!img || !img->im || !img->win)
500505 return false;
501506
502507 z = MAX(z, zoom_min);
@@ -505,8 +510,8 @@ bool img_zoom(img_t *img, win_t *win, float z) {
505510 img->scalemode = SCALE_ZOOM;
506511
507512 if (ZOOMDIFF(z, img->zoom)) {
508− img->x = win->w / 2 - (win->w / 2 - img->x) * z / img->zoom;
509− img->y = win->h / 2 - (win->h / 2 - img->y) * z / img->zoom;
513+ img->x = img->win->w / 2 - (img->win->w / 2 - img->x) * z / img->zoom;
514+ img->y = img->win->h / 2 - (img->win->h / 2 - img->y) * z / img->zoom;
510515 img->zoom = z;
511516 img->checkpan = true;
512517 img->dirty = true;
@@ -516,36 +521,36 @@ bool img_zoom(img_t *img, win_t *win, float z) {
516521 }
517522 }
518523
519−bool img_zoom_in(img_t *img, win_t *win) {
524+bool img_zoom_in(img_t *img) {
520525 int i;
521526
522− if (!img || !img->im || !win)
527+ if (!img || !img->im)
523528 return false;
524529
525530 for (i = 1; i < ARRLEN(zoom_levels); i++) {
526531 if (zoom_levels[i] > img->zoom * 100.0)
527− return img_zoom(img, win, zoom_levels[i] / 100.0);
532+ return img_zoom(img, zoom_levels[i] / 100.0);
528533 }
529534 return false;
530535 }
531536
532−bool img_zoom_out(img_t *img, win_t *win) {
537+bool img_zoom_out(img_t *img) {
533538 int i;
534539
535− if (!img || !img->im || !win)
540+ if (!img || !img->im)
536541 return false;
537542
538543 for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) {
539544 if (zoom_levels[i] < img->zoom * 100.0)
540− return img_zoom(img, win, zoom_levels[i] / 100.0);
545+ return img_zoom(img, zoom_levels[i] / 100.0);
541546 }
542547 return false;
543548 }
544549
545−bool img_move(img_t *img, win_t *win, int dx, int dy) {
550+bool img_move(img_t *img, int dx, int dy) {
546551 int ox, oy;
547552
548− if (!img || !img->im || !win)
553+ if (!img || !img->im)
549554 return false;
550555
551556 ox = img->x;
@@ -554,7 +559,7 @@ bool img_move(img_t *img, win_t *win, int dx, int dy) {
554559 img->x += dx;
555560 img->y += dy;
556561
557− img_check_pan(img, win, true);
562+ img_check_pan(img, true);
558563
559564 if (ox != img->x || oy != img->y) {
560565 img->dirty = true;
@@ -564,27 +569,27 @@ bool img_move(img_t *img, win_t *win, int dx, int dy) {
564569 }
565570 }
566571
567−bool img_pan(img_t *img, win_t *win, direction_t dir, bool screen) {
568− if (!img || !img->im || !win)
572+bool img_pan(img_t *img, direction_t dir, bool screen) {
573+ if (!img || !img->im || !img->win)
569574 return false;
570575
571576 switch (dir) {
572577 case DIR_LEFT:
573− return img_move(img, win, win->w / (screen ? 1 : 5), 0);
578+ return img_move(img, img->win->w / (screen ? 1 : 5), 0);
574579 case DIR_RIGHT:
575− return img_move(img, win, win->w / (screen ? 1 : 5) * -1, 0);
580+ return img_move(img, img->win->w / (screen ? 1 : 5) * -1, 0);
576581 case DIR_UP:
577− return img_move(img, win, 0, win->h / (screen ? 1 : 5));
582+ return img_move(img, 0, img->win->h / (screen ? 1 : 5));
578583 case DIR_DOWN:
579− return img_move(img, win, 0, win->h / (screen ? 1 : 5) * -1);
584+ return img_move(img, 0, img->win->h / (screen ? 1 : 5) * -1);
580585 }
581586 return false;
582587 }
583588
584−bool img_pan_edge(img_t *img, win_t *win, direction_t dir) {
589+bool img_pan_edge(img_t *img, direction_t dir) {
585590 int ox, oy;
586591
587− if (!img || !img->im || !win)
592+ if (!img || !img->im || !img->win)
588593 return false;
589594
590595 ox = img->x;
@@ -595,17 +600,17 @@ bool img_pan_edge(img_t *img, win_t *win, direction_t dir) {
595600 img->x = 0;
596601 break;
597602 case DIR_RIGHT:
598− img->x = win->w - img->w * img->zoom;
603+ img->x = img->win->w - img->w * img->zoom;
599604 break;
600605 case DIR_UP:
601606 img->y = 0;
602607 break;
603608 case DIR_DOWN:
604− img->y = win->h - img->h * img->zoom;
609+ img->y = img->win->h - img->h * img->zoom;
605610 break;
606611 }
607612
608− img_check_pan(img, win, true);
613+ img_check_pan(img, true);
609614
610615 if (ox != img->x || oy != img->y) {
611616 img->dirty = true;
@@ -615,12 +620,14 @@ bool img_pan_edge(img_t *img, win_t *win, direction_t dir) {
615620 }
616621 }
617622
618−void img_rotate(img_t *img, win_t *win, int d) {
623+void img_rotate(img_t *img, int d) {
624+ win_t *win;
619625 int ox, oy, tmp;
620626
621− if (!img || !img->im || !win)
627+ if (!img || !img->im || !img->win)
622628 return;
623629
630+ win = img->win;
624631 ox = d == 1 ? img->x : win->w - img->x - img->w * img->zoom;
625632 oy = d == 3 ? img->y : win->h - img->y - img->h * img->zoom;
626633
@@ -638,12 +645,12 @@ void img_rotate(img_t *img, win_t *win, int d) {
638645 img->dirty = true;
639646 }
640647
641−void img_rotate_left(img_t *img, win_t *win) {
642− img_rotate(img, win, 3);
648+void img_rotate_left(img_t *img) {
649+ img_rotate(img, 3);
643650 }
644651
645−void img_rotate_right(img_t *img, win_t *win) {
646− img_rotate(img, win, 1);
652+void img_rotate_right(img_t *img) {
653+ img_rotate(img, 1);
647654 }
648655
649656 void img_toggle_antialias(img_t *img) {
@@ -657,10 +664,9 @@ void img_toggle_antialias(img_t *img) {
657664 }
658665
659666 bool img_frame_goto(img_t *img, int n) {
660− if (!img || n < 0 || n >= img->multi.cnt)
667+ if (!img || !img->im)
661668 return false;
662−
663− if (n == img->multi.sel)
669+ if (n < 0 || n >= img->multi.cnt || n == img->multi.sel)
664670 return false;
665671
666672 img->multi.sel = n;
@@ -676,7 +682,7 @@ bool img_frame_goto(img_t *img, int n) {
676682 }
677683
678684 bool img_frame_navigate(img_t *img, int d) {
679− if (!img || !img->multi.cnt || !d)
685+ if (!img || !img->im || !img->multi.cnt || !d)
680686 return false;
681687
682688 d += img->multi.sel;
@@ -689,7 +695,7 @@ bool img_frame_navigate(img_t *img, int d) {
689695 }
690696
691697 bool img_frame_animate(img_t *img, bool restart) {
692− if (!img || !img->multi.cnt)
698+ if (!img || !img->im || !img->multi.cnt)
693699 return false;
694700
695701 if (img->multi.sel + 1 >= img->multi.cnt) {
M image.h View
@@ -39,10 +39,15 @@ typedef struct {
3939
4040 typedef struct {
4141 Imlib_Image *im;
42− multi_img_t multi;
42+ int w;
43+ int h;
44+
45+ win_t *win;
46+ int x;
47+ int y;
4348
44− float zoom;
4549 scalemode_t scalemode;
50+ float zoom;
4651
4752 bool re;
4853 bool checkpan;
@@ -53,10 +58,7 @@ typedef struct {
5358 bool slideshow;
5459 int ss_delay; /* in ms */
5560
56− int x;
57− int y;
58− int w;
59− int h;
61+ multi_img_t multi;
6062 } img_t;
6163
6264 void img_init(img_t*, win_t*);
@@ -64,21 +66,21 @@ void img_init(img_t*, win_t*);
6466 bool img_load(img_t*, const fileinfo_t*);
6567 void img_close(img_t*, bool);
6668
67−void img_render(img_t*, win_t*);
69+void img_render(img_t*);
6870
69−bool img_fit_win(img_t*, win_t*);
70−bool img_center(img_t*, win_t*);
71+bool img_fit_win(img_t*);
72+bool img_center(img_t*);
7173
72−bool img_zoom(img_t*, win_t*, float);
73−bool img_zoom_in(img_t*, win_t*);
74−bool img_zoom_out(img_t*, win_t*);
74+bool img_zoom(img_t*, float);
75+bool img_zoom_in(img_t*);
76+bool img_zoom_out(img_t*);
7577
76−bool img_move(img_t*, win_t*, int, int);
77−bool img_pan(img_t*, win_t*, direction_t, bool);
78−bool img_pan_edge(img_t*, win_t*, direction_t);
78+bool img_move(img_t*, int, int);
79+bool img_pan(img_t*, direction_t, bool);
80+bool img_pan_edge(img_t*, direction_t);
7981
80−void img_rotate_left(img_t*, win_t*);
81−void img_rotate_right(img_t*, win_t*);
82+void img_rotate_left(img_t*);
83+void img_rotate_right(img_t*);
8284
8385 void img_toggle_antialias(img_t*);
8486
M main.c View
@@ -261,7 +261,7 @@ void update_title() {
261261
262262 void redraw() {
263263 if (mode == MODE_IMAGE) {
264− img_render(&img, &win);
264+ img_render(&img);
265265 if (img.slideshow && !img.multi.animate) {
266266 if (fileidx + 1 < filecnt)
267267 set_timeout(slideshow, img.ss_delay, true);
@@ -269,7 +269,7 @@ void redraw() {
269269 img.slideshow = false;
270270 }
271271 } else {
272− tns_render(&tns, &win);
272+ tns_render(&tns);
273273 }
274274 update_title();
275275 reset_timeout(redraw);
@@ -372,8 +372,8 @@ void on_buttonpress(XButtonEvent *bev) {
372372 set_timeout(reset_cursor, TO_CURSOR_HIDE, true);
373373 load_image(tns.sel);
374374 } else {
375− tns_highlight(&tns, &win, tns.sel, false);
376− tns_highlight(&tns, &win, sel, true);
375+ tns_highlight(&tns, tns.sel, false);
376+ tns_highlight(&tns, sel, true);
377377 tns.sel = sel;
378378 }
379379 redraw();
@@ -469,7 +469,7 @@ int main(int argc, char **argv) {
469469 parse_options(argc, argv);
470470
471471 if (options->clean_cache) {
472− tns_init(&tns, 0);
472+ tns_init(&tns, 0, NULL);
473473 tns_clean_cache(&tns);
474474 exit(0);
475475 }
@@ -513,7 +513,6 @@ int main(int argc, char **argv) {
513513 continue;
514514 }
515515 start = fileidx;
516− printf("reading dir: %s\n", filename);
517516 while ((filename = r_readdir(&dir))) {
518517 check_add_file(filename);
519518 free((void*) filename);
@@ -538,7 +537,7 @@ int main(int argc, char **argv) {
538537
539538 if (options->thumb_mode) {
540539 mode = MODE_THUMB;
541− tns_init(&tns, filecnt);
540+ tns_init(&tns, filecnt, &win);
542541 while (!tns_load(&tns, 0, &files[0], false, false))
543542 remove_file(0, false);
544543 tns.cnt = 1;
M thumbs.c View
@@ -156,7 +156,7 @@ void tns_clean_cache(tns_t *tns) {
156156 }
157157
158158
159−void tns_init(tns_t *tns, int cnt) {
159+void tns_init(tns_t *tns, int cnt, win_t *win) {
160160 int len;
161161 char *homedir;
162162
@@ -170,8 +170,9 @@ void tns_init(tns_t *tns, int cnt) {
170170 tns->thumbs = NULL;
171171 }
172172
173− tns->cnt = tns->first = tns->sel = 0;
174173 tns->cap = cnt;
174+ tns->cnt = tns->first = tns->sel = 0;
175+ tns->win = win;
175176 tns->alpha = true;
176177 tns->dirty = false;
177178
@@ -305,16 +306,17 @@ void tns_check_view(tns_t *tns, bool scrolled) {
305306 }
306307 }
307308
308−void tns_render(tns_t *tns, win_t *win) {
309− int i, cnt, r, x, y;
309+void tns_render(tns_t *tns) {
310310 thumb_t *t;
311+ win_t *win;
312+ int i, cnt, r, x, y;
311313
312− if (!tns || !tns->thumbs || !win)
314+ if (!tns || !tns->thumbs || !tns->win)
313315 return;
314−
315316 if (!tns->dirty)
316317 return;
317318
319+ win = tns->win;
318320 win_clear(win);
319321 imlib_context_set_drawable(win->pm);
320322
@@ -357,17 +359,20 @@ void tns_render(tns_t *tns, win_t *win) {
357359 }
358360
359361 tns->dirty = false;
360− tns_highlight(tns, win, tns->sel, true);
362+ tns_highlight(tns, tns->sel, true);
361363 }
362364
363−void tns_highlight(tns_t *tns, win_t *win, int n, bool hl) {
365+void tns_highlight(tns_t *tns, int n, bool hl) {
364366 thumb_t *t;
367+ win_t *win;
365368 int x, y;
366369 unsigned long col;
367370
368− if (!tns || !tns->thumbs || !win)
371+ if (!tns || !tns->thumbs || !tns->win)
369372 return;
370373
374+ win = tns->win;
375+
371376 if (n >= 0 && n < tns->cnt) {
372377 t = &tns->thumbs[n];
373378
@@ -387,10 +392,10 @@ void tns_highlight(tns_t *tns, win_t *win, int n, bool hl) {
387392 win_draw(win);
388393 }
389394
390−bool tns_move_selection(tns_t *tns, win_t *win, direction_t dir) {
395+bool tns_move_selection(tns_t *tns, direction_t dir) {
391396 int old;
392397
393− if (!tns || !tns->thumbs || !win)
398+ if (!tns || !tns->thumbs)
394399 return false;
395400
396401 old = tns->sel;
@@ -415,10 +420,10 @@ bool tns_move_selection(tns_t *tns, win_t *win, direction_t dir) {
415420 }
416421
417422 if (tns->sel != old) {
418− tns_highlight(tns, win, old, false);
423+ tns_highlight(tns, old, false);
419424 tns_check_view(tns, false);
420425 if (!tns->dirty)
421− tns_highlight(tns, win, tns->sel, true);
426+ tns_highlight(tns, tns->sel, true);
422427 }
423428
424429 return tns->sel != old;
M thumbs.h View
@@ -26,39 +26,42 @@
2626 #include "window.h"
2727
2828 typedef struct {
29− Imlib_Image *im;
3029 const fileinfo_t *file;
31− int x;
32− int y;
30+ Imlib_Image *im;
3331 int w;
3432 int h;
33+ int x;
34+ int y;
3535 } thumb_t;
3636
3737 typedef struct {
3838 thumb_t *thumbs;
3939 int cap;
4040 int cnt;
41+ int first;
42+ int sel;
43+
44+ win_t *win;
4145 int x;
4246 int y;
4347 int cols;
4448 int rows;
45− int first;
46− int sel;
49+
4750 bool alpha;
4851 bool dirty;
4952 } tns_t;
5053
5154 void tns_clean_cache(tns_t*);
5255
53−void tns_init(tns_t*, int);
56+void tns_init(tns_t*, int, win_t*);
5457 void tns_free(tns_t*);
5558
5659 bool tns_load(tns_t*, int, const fileinfo_t*, bool, bool);
5760
58−void tns_render(tns_t*, win_t*);
59−void tns_highlight(tns_t*, win_t*, int, bool);
61+void tns_render(tns_t*);
62+void tns_highlight(tns_t*, int, bool);
6063
61−bool tns_move_selection(tns_t*, win_t*, direction_t);
64+bool tns_move_selection(tns_t*, direction_t);
6265 bool tns_scroll(tns_t*, direction_t);
6366
6467 int tns_translate(tns_t*, int, int);