X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utils%2Fxroger.c;h=adbf3aa4db04a53a930ebf05ef71a6d1298e3459;hb=ce3185de9d9705e259f2b60dd4b5509007fa17d4;hp=01fd7d7f9a05bb193496a7540a2f6a661f7c416f;hpb=65740e2a8dea3d6309ae6e8914a0fb79e993ada8;p=xscreensaver diff --git a/utils/xroger.c b/utils/xroger.c old mode 100755 new mode 100644 index 01fd7d7f..adbf3aa4 --- a/utils/xroger.c +++ b/utils/xroger.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-1993 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-1998 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -9,98 +9,126 @@ * implied warranty. */ -#include - -#if __STDC__ -static void crossbones (Display *, Window, GC, int x, int y, int w, int h); -#endif +#include "utils.h" static void -crossbones (dpy, window, draw_gc, x, y, w, h) - Display *dpy; - Window window; - GC draw_gc; - int x, y, w, h; +crossbones (Display *dpy, Window window, GC draw_gc, + int x, int y, int w, int h) { double xscale = w / 440.0; double yscale = h / 216.0; XPoint points [6]; - points [0].x = x + xscale * 20; - points [0].y = y + yscale * 10; - points [1].x = x + xscale * 120; - points [1].y = y + yscale * 10; - points [2].x = x + xscale * 243; - points [2].y = y + yscale * 93; - points [3].x = x + xscale * 57; - points [3].y = y + yscale * 210; - points [4].x = x + xscale * 20; - points [4].y = y + yscale * 210; - points [5].x = x + xscale * 175; - points [5].y = y + yscale * 113; + points[0].x = x + xscale * 20; points[0].y = y + yscale * 10; + points[1].x = x + xscale * 120; points[1].y = y + yscale * 10; + points[2].x = x + xscale * 243; points[2].y = y + yscale * 93; + points[3].x = x + xscale * 57; points[3].y = y + yscale * 210; + points[4].x = x + xscale * 20; points[4].y = y + yscale * 210; + points[5].x = x + xscale * 175; points[5].y = y + yscale * 113; XFillPolygon (dpy, window, draw_gc, points, 6, Complex, CoordModeOrigin); - points [0].x = x + xscale * 197; - points [0].y = y + yscale * 127; - points [1].x = x + xscale * 384; - points [1].y = y + yscale * 10; - points [2].x = x + xscale * 420; - points [2].y = y + yscale * 10; - points [3].x = x + xscale * 265; - points [3].y = y + yscale * 108; - points [4].x = x + xscale * 420; - points [4].y = y + yscale * 210; - points [5].x = x + xscale * 320; - points [5].y = y + yscale * 210; + points[0].x = x + xscale * 202; points[0].y = y + yscale * 132; + points[1].x = x + xscale * 384; points[1].y = y + yscale * 10; + points[2].x = x + xscale * 420; points[2].y = y + yscale * 10; + points[3].x = x + xscale * 270; points[3].y = y + yscale * 113; + points[4].x = x + xscale * 420; points[4].y = y + yscale * 210; + points[5].x = x + xscale * 320; points[5].y = y + yscale * 210; XFillPolygon (dpy, window, draw_gc, points, 6, Complex, CoordModeOrigin); } +#include "spline.h" + void -skull (dpy, window, draw_gc, erase_gc, x, y, w, h) - Display *dpy; - Window window; - GC draw_gc, erase_gc; - int x, y, w, h; +skull (Display *dpy, Window window, GC draw_gc, GC erase_gc, + int x, int y, int w, int h) { - XPoint points [3]; - crossbones (dpy, window, draw_gc, x, y+h/2, w, h/2); - x += w/100; - y += h/15; - XFillArc (dpy, window, draw_gc, (int) (x + (w * 0.3)), y, w/2, h/2, - -40*64, 260*64); - XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.35)), y + h/5, - (int) (w * 0.4), h/5); - XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.375)), - (int) (y + (h * 0.425)), w / 20, h / 20); - XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.495)), - (int) (y + (h * 0.425)), w / 20, h / 20); - XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.555)), - (int) (y + (h * 0.425)), w / 20, h / 20); - XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.675)), - (int) (y + (h * 0.425)), w / 20, h / 20); - points [0].x = x + (w * 0.435); - points [0].y = y + (h * 0.425); - points [1].x = x + (w * 0.485); - points [1].y = points [0].y; - points [2].x = (points [0].x + points [1].x) / 2; - points [2].y = points [0].y + h/10; - XFillPolygon (dpy, window, draw_gc, points, 3, Complex, CoordModeOrigin); - points [0].x = x + (w * 0.615); - points [1].x = x + (w * 0.665); - points [2].x = (points [0].x + points [1].x) / 2; - XFillPolygon (dpy, window, draw_gc, points, 3, Complex, CoordModeOrigin); - points [0].x = x + (w * 0.52); - points [0].y = y + (h * 0.35); - points [1].x = points [0].x - (w * 0.05); - points [1].y = points [0].y; - points [2].x = points [0].x; - points [2].y = points [0].y - (w * 0.10); - XFillPolygon (dpy, window, erase_gc, points, 3, Complex, CoordModeOrigin); - points [0].x = x + (w * 0.57); - points [1].x = x + (w * 0.62); - points [2].x = points [0].x; - XFillPolygon (dpy, window, erase_gc, points, 3, Complex, CoordModeOrigin); - XFillArc (dpy, window, erase_gc, x + ((int) (w * 0.375)), y + h/7, - w/10, h/10, 0, 360*64); - XFillArc (dpy, window, erase_gc, x + ((int) (w * 0.615)), y + h/7, - w/10, h/10, 0, 360*64); + spline s; + float w100, h100; + XPoint points [20]; + double sx[20], sy[20]; + int i; + + memset(&s, 0, sizeof(s)); + s.control_x = sx; + s.control_y = sy; + + y -= (w * 0.025); + + crossbones (dpy, window, draw_gc, x, y+(h/2), w, (h / 3)); + + x += (w * 0.27); + y += (h * 0.25); + w *= 0.6; + h *= 0.6; + + w100 = w / 100.0; + h100 = h / 100.0; + + points[ 0].x = x + (0 * w100); points[ 0].y = y + (10 * h100); + points[ 1].x = x + (10 * w100); points[ 1].y = y + (0 * h100); + points[ 2].x = x + (90 * w100); points[ 2].y = y + (0 * h100); + points[ 3].x = x + (100 * w100); points[ 3].y = y + (10 * h100); + points[ 4].x = x + (100 * w100); points[ 4].y = y + (30 * h100); + points[ 5].x = x + (90 * w100); points[ 5].y = y + (40 * h100); + points[ 6].x = x + (70 * w100); points[ 6].y = y + (40 * h100); + points[ 7].x = x + (70 * w100); points[ 7].y = y + (50 * h100); + points[ 8].x = x + (30 * w100); points[ 8].y = y + (50 * h100); + points[ 9].x = x + (30 * w100); points[ 9].y = y + (40 * h100); + points[10].x = x + (10 * w100); points[10].y = y + (40 * h100); + points[11].x = x + (0 * w100); points[11].y = y + (30 * h100); + + for (i = 0; i < 12; i++) + sx[i] = points[i].x, sy[i] = points[i].y; + s.n_controls = i; + s.allocated_points = i; + s.points = (XPoint *) calloc (i, sizeof (*s.points)); + compute_closed_spline(&s); + + XFillPolygon (dpy, window, draw_gc, points+6, 4, Complex, CoordModeOrigin); + XFillPolygon (dpy, window, draw_gc, s.points, s.n_points, + Complex, CoordModeOrigin); + + points[0].x = x + (20 * w100); points[0].y = y + (18 * h100); + points[1].x = x + (25 * w100); points[1].y = y + (15 * h100); + points[2].x = x + (43 * w100); points[2].y = y + (15 * h100); + points[3].x = x + (45 * w100); points[3].y = y + (17 * h100); + points[4].x = x + (45 * w100); points[4].y = y + (25 * h100); + points[5].x = x + (40 * w100); points[5].y = y + (30 * h100); + points[6].x = x + (30 * w100); points[6].y = y + (30 * h100); + points[7].x = x + (20 * w100); points[7].y = y + (23 * h100); + for (i = 0; i < 8; i++) + sx[i] = points[i].x, sy[i] = points[i].y; + s.n_controls = i; + compute_closed_spline(&s); + XFillPolygon (dpy, window, erase_gc, s.points, s.n_points, + Complex, CoordModeOrigin); + + points[0].x = x + (80 * w100); points[0].y = y + (18 * h100); + points[1].x = x + (75 * w100); points[1].y = y + (15 * h100); + points[2].x = x + (57 * w100); points[2].y = y + (15 * h100); + points[3].x = x + (55 * w100); points[3].y = y + (17 * h100); + points[4].x = x + (55 * w100); points[4].y = y + (25 * h100); + points[5].x = x + (60 * w100); points[5].y = y + (30 * h100); + points[6].x = x + (70 * w100); points[6].y = y + (30 * h100); + points[7].x = x + (80 * w100); points[7].y = y + (23 * h100); + for (i = 0; i < 8; i++) + sx[i] = points[i].x, sy[i] = points[i].y; + s.n_controls = i; + compute_closed_spline(&s); + XFillPolygon (dpy, window, erase_gc, s.points, s.n_points, + Complex, CoordModeOrigin); + + points[ 0].x = x + (48 * w100); points[ 0].y = y + (30 * h100); + points[ 1].x = x + (52 * w100); points[ 1].y = y + (30 * h100); + points[ 2].x = x + (56 * w100); points[ 2].y = y + (42 * h100); + points[ 3].x = x + (52 * w100); points[ 3].y = y + (45 * h100); + points[ 4].x = x + (48 * w100); points[ 4].y = y + (45 * h100); + points[ 5].x = x + (44 * w100); points[ 5].y = y + (42 * h100); + for (i = 0; i < 6; i++) + sx[i] = points[i].x, sy[i] = points[i].y; + s.n_controls = i; + compute_closed_spline(&s); + XFillPolygon (dpy, window, erase_gc, s.points, s.n_points, + Complex, CoordModeOrigin); + + free(s.points); }