# define DEFAULTS "*delay: 20000 \n" \
"*count: -5 \n" \
"*cycles: 250 \n" \
- "*ncolors: 64 \n"
+ "*ncolors: 64 \n" \
+ "*fpsSolid: true \n" \
+ "*ignoreRotation: True \n" \
+
# define UNIFORM_COLORS
-# define reshape_galaxy 0
-# define galaxy_handle_event 0
+# define release_galaxy 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
static unistruct *universes = NULL;
static void
-free_galaxies(unistruct * gp)
+free_galaxies(ModeInfo * mi)
{
+ unistruct *gp = &universes[MI_SCREEN(mi)];
if (gp->galaxies != NULL) {
int i;
gp->rot_x = 0;
if (MI_BATCHCOUNT(mi) < -MINGALAXIES)
- free_galaxies(gp);
+ free_galaxies(mi);
gp->ngalaxies = MI_BATCHCOUNT(mi);
if (gp->ngalaxies < -MINGALAXIES)
gp->ngalaxies = NRAND(-gp->ngalaxies - MINGALAXIES + 1) + MINGALAXIES;
{
unistruct *gp;
- if (universes == NULL) {
- if ((universes = (unistruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (unistruct))) == NULL)
- return;
- }
+ MI_INIT (mi, universes, free_galaxies);
gp = &universes[MI_SCREEN(mi)];
-# ifdef HAVE_COCOA /* Don't second-guess Quartz's double-buffering */
+# ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */
dbufp = False;
# endif
d = d0 * d0 + d1 * d1 + d2 * d2;
if (d > EPSILON)
- d = gt->mass / (d * sqrt(d)) * DELTAT * DELTAT * QCONS;
+ d = gtk->mass / (d * sqrt(d)) * DELTAT * DELTAT * QCONS;
else
- d = gt->mass * eps;
+ d = gtk->mass / (eps * sqrt(eps));
v0 += d0 * d;
v1 += d1 * d;
v2 += d2 * d;
d = d0 * d0 + d1 * d1 + d2 * d2;
if (d > EPSILON)
- d = gt->mass * gt->mass / (d * sqrt(d)) * DELTAT * QCONS;
+ d = 1 / (d * sqrt(d)) * DELTAT * QCONS;
else
- d = gt->mass * gt->mass / (EPSILON * sqrt_EPSILON) * DELTAT * QCONS;
+ d = 1 / (EPSILON * sqrt_EPSILON) * DELTAT * QCONS;
d0 *= d;
d1 *= d;
d2 *= d;
- gt->vel[0] += d0 / gt->mass;
- gt->vel[1] += d1 / gt->mass;
- gt->vel[2] += d2 / gt->mass;
- gtk->vel[0] -= d0 / gtk->mass;
- gtk->vel[1] -= d1 / gtk->mass;
- gtk->vel[2] -= d2 / gtk->mass;
+ gt->vel[0] += d0 * gtk->mass;
+ gt->vel[1] += d1 * gtk->mass;
+ gt->vel[2] += d2 * gtk->mass;
+ gtk->vel[0] -= d0 * gt->mass;
+ gtk->vel[1] -= d1 * gt->mass;
+ gtk->vel[2] -= d2 * gt->mass;
}
gt->pos[0] += gt->vel[0] * DELTAT;
}
ENTRYPOINT void
-release_galaxy(ModeInfo * mi)
+reshape_galaxy(ModeInfo * mi, int width, int height)
{
- if (universes != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
- free_galaxies(&universes[screen]);
- (void) free((void *) universes);
- universes = NULL;
- }
+ XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi));
+ init_galaxy (mi);
}
ENTRYPOINT void
/* Do nothing, it will refresh by itself */
}
+ENTRYPOINT Bool
+galaxy_handle_event (ModeInfo *mi, XEvent *event)
+{
+ if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ reshape_galaxy (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+ return False;
+}
+
+
XSCREENSAVER_MODULE ("Galaxy", galaxy)