-/* xscreensaver, Copyright (c) 1999-2006 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999-2018 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
XPoint points[11];
int x = t->x;
int y = t->y;
- int s = t->size / 0.383; /* trial and error, I forget how to derive this */
+
+ /*
+ The following constant is really:
+ sqrt(5 - sqrt(5)) / sqrt(25 - 11 * sqrt(5))
+
+ Reference: http://mathworld.wolfram.com/Pentagram.html
+ */
+ int s = t->size * 2.6180339887498985;
int s2 = t->size;
double c = M_PI * 2;
double o = -M_PI / 2;
int s = (t->size + t->thickness) / 2;
XPoint points[3];
- points[0].x = 0; points[0].y = t->y - s;
- points[1].x = t->x - s; points[1].y = t->y - s;
- points[2].x = t->x - s; points[2].y = 0;
- XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
-
- points[0].x = 0; points[0].y = t->y + s;
- points[1].x = t->x - s; points[1].y = t->y + s;
- points[2].x = t->x - s; points[2].y = t->max_size;
- XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
-
- points[0].x = t->x + s; points[0].y = 0;
- points[1].x = t->x + s; points[1].y = t->y - s;
- points[2].x = t->max_size; points[2].y = t->y - s;
- XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+ if (t->y > s)
+ {
+ points[0].x = 0; points[0].y = t->y - s;
+ points[1].x = t->x - s; points[1].y = t->y - s;
+ points[2].x = t->x - s; points[2].y = 0;
+ XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+
+ points[0].x = t->x + s; points[0].y = 0;
+ points[1].x = t->x + s; points[1].y = t->y - s;
+ points[2].x = t->max_size; points[2].y = t->y - s;
+ XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+ }
- points[0].x = t->x + s; points[0].y = t->max_size;
- points[1].x = t->x + s; points[1].y = t->y + s;
- points[2].x = t->max_size; points[2].y = t->y + s;
- XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+ if (t->x > s)
+ {
+ points[0].x = 0; points[0].y = t->y + s;
+ points[1].x = t->x - s; points[1].y = t->y + s;
+ points[2].x = t->x - s; points[2].y = t->max_size;
+ XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+
+ points[0].x = t->x + s; points[0].y = t->max_size;
+ points[1].x = t->x + s; points[1].y = t->y + s;
+ points[2].x = t->max_size; points[2].y = t->y + s;
+ XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin);
+ }
}
struct throbber *t = (struct throbber *) malloc (sizeof (*t));
t->x = w / 2;
t->y = h / 2;
- t->max_size = w;
+ t->max_size = (w > h ? w : h);
t->speed = get_integer_resource (st->dpy, "speed", "Speed");
t->fuse = 1 + (random() % 4);
t->thickness = get_integer_resource (st->dpy, "thickness", "Thickness");
+ if (st->xgwa.width > 2560) t->thickness *= 3; /* Retina displays */
+
if (t->speed < 0) t->speed = -t->speed;
t->speed += (((random() % t->speed) / 2) - (t->speed / 2));
if (t->speed > 0) t->speed = -t->speed;
- if (random() % 4)
- t->size = t->max_size;
- else
- t->size = t->thickness, t->speed = -t->speed;
-
flags = GCForeground;
-# ifndef HAVE_COCOA
+# ifndef HAVE_JWXYZ
if (st->transparent_p)
{
gcv.foreground = ~0L;
flags |= GCPlaneMask;
}
else
-# endif /* !HAVE_COCOA */
+# endif /* !HAVE_JWXYZ */
{
gcv.foreground = pixel;
}
flags |= (GCLineWidth | GCCapStyle | GCJoinStyle);
t->gc = XCreateGC (st->dpy, d, flags, &gcv);
-# ifdef HAVE_COCOA
+# ifdef HAVE_JWXYZ
if (st->transparent_p)
{
/* give a non-opaque alpha to the color */
jwxyz_XSetAlphaAllowed (st->dpy, t->gc, True);
XSetForeground (st->dpy, t->gc, pixel);
}
-# endif /* HAVE_COCOA */
+# endif /* HAVE_JWXYZ */
switch (random() % 11) {
case 0: case 1: case 2: case 3: t->draw = draw_star; break;
default: abort(); break;
}
+ if (t->draw == draw_circle)
+ t->max_size *= 1.5;
+
+ if (random() % 4)
+ t->size = t->max_size;
+ else
+ t->size = t->thickness, t->speed = -t->speed;
+
return t;
}
st->dbeclear_p = get_boolean_resource (st->dpy, "useDBEClear", "Boolean");
#endif
-# ifdef HAVE_COCOA /* Don't second-guess Quartz's double-buffering */
+# ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */
st->dbuf = False;
# endif
st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap,
"foreground", "Foreground");
}
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
else if (st->transparent_p)
{
st->nplanes = get_integer_resource (st->dpy, "planes", "Planes");
goto COLOR;
}
}
-#endif /* !HAVE_COCOA */
+#endif /* !HAVE_JWXYZ */
else
{
-#ifndef HAVE_COCOA
+#ifndef HAVE_JWXYZ
COLOR:
#endif
- make_random_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+ make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
st->colors, &st->ncolors, True, True, 0, True);
if (st->ncolors < 2)
goto MONO;
static const char *deluxe_defaults [] = {
".background: black",
".foreground: white",
- "*delay: 5000",
+ "*delay: 10000",
"*count: 5",
"*thickness: 50",
"*speed: 15",
"*useDBE: True",
"*useDBEClear: True",
#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+#ifdef HAVE_MOBILE
+ "*ignoreRotation: True",
+#endif
0
};