-/* xscreensaver, Copyright (c) 2006-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2015 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
static void
-display_image (state *st, const char *file)
+display_image (Display *dpy, Window window, state *st, const char *file)
{
NSImage *image = [[NSImage alloc]
initWithContentsOfFile:
return;
}
- [image drawAtPoint: NSMakePoint (0, 0)
- fromRect: NSMakeRect (0, 0, [image size].width, [image size].height)
- operation: NSCompositeCopy
- fraction: 1.0];
+ CGFloat w = [image size].width;
+ CGFloat h = [image size].height;
+ if (w <= 1 || h <= 1) {
+ fprintf (stderr, "webcollage: unparsable image \"%s\"\n", file);
+ [image release];
+ return;
+ }
+
+ jwxyz_draw_NSImage_or_CGImage (dpy, window, True, image, 0, 0);
[image release];
}
char *filter = get_string_resource (st->dpy, "filter", "Filter");
char *filter2 = get_string_resource (st->dpy, "filter2", "Filter2");
- av[ac++] = "webcollage";
- av[ac++] = "-cocoa";
+ av[ac++] = strdup ("webcollage");
+ av[ac++] = strdup ("-cocoa");
- av[ac++] = "-size";
+ av[ac++] = strdup ("-size");
sprintf (buf, "%dx%d", st->xgwa.width, st->xgwa.height);
av[ac++] = strdup (buf);
- av[ac++] = "-timeout"; sprintf (buf, "%d", timeout);
+ av[ac++] = strdup ("-timeout"); sprintf (buf, "%d", timeout);
av[ac++] = strdup (buf);
- av[ac++] = "-delay"; sprintf (buf, "%d", delay);
+ av[ac++] = strdup ("-delay"); sprintf (buf, "%d", delay);
av[ac++] = strdup (buf);
- av[ac++] = "-opacity"; sprintf (buf, "%.2f", opacity);
+ av[ac++] = strdup ("-opacity"); sprintf (buf, "%.2f", opacity);
av[ac++] = strdup (buf);
if (filter && *filter) {
- av[ac++] = "-filter";
+ av[ac++] = strdup ("-filter");
av[ac++] = filter;
}
if (filter2 && *filter2) {
- av[ac++] = "-filter2";
+ av[ac++] = strdup ("-filter2");
av[ac++] = filter2;
}
}
}
+ while (ac > 0)
+ free (av[--ac]);
+
if (! st->pipe_fd) abort();
st->pid = forked;
for (i = 0; i < sizeof(sigs)/sizeof(*sigs); i++) {
if (signal (sigs[i], signal_handler)) {
perror ("webcollage: signal");
- exit (1);
+ //exit (1);
}
}
}
const char *target = "COCOA LOAD ";
if (!strncmp (target, buf, strlen(target))) {
const char *file = buf + strlen(target);
- display_image (st, file);
+ display_image (dpy, window, st, file);
}
return st->delay;