Kaynağa Gözat

Immediately respond to events while loading thumbs

master
Bert 13 yıl önce
ebeveyn
işleme
b828b55419
3 değiştirilmiş dosya ile 20 ekleme ve 4 silme
  1. +15
    -4
      main.c
  2. +2
    -0
      thumbs.c
  3. +3
    -0
      util.h

+ 15
- 4
main.c Dosyayı Görüntüle

@@ -22,6 +22,7 @@
#include <dirent.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <sys/time.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -469,7 +470,7 @@ void on_motionnotify(XMotionEvent *mev) {
void run() {
int xfd;
fd_set fds;
struct timeval t;
struct timeval t, t0;
XEvent ev;

timeout = 0;
@@ -477,12 +478,22 @@ void run() {
while (1) {
if (mode == MODE_THUMBS && tns_loaded < filecnt) {
win_set_cursor(&win, CURSOR_WATCH);
tns_load(&tns, &win, filenames[tns_loaded++]);
tns_render(&tns, &win);
gettimeofday(&t0, 0);

while (!XPending(win.env.dpy) && tns_loaded < filecnt) {
tns_load(&tns, &win, filenames[tns_loaded++]);
gettimeofday(&t, 0);
if (TV_TO_DOUBLE(t) - TV_TO_DOUBLE(t0) >= 0.25)
break;
}
if (tns_loaded == filecnt)
win_set_cursor(&win, CURSOR_ARROW);
else if (!XPending(win.env.dpy))
if (!XPending(win.env.dpy)) {
tns_render(&tns, &win);
continue;
} else {
timeout = 1;
}
} else if (timeout) {
t.tv_sec = 0;
t.tv_usec = 75000;


+ 2
- 0
thumbs.c Dosyayı Görüntüle

@@ -84,6 +84,8 @@ void tns_render(tns_t *tns, win_t *win) {

if (!tns || !win)
return;
printf("tns_render()\n");

tns->cols = win->w / thumb_dim;
tns->rows = win->h / thumb_dim;


+ 3
- 0
util.h Dosyayı Görüntüle

@@ -27,6 +27,9 @@
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define LEN(a) (sizeof(a) / sizeof(a[0]))

#define TV_TO_DOUBLE(x) ((double) ((x).tv_sec) + 0.000001 * \
(double) ((x).tv_usec))

void* s_malloc(size_t);
void* s_realloc(void*, size_t);



Yükleniyor…
İptal
Kaydet