summaryrefslogtreecommitdiffstats
path: root/hacks/kaleidescope.c
diff options
context:
space:
mode:
authorSimon Rettberg2019-02-18 11:55:41 +0100
committerSimon Rettberg2019-02-18 11:55:41 +0100
commitae69a754244c4e475c8d2591772ca8e005071d83 (patch)
tree58b3fa7abc2dcfe3c23e1c0ce108950c720826ab /hacks/kaleidescope.c
parentUpdate gitignore (diff)
downloadxscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.tar.gz
xscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.tar.xz
xscreensaver-ae69a754244c4e475c8d2591772ca8e005071d83.zip
Update to 5.42
Diffstat (limited to 'hacks/kaleidescope.c')
-rw-r--r--hacks/kaleidescope.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/hacks/kaleidescope.c b/hacks/kaleidescope.c
index 87a8236..8070368 100644
--- a/hacks/kaleidescope.c
+++ b/hacks/kaleidescope.c
@@ -41,11 +41,11 @@ struct Obj {
void (*propigate) (GLOBAL *, OBJECT *);
void (*draw) (GLOBAL *, OBJECT *);
void (*init) (GLOBAL *, OBJECT *);
- void *cur;
+ void *cur, *root;
};
typedef struct KSEGMENT {
- struct KSEGMENT *next;
+ struct KSEGMENT *next, *next0;
XColor color;
int drawn;
short int x1,y1,x2,y2; /* these are in the natural coordinate system */
@@ -211,9 +211,10 @@ create_ksegment (GLOBAL *g)
kcopy_color(&(prev->color), &new_color);
- prev->next = (Ksegment*)malloc(sizeof(Ksegment));
- (prev->next)->xsegments = (XSegment*)malloc(g->symmetry * sizeof(XSegment));
+ prev->next = (Ksegment*)calloc(1,sizeof(Ksegment));
+ (prev->next)->xsegments = (XSegment*)calloc(g->symmetry, sizeof(XSegment));
prev->drawn = 0;
+ prev->next0 = prev->next;
prev = (prev->next);
}
@@ -345,7 +346,7 @@ create_objects (GLOBAL *g)
g->objects = (OBJECT *) malloc(g->nobjects * sizeof(OBJECT));
for (i=0; i< g->nsegments; i++) {
- g->objects[i].cur = create_ksegment(g);
+ g->objects[i].cur = g->objects[i].root = create_ksegment(g);
g->objects[i].type = 1;
g->objects[i].time = 0;
g->objects[i].propigate = propigate_ksegment;
@@ -406,6 +407,7 @@ init_g (GLOBAL *g)
} else {
g->color_mode = 2;
}
+ if (color_mode_str) free(color_mode_str);
XGetWindowAttributes (g->dpy, g->window, &xgwa);
g->xmax = xgwa.width;
@@ -484,6 +486,19 @@ static void
kaleidescope_free (Display *dpy, Window window, void *closure)
{
GLOBAL *g = (GLOBAL *) closure;
+ int i;
+ for (i = 0; i < g->nsegments; i++) {
+ Ksegment *s = g->objects[i].root;
+ while (s) {
+ Ksegment *p = s;
+ s = s->next0;
+ free (p->xsegments);
+ free (p);
+ }
+ }
+ free (g->objects);
+ XFreeGC (dpy, g->draw_gc);
+ XFreeGC (dpy, g->erase_gc);
free (g);
}