X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fbouboule.c;h=1ac0425f447cdd0a3ee453834077a3a14cd0c75a;hb=78add6e627ee5f10e1fa6f3852602ea5066eee5a;hp=15bf2278441b01174e98bbb352c5f0cced89104d;hpb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;p=xscreensaver diff --git a/hacks/bouboule.c b/hacks/bouboule.c index 15bf2278..1ac0425f 100644 --- a/hacks/bouboule.c +++ b/hacks/bouboule.c @@ -78,16 +78,17 @@ static const char sccsid[] = "@(#)bouboule.c 4.00 97/01/01 xlockmore"; "*size: 15 \n" \ "*delay: 20000 \n" \ "*ncolors: 64 \n" \ - "*use3d: False \n" \ + "*use3d: True \n" \ "*delta3d: 1.5 \n" \ "*right3d: red \n" \ "*left3d: blue \n" \ "*both3d: magenta \n" \ "*none3d: black \n" \ - "*fpsSolid: true \n" + "*fpsSolid: true \n" \ + "*ignoreRotation: True \n" # define SMOOTH_COLORS -# define reshape_bouboule 0 +# define release_bouboule 0 # define bouboule_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -315,11 +316,9 @@ init_bouboule(ModeInfo * mi) int i; double theta, omega; - if (starfield == NULL) { - if ((starfield = (StarField *) calloc(MI_NUM_SCREENS(mi), - sizeof (StarField))) == NULL) - return; - } + if (MI_WIDTH(mi) > 2560) size *= 2; /* Retina displays */ + + MI_INIT (mi, starfield); sp = &starfield[MI_SCREEN(mi)]; sp->width = MI_WIN_WIDTH(mi); @@ -543,7 +542,7 @@ draw_bouboule(ModeInfo * mi) Star *star; XArc *arc = NULL, *arcleft = NULL; -#ifdef HAVE_COCOA /* Don't second-guess Quartz's double-buffering */ +#ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #endif @@ -804,44 +803,56 @@ draw_bouboule(ModeInfo * mi) } ENTRYPOINT void -release_bouboule(ModeInfo * mi) +free_bouboule(ModeInfo * mi) { - if (starfield != NULL) { - int screen; - - for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { - StarField *sp = &starfield[screen]; - - if (sp->star) - (void) free((void *) sp->star); - if (sp->xarc) - (void) free((void *) sp->xarc); - if (sp->xarcleft) - (void) free((void *) sp->xarcleft); + StarField *sp = &starfield[MI_SCREEN(mi)]; + + if (sp->star) + (void) free((void *) sp->star); + if (sp->xarc) + (void) free((void *) sp->xarc); + if (sp->xarcleft) + (void) free((void *) sp->xarcleft); #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) - if (sp->oldxarc) - (void) free((void *) sp->oldxarc); - if (sp->oldxarcleft) - (void) free((void *) sp->oldxarcleft); + if (sp->oldxarc) + (void) free((void *) sp->oldxarc); + if (sp->oldxarcleft) + (void) free((void *) sp->oldxarcleft); #endif - sinfree(&(sp->x)); - sinfree(&(sp->y)); - sinfree(&(sp->z)); - sinfree(&(sp->sizex)); - sinfree(&(sp->sizey)); - sinfree(&(sp->thetax)); - sinfree(&(sp->thetay)); - sinfree(&(sp->thetaz)); - } - (void) free((void *) starfield); - starfield = NULL; - } + sinfree(&(sp->x)); + sinfree(&(sp->y)); + sinfree(&(sp->z)); + sinfree(&(sp->sizex)); + sinfree(&(sp->sizey)); + sinfree(&(sp->thetax)); + sinfree(&(sp->thetay)); + sinfree(&(sp->thetaz)); } +ENTRYPOINT void +reshape_bouboule(ModeInfo * mi, int width, int height) +{ + StarField *sp = &starfield[MI_SCREEN(mi)]; + sp->width = width; + sp->height = height; + sininit(&sp->x, + sp->x.alpha, sp->x.step, + ((double) sp->width) / 4.0, + 3.0 * ((double) sp->width) / 4.0, + POSCANRAND); + sininit(&sp->y, + sp->y.alpha, sp->y.step, + ((double) sp->height) / 4.0, + 3.0 * ((double) sp->height) / 4.0, + POSCANRAND); +} + +#ifndef STANDALONE ENTRYPOINT void refresh_bouboule(ModeInfo * mi) { /* Do nothing, it will refresh by itself */ } +#endif XSCREENSAVER_MODULE ("Bouboule", bouboule)