X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fxanalogtv.c;h=1565c8927581b6c3f82319f4adc26b9ca099429e;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=7df31599e63fdcc7a561d8c41cf61f35d77915b6;hpb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;p=xscreensaver diff --git a/hacks/xanalogtv.c b/hacks/xanalogtv.c index 7df31599..1565c892 100644 --- a/hacks/xanalogtv.c +++ b/hacks/xanalogtv.c @@ -34,7 +34,7 @@ # include #endif -#ifndef HAVE_COCOA +#ifndef HAVE_JWXYZ # include /* for XtDatabase in hack_resources() */ #endif @@ -60,7 +60,7 @@ typedef struct chansetting_s { analogtv_reception recs[MAX_MULTICHAN]; double noise_level; Bool image_loaded_p; - char *filename; /* mostly unused */ +/* char *filename; was only used for diagnostics */ int dur; } chansetting; @@ -238,8 +238,8 @@ static const char *xanalogtv_defaults [] = { ".background: black", ".foreground: white", "*delay: 5", - "*grabDesktopImages: False", /* HAVE_COCOA */ - "*chooseRandomImages: True", /* HAVE_COCOA */ + "*grabDesktopImages: False", /* HAVE_JWXYZ */ + "*chooseRandomImages: True", /* HAVE_JWXYZ */ ANALOGTV_DEFAULTS 0, }; @@ -281,7 +281,7 @@ getticks(struct state *st) static void hack_resources (Display *dpy) { -#ifndef HAVE_COCOA +#ifndef HAVE_JWXYZ static int count = -1; count++; @@ -301,7 +301,7 @@ hack_resources (Display *dpy) value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); } -#endif /* HAVE_COCOA */ +#endif /* HAVE_JWXYZ */ } @@ -531,10 +531,14 @@ xanalogtv_draw (Display *dpy, Window window, void *closure) int curticks=getticks(st); double curtime=curticks*0.001; - if (st->change_now || - (curticks >= st->change_ticks && st->tv->powerup > 10.0)) { + const analogtv_reception *recs[MAX_MULTICHAN]; + unsigned rec_count = 0; + + int auto_change = curticks >= st->change_ticks && st->tv->powerup > 10.0 ? 1 : 0; + + if (st->change_now || auto_change) { + st->curinputi=(st->curinputi+st->change_now+auto_change+N_CHANNELS)%N_CHANNELS; st->change_now = 0; - st->curinputi=(st->curinputi+1)%N_CHANNELS; st->cs = &st->chansettings[st->curinputi]; #if 0 fprintf (stderr, "%s: channel %d, %s\n", progname, st->curinputi, @@ -559,17 +563,21 @@ xanalogtv_draw (Display *dpy, Window window, void *closure) st->tv->powerup=curtime; - analogtv_init_signal(st->tv, st->cs->noise_level); for (i=0; ics->recs[i]; - analogtv_input *inp=rec->input; - if (!inp) continue; - - analogtv_reception_update(rec); - analogtv_add_signal(st->tv, rec); + if (rec->input) { + analogtv_reception_update(rec); + recs[rec_count] = rec; + ++rec_count; + } } - analogtv_draw(st->tv); - return 10000; + analogtv_draw(st->tv, st->cs->noise_level, recs, rec_count); + +#ifdef HAVE_MOBILE + return 0; +#else + return 5000; +#endif } static void @@ -587,7 +595,8 @@ xanalogtv_event (Display *dpy, Window window, void *closure, XEvent *event) if (event->type == ButtonPress) { - st->change_now = 1; + unsigned button = event->xbutton.button; + st->change_now = button == 2 || button == 3 || button == 5 ? -1 : 1; return True; } else if (event->type == KeyPress) @@ -595,11 +604,26 @@ xanalogtv_event (Display *dpy, Window window, void *closure, XEvent *event) KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); - if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + if (c == ' ' || c == '\t' || c == '\r' || c == '\n' || + keysym == XK_Up || keysym == XK_Right || keysym == XK_Prior) { st->change_now = 1; return True; } + else if (c == '\b' || + keysym == XK_Down || keysym == XK_Left || keysym == XK_Next) + { + st->change_now = -1; + return True; + } + else if (screenhack_event_helper (dpy, window, event)) + goto DEF; + } + else if (screenhack_event_helper (dpy, window, event)) + { + DEF: + st->change_now = ((random() & 1) ? 1 : -1); + return True; } return False;