X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=utils%2Fcolors.c;h=e06359c72db811738959df9bc1f733e359485a4d;hb=ec8d2b32b63649e6d32bdfb306eda062769af823;hp=94d6acbd9672d9efb3038c3f21dc73a07d6f583d;hpb=3d9140a05b5272fed0883a0af0a71e30ef44d47f;p=xscreensaver diff --git a/utils/colors.c b/utils/colors.c index 94d6acbd..e06359c7 100644 --- a/utils/colors.c +++ b/utils/colors.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1997 Jamie Zawinski +/* xscreensaver, Copyright (c) 1997, 2002 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 @@ -336,16 +336,11 @@ make_color_path (Display *dpy, Colormap cmap, k = 0; for (i = 0; i < npoints; i++) { - int distance, direction; - distance = h[(i+1) % npoints] - h[i]; - direction = (distance >= 0 ? -1 : 1); - - if (distance > 180) - distance = 180 - (distance - 180); - else if (distance < -180) - distance = -(180 - ((-distance) - 180)); - else - direction = -direction; + int distance = h[(i+1) % npoints] - h[i]; + int direction = (distance >= 0 ? -1 : 1); + + if (distance <= 180 && distance >= -180) + direction = -direction; #ifdef DEBUG fprintf (stderr, "point %d: %3d %.2f %.2f\n", @@ -480,6 +475,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap, double total_s = 0; double total_v = 0; Screen *screen = (dpy ? DefaultScreenOfDisplay(dpy) : 0); /* #### WRONG! */ + int loop = 0; if (*ncolorsP <= 0) return; @@ -495,6 +491,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap, for (i = 0; i < npoints; i++) { REPICK_THIS_COLOR: + if (++loop > 10000) abort(); h[i] = random() % 360; s[i] = frand(1.0); v[i] = frand(0.8) + 0.2; @@ -539,7 +536,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap, allocate_p, (writable_pP && *writable_pP)); /* If we tried for writable cells and got none, try for non-writable. */ - if (allocate_p && *ncolorsP == 0 && *writable_pP) + if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP) { *writable_pP = False; goto RETRY_NON_WRITABLE; @@ -578,7 +575,7 @@ make_uniform_colormap (Display *dpy, Visual *visual, Colormap cmap, 0, S, V, 359, S, V, colors, &ncolors, - False, True, + False, allocate_p, (writable_pP && *writable_pP)); /* If we tried for writable cells and got none, try for non-writable. */