#define SCALE 10000 /* fixed-point math, for sub-pixel motion */
#define DEF_COUNT 12 /* When planes and count are 0, how many blobs. */
-
#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
#define RANDSIGN() ((random() & 1) ? 1 : -1)
b->spline = make_spline (b->npoints);
b->r = (long *) malloc (sizeof(*b->r) * b->npoints);
for (i = 0; i < b->npoints; i++)
- b->r[i] = ((random() % mid) + (mid/2)) * RANDSIGN();
+ b->r[i] = (long) ((random() % mid) + (mid/2)) * RANDSIGN();
return b;
}
+static void
+free_blob(struct blob *blob)
+{
+ free_spline(blob->spline);
+ free(blob->r);
+ free(blob);
+}
+
static void
throb_blob (struct blob *b)
{
return layer;
}
+static void
+free_layer(struct layer *layer, Display *dpy)
+{
+ int i;
+ for (i = 0; i < layer->nblobs; i++){
+ free_blob(layer->blobs[i]);
+ }
+ free(layer->blobs);
+ XFreeGC(dpy, layer->gc);
+ free(layer);
+}
+
#ifndef HAVE_COCOA
static void
goop->mode = xor;
else
fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s);
+ free(s);
goop->delay = get_integer_resource (dpy, "delay", "Integer");
goop->nlayers = get_integer_resource (dpy, "planes", "Planes");
if (goop->nlayers <= 0)
goop->nlayers = (random() % (depth-2)) + 2;
- goop->layers = (struct layer **) malloc(sizeof(*goop->layers)*goop->nlayers);
+ if (! goop->layers)
+ goop->layers = (struct layer **)
+ malloc(sizeof(*goop->layers)*goop->nlayers);
goop->additive_p = get_boolean_resource (dpy, "additive", "Additive");
goop->cmap_p = has_writable_cells (screen, visual);
return goop;
}
+/* Well, the naming of this function is
+ confusing with goop_free()... */
+static void
+free_goop (struct goop *goop, Display *dpy)
+{
+ int i;
+ for (i = 0; i < goop->nlayers; i++){
+ struct layer * layer = goop->layers[i];
+ free_layer(layer, dpy);
+ }
+ free(goop->layers);
+ XFreeGC(dpy, goop->pixmap_gc);
+ XFreeGC(dpy, goop->window_gc);
+}
+
static void *
goop_init (Display *dpy, Window window)
{
goop_reshape (Display *dpy, Window window, void *closure,
unsigned int w, unsigned int h)
{
- /* #### write me */
+ struct goop *goop = (struct goop *) closure;
+
+ struct goop *goop2 = goop_init (dpy, window);
+ free_goop(goop, dpy);
+ memcpy (goop, goop2, sizeof(*goop));
+ free(goop2);
}
static Bool
static void
goop_free (Display *dpy, Window window, void *closure)
{
+ struct goop *goop = (struct goop *) closure;
+ free_goop(goop, dpy);
+ free(goop);
}
"*torque: 0.0075",
"*elasticity: 0.9",
"*maxVelocity: 0.5",
+#ifdef USE_IPHONE
+ "*ignoreRotation: True",
+#endif
0
};