X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fgrav.c;fp=hacks%2Fgrav.c;h=305b8e81b8bcfe778e76008b5fae68881ce98e5c;hp=c899fa99b0f63dc0155699439054bbdd3a9b5f9a;hb=39809ded547bdbb08207d3e514950425215b4410;hpb=4361b69d3178d7fc98d0388f9a223af6c2651aba diff --git a/hacks/grav.c b/hacks/grav.c index c899fa99..305b8e81 100644 --- a/hacks/grav.c +++ b/hacks/grav.c @@ -34,6 +34,7 @@ static const char sccsid[] = "@(#)grav.c 5.00 2000/11/01 xlockmore"; "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ + "*lowrez: True \n" \ #define BRIGHT_COLORS # define release_grav 0 @@ -75,7 +76,7 @@ ENTRYPOINT ModeSpecOpt grav_opts = #ifdef USE_MODULES ModStruct grav_description = {"grav", "init_grav", "draw_grav", (char *) NULL, - "refresh_grav", "init_grav", (char *) NULL, &grav_opts, + "refresh_grav", "init_grav", "free_grav", &grav_opts, 10000, -12, 1, 1, 64, 1.0, "", "Shows orbiting planets", 0, NULL}; @@ -140,9 +141,6 @@ static gravstruct *gravs = (gravstruct *) NULL; static void init_planet(ModeInfo * mi, planetstruct * planet) { - Display *display = MI_DISPLAY(mi); - Window window = MI_WINDOW(mi); - GC gc = MI_GC(mi); gravstruct *gp = &gravs[MI_SCREEN(mi)]; # ifdef HAVE_JWXYZ @@ -171,9 +169,6 @@ init_planet(ModeInfo * mi, planetstruct * planet) VEL(X) = FLOATRAND(-VR, VR); VEL(Y) = FLOATRAND(-VR, VR); VEL(Z) = FLOATRAND(-VR, VR); - - /* Draw planets */ - Planet(planet->xi, planet->yi); } static void @@ -236,17 +231,13 @@ draw_planet(ModeInfo * mi, planetstruct * planet) Planet(gp->x, gp->y); } -static void free_grav(ModeInfo * mi); - ENTRYPOINT void init_grav(ModeInfo * mi) { - Display *display = MI_DISPLAY(mi); - GC gc = MI_GC(mi); unsigned char ball; gravstruct *gp; - MI_INIT (mi, gravs, free_grav); + MI_INIT (mi, gravs); gp = &gravs[MI_SCREEN(mi)]; gp->width = MI_WIDTH(mi); @@ -276,11 +267,6 @@ init_grav(ModeInfo * mi) gp->starcolor = MI_WHITE_PIXEL(mi); for (ball = 0; ball < (unsigned char) gp->nplanets; ball++) init_planet(mi, &gp->planets[ball]); - - /* Draw centrepoint */ - XDrawArc(display, MI_WINDOW(mi), gc, - gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr, - 0, 23040); } ENTRYPOINT void @@ -298,6 +284,20 @@ draw_grav(ModeInfo * mi) if (gp->planets == NULL) return; + if (!MI_IS_DRAWN(mi)) { + for (ball = 0; ball < (unsigned char) gp->nplanets; ball++) { + planetstruct *planet = &gp->planets[ball]; + + /* Draw planets */ + Planet(planet->xi, planet->yi); + } + + /* Draw centrepoint */ + XDrawArc(display, MI_WINDOW(mi), gc, + gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr, + 0, 23040); + } + MI_IS_DRAWN(mi) = True; /* Mask centrepoint */ XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); @@ -335,7 +335,7 @@ reshape_grav(ModeInfo * mi, int width, int height) XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); } -static void +ENTRYPOINT void free_grav(ModeInfo * mi) { gravstruct *gp = &gravs[MI_SCREEN(mi)]; @@ -343,11 +343,13 @@ free_grav(ModeInfo * mi) (void) free((void *) gp->planets); } +#ifndef STANDALONE ENTRYPOINT void refresh_grav(ModeInfo * mi) { MI_CLEARWINDOW(mi); } +#endif XSCREENSAVER_MODULE ("Grav", grav)