1 /* xscreensaver, Copyright (c) 1991-1998 Jamie Zawinski <jwz@netscape.com>
2  *
3  * Permission to use, copy, modify, distribute, and sell this software and its
4  * documentation for any purpose is hereby granted without fee, provided that
5  * the above copyright notice appear in all copies and that both that
6  * copyright notice and this permission notice appear in supporting
7  * documentation.  No representations are made about the suitability of this
8  * software for any purpose.  It is provided "as is" without express or
9  * implied warranty.
10  */
11 
12 /* 1999-Nov-21 Modified by Jim Knoble <jmknoble@pobox.com>
13  * Modifications:
14  *   - Extracted draw_shaded_rectangle() from xscreensaver source for use
15  *     in a separate application.  Constructed separate header file.
16  */
17 
18 #include <X11/Intrinsic.h>
19 
20 void
draw_shaded_rectangle(Display * dpy,Window window,int x,int y,int width,int height,int thickness,unsigned long top_color,unsigned long bottom_color)21 draw_shaded_rectangle (Display *dpy, Window window,
22 		       int x, int y,
23 		       int width, int height,
24 		       int thickness,
25 		       unsigned long top_color,
26 		       unsigned long bottom_color)
27 {
28   XPoint points[4];
29   XGCValues gcv;
30   GC gc1, gc2;
31   if (thickness == 0) return;
32 
33   gcv.foreground = top_color;
34   gc1 = XCreateGC (dpy, window, GCForeground, &gcv);
35   gcv.foreground = bottom_color;
36   gc2 = XCreateGC (dpy, window, GCForeground, &gcv);
37 
38   points [0].x = x;
39   points [0].y = y;
40   points [1].x = x + width;
41   points [1].y = y;
42   points [2].x = x + width - thickness;
43   points [2].y = y + thickness;
44   points [3].x = x;
45   points [3].y = y + thickness;
46   XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin);
47 
48   points [0].x = x;
49   points [0].y = y + thickness;
50   points [1].x = x;
51   points [1].y = y + height;
52   points [2].x = x + thickness;
53   points [2].y = y + height - thickness;
54   points [3].x = x + thickness;
55   points [3].y = y + thickness;
56   XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin);
57 
58   points [0].x = x + width;
59   points [0].y = y;
60   points [1].x = x + width - thickness;
61   points [1].y = y + thickness;
62   points [2].x = x + width - thickness;
63   points [2].y = y + height - thickness;
64   points [3].x = x + width;
65   points [3].y = y + height - thickness;
66   XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin);
67 
68   points [0].x = x;
69   points [0].y = y + height;
70   points [1].x = x + width;
71   points [1].y = y + height;
72   points [2].x = x + width;
73   points [2].y = y + height - thickness;
74   points [3].x = x + thickness;
75   points [3].y = y + height - thickness;
76   XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin);
77 
78   XFreeGC (dpy, gc1);
79   XFreeGC (dpy, gc2);
80 }
81 
82