X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fgrav.c;h=305b8e81b8bcfe778e76008b5fae68881ce98e5c;hb=39809ded547bdbb08207d3e514950425215b4410;hp=1aedf93adb4fff71d50a591dc803a03c0b006b92;hpb=e4fa2ac140f7bc56571373a7b7eb585fa4500e38;p=xscreensaver diff --git a/hacks/grav.c b/hacks/grav.c index 1aedf93a..305b8e81 100644 --- a/hacks/grav.c +++ b/hacks/grav.c @@ -29,34 +29,35 @@ static const char sccsid[] = "@(#)grav.c 5.00 2000/11/01 xlockmore"; #ifdef STANDALONE #define MODE_grav -#define PROGCLASS "Grav" -#define HACK_INIT init_grav -#define HACK_DRAW draw_grav -#define grav_opts xlockmore_opts -#define DEFAULTS "*delay: 10000 \n" \ - "*count: 12 \n" \ - "*ncolors: 64 \n" +#define DEFAULTS "*delay: 10000 \n" \ + "*count: 12 \n" \ + "*ncolors: 64 \n" \ + "*fpsSolid: true \n" \ + "*ignoreRotation: True \n" \ + "*lowrez: True \n" \ + #define BRIGHT_COLORS -#include "xlockmore.h" /* in xscreensaver distribution */ +# define release_grav 0 +# define grav_handle_event 0 +# include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ -#include "xlock.h" /* in xlockmore distribution */ - +# include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_grav -#define DEF_DECAY "False" /* Damping for decaying orbits */ -#define DEF_TRAIL "False" /* For trails (works good in mono only) */ +#define DEF_DECAY "True" /* Damping for decaying orbits */ +#define DEF_TRAIL "True" /* For trails (works good in mono only) */ static Bool decay; static Bool trail; static XrmOptionDescRec opts[] = { - {(char *) "-decay", (char *) ".grav.decay", XrmoptionNoArg, (caddr_t) "on"}, - {(char *) "+decay", (char *) ".grav.decay", XrmoptionNoArg, (caddr_t) "off"}, - {(char *) "-trail", (char *) ".grav.trail", XrmoptionNoArg, (caddr_t) "on"}, - {(char *) "+trail", (char *) ".grav.trail", XrmoptionNoArg, (caddr_t) "off"} + {"-decay", ".grav.decay", XrmoptionNoArg, "on"}, + {"+decay", ".grav.decay", XrmoptionNoArg, "off"}, + {"-trail", ".grav.trail", XrmoptionNoArg, "on"}, + {"+trail", ".grav.trail", XrmoptionNoArg, "off"} }; static argtype vars[] = { @@ -65,17 +66,17 @@ static argtype vars[] = }; static OptionStruct desc[] = { - {(char *) "-/+decay", (char *) "turn on/off decaying orbits"}, - {(char *) "-/+trail", (char *) "turn on/off trail dots"} + {"-/+decay", "turn on/off decaying orbits"}, + {"-/+trail", "turn on/off trail dots"} }; -ModeSpecOpt grav_opts = +ENTRYPOINT ModeSpecOpt grav_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct grav_description = -{"grav", "init_grav", "draw_grav", "release_grav", - "refresh_grav", "init_grav", (char *) NULL, &grav_opts, +{"grav", "init_grav", "draw_grav", (char *) NULL, + "refresh_grav", "init_grav", "free_grav", &grav_opts, 10000, -12, 1, 1, 64, 1.0, "", "Shows orbiting planets", 0, NULL}; @@ -140,11 +141,12 @@ 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 + jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); +# endif + if (MI_NPIXELS(mi) > 2) planet->colors = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))); else @@ -167,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 @@ -232,19 +231,13 @@ draw_planet(ModeInfo * mi, planetstruct * planet) Planet(gp->x, gp->y); } -void +ENTRYPOINT void init_grav(ModeInfo * mi) { - Display *display = MI_DISPLAY(mi); - GC gc = MI_GC(mi); unsigned char ball; gravstruct *gp; - if (gravs == NULL) { - if ((gravs = (gravstruct *) calloc(MI_NUM_SCREENS(mi), - sizeof (gravstruct))) == NULL) - return; - } + MI_INIT (mi, gravs); gp = &gravs[MI_SCREEN(mi)]; gp->width = MI_WIDTH(mi); @@ -274,14 +267,9 @@ 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); } -void +ENTRYPOINT void draw_grav(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); @@ -296,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)); @@ -324,27 +326,31 @@ draw_grav(ModeInfo * mi) draw_planet(mi, &gp->planets[ball]); } -void -release_grav(ModeInfo * mi) +ENTRYPOINT void +reshape_grav(ModeInfo * mi, int width, int height) { - if (gravs != NULL) { - int screen; - - for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { - gravstruct *gp = &gravs[screen]; + gravstruct *gp = &gravs[MI_SCREEN(mi)]; + gp->width = width; + gp->height = height; + XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); +} - if (gp->planets) - (void) free((void *) gp->planets); - } - (void) free((void *) gravs); - gravs = (gravstruct *) NULL; - } +ENTRYPOINT void +free_grav(ModeInfo * mi) +{ + gravstruct *gp = &gravs[MI_SCREEN(mi)]; + if (gp->planets) + (void) free((void *) gp->planets); } -void +#ifndef STANDALONE +ENTRYPOINT void refresh_grav(ModeInfo * mi) { MI_CLEARWINDOW(mi); } +#endif + +XSCREENSAVER_MODULE ("Grav", grav) #endif /* MODE_grav */