X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fxjack.c;h=da913c724fada1f2e238610feb61b911d21c13e2;hb=4ade52359b6eba3621566dac79793a33aa4c915f;hp=b101f8573a45e47a827fd808cff09e106736b968;hpb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;p=xscreensaver diff --git a/hacks/xjack.c b/hacks/xjack.c index b101f857..da913c72 100644 --- a/hacks/xjack.c +++ b/hacks/xjack.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski +/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -62,12 +62,18 @@ xjack_reshape (Display *dpy, Window window, void *closure, st->rows--; st->columns--; + /* If the window is stupidly small, just truncate. */ + if (st->rows < 4) st->rows = 4; + if (st->columns < 12) st->columns = 12; + if (st->y > st->rows) st->y = st->rows-1; if (st->x > st->columns) st->x = st->columns-2; if (st->right > st->columns) st->right = st->columns; if (st->left > st->columns-20) st->left = st->columns-20; if (st->left < 0) st->left = 0; + + XClearWindow (st->dpy, st->window); } @@ -83,6 +89,12 @@ xjack_init (Display *dpy, Window window) st->s = source; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); fontname = get_string_resource (st->dpy, "font", "Font"); + + XGetWindowAttributes (st->dpy, st->window, &st->xgwa); + + if (st->xgwa.width <= 480) + fontname = "-*-courier-medium-r-*-*-*-180-*-*-m-*-*-*"; + st->font = XLoadQueryFont (st->dpy, fontname); if (!st->font) @@ -98,8 +110,6 @@ xjack_init (Display *dpy, Window window) exit(1); } - XGetWindowAttributes (st->dpy, st->window, &st->xgwa); - gcv.font = st->font->fid; gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); @@ -117,9 +127,12 @@ xjack_init (Display *dpy, Window window) xjack_reshape (dpy, window, st, st->xgwa.width, st->xgwa.height); st->left = 0xFF & (random() % ((st->columns / 2)+1)); - st->right = st->left + (0xFF & (random() % (st->columns - st->left - 10) + st->right = st->left + (0xFF & (random() % (st->columns - st->left) + 10)); - st->x = 0; + if (st->right < st->left + 10) st->right = st->left + 10; + if (st->right > st->columns) st->right = st->columns; + + st->x = st->left; st->y = 0; if (st->xgwa.width > 200 && st->xgwa.height > 200) @@ -237,6 +250,8 @@ xjack_draw (Display *dpy, Window window, void *closure) if (st->break_para) st->y++; + st->break_para = 0; + if (st->mode == 1 || st->mode == 2) { /* 1 = left margin goes southwest; 2 = southeast */ @@ -269,14 +284,20 @@ xjack_draw (Display *dpy, Window window, void *closure) if (st->y >= st->rows-1) /* bottom of page */ { +# if 0 /* Nah, this looks bad. */ + /* scroll by 1-5 lines */ st->scrolling = (random() % 5 ? 0 : (0xFF & (random() % 5))) + 1; + if (st->break_para) st->scrolling++; /* but sometimes scroll by a whole page */ if (0 == (random() % 100)) st->scrolling += st->rows; +# else + st->scrolling = 1; +# endif return xjack_scroll (st); } @@ -336,7 +357,7 @@ xjack_draw (Display *dpy, Window window, void *closure) } if ((tolower(c) != tolower(*st->s)) - ? (0 == (random() % 10)) /* backup to correct */ + ? (0 == (random() % 10)) /* backup to correct */ : (0 == (random() % 400))) /* fail to advance */ { st->x--; @@ -407,6 +428,13 @@ xjack_draw (Display *dpy, Window window, void *closure) if (st->right > st->columns) st->left -= (st->right - st->columns); } + + if (st->right - st->left < 5) + st->left = st->right - 5; + if (st->left < 0) + st->left = 0; + if (st->right - st->left < 5) + st->right = st->left + 5; } st->s = source; }