-/* xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
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);
}
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)
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");
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)
if (st->break_para)
st->y++;
+ st->break_para = 0;
+
if (st->mode == 1 || st->mode == 2)
{
/* 1 = left margin goes southwest; 2 = southeast */
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);
}
}
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--;
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;
}