X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Flcdscrub.c;h=d82bd95fc0707b972a8f22a828d98f26ba9be627;hp=700de61ec99c36e0ef5a99986dad971ca0d1748d;hb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;hpb=de460e831dc8578acfa8b72251ab9346c99c1f96 diff --git a/hacks/lcdscrub.c b/hacks/lcdscrub.c index 700de61e..d82bd95f 100644 --- a/hacks/lcdscrub.c +++ b/hacks/lcdscrub.c @@ -24,6 +24,7 @@ struct state { DIAG_W, DIAG_B, WHITE, BLACK, END } mode; + unsigned int enabled_mask; int count; GC fg, bg; int delay; @@ -32,6 +33,19 @@ struct state { }; +static void +pick_mode (struct state *st) +{ + st->count = 0; + while (1) + { + if (++st->mode == END) + st->mode = 0; + if (st->enabled_mask & (1 << st->mode)) + break; + } +} + static void * lcdscrub_init (Display *dpy, Window window) { @@ -56,6 +70,26 @@ lcdscrub_init (Display *dpy, Window window) jwxyz_XSetAntiAliasing (st->dpy, st->bg, False); #endif + st->enabled_mask = 0; +# define PREF(R,F) \ + if (get_boolean_resource (st->dpy, R, "Mode")) st->enabled_mask |= (1 << F) + PREF("modeHW", HORIZ_W); + PREF("modeHB", HORIZ_B); + PREF("modeVW", VERT_W); + PREF("modeVB", VERT_B); + PREF("modeDW", DIAG_W); + PREF("modeDB", DIAG_B); + PREF("modeW", WHITE); + PREF("modeB", BLACK); +# undef PREF + if (! st->enabled_mask) + { + fprintf (stderr, "%s: no modes enabled\n", progname); + exit (1); + } + + pick_mode (st); + return st; } @@ -96,7 +130,7 @@ lcdscrub_draw (Display *dpy, Window window, void *closure) break; case WHITE: case BLACK: - XFillRectangle (st->dpy, st->window, fg, 0, 0, + XFillRectangle (st->dpy, st->window, bg, 0, 0, st->xgwa.width, st->xgwa.height); break; default: @@ -107,11 +141,7 @@ lcdscrub_draw (Display *dpy, Window window, void *closure) st->count++; if (st->count > st->spread * st->cycles) - { - st->count = 0; - if (++st->mode == END) - st->mode = 0; - } + pick_mode (st); return st->delay; } @@ -144,6 +174,14 @@ static const char *lcdscrub_defaults [] = { "*delay: 100000", "*spread: 8", "*cycles: 60", + "*modeHW: True", + "*modeHB: True", + "*modeVW: True", + "*modeVB: True", + "*modeDW: True", + "*modeDB: True", + "*modeW: True", + "*modeB: True", 0 }; @@ -151,6 +189,14 @@ static XrmOptionDescRec lcdscrub_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-spread", ".spread", XrmoptionSepArg, 0 }, { "-cycles", ".cycles", XrmoptionSepArg, 0 }, + { "-no-hw", ".modeHW", XrmoptionNoArg, "False" }, + { "-no-hb", ".modeHB", XrmoptionNoArg, "False" }, + { "-no-vw", ".modeVW", XrmoptionNoArg, "False" }, + { "-no-vb", ".modeVB", XrmoptionNoArg, "False" }, + { "-no-dw", ".modeDW", XrmoptionNoArg, "False" }, + { "-no-db", ".modeDB", XrmoptionNoArg, "False" }, + { "-no-w", ".modeW", XrmoptionNoArg, "False" }, + { "-no-b", ".modeB", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } };