Mercurial > hg > xemacs-beta
comparison pkg-src/tree-x/dissolve.c @ 167:85ec50267440 r20-3b10
Import from CVS: tag r20-3b10
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:45:46 +0200 |
parents | 0132846995bd |
children | 15872534500d |
comparison
equal
deleted
inserted
replaced
166:7a77eb660975 | 167:85ec50267440 |
---|---|
1 /* ---------------------------------------------------------------------------- | 1 /* ---------------------------------------------------------------------------- |
2 * Animated display of collapse and expansion of nodes in a tree. | 2 * Animated display of collapse and expansion of nodes in a tree. |
3 * ---------------------------------------------------------------------------- | 3 * ---------------------------------------------------------------------------- |
4 */ | 4 */ |
5 | |
6 #ifdef HAVE_CONFIG_H | |
7 #include <config.h> | |
8 #endif | |
9 | |
10 #ifdef HAVE_USLEEP | |
11 #ifdef HAVE_UNISTD_H | |
12 #include <unistd.h> | |
13 #endif /* HAVE_UNISTD_H */ | |
14 #else | |
15 int usleep(unsigned long microSeconds); | |
16 #endif /* HAVE_USLEEP */ | |
5 | 17 |
6 #include <X11/Xlib.h> | 18 #include <X11/Xlib.h> |
7 | 19 |
8 #include "dissolve.h" | 20 #include "dissolve.h" |
9 | 21 |
11 static GC DissolveInGC; | 23 static GC DissolveInGC; |
12 static GC DissolveOutGC; | 24 static GC DissolveOutGC; |
13 static GC DissolveInLineGC[NUM_LINE_STEPS]; | 25 static GC DissolveInLineGC[NUM_LINE_STEPS]; |
14 static GC DissolveOutLineGC[NUM_LINE_STEPS]; | 26 static GC DissolveOutLineGC[NUM_LINE_STEPS]; |
15 | 27 |
16 static unsigned char first_dash[] = {1, 3}; | 28 static char first_dash[] = {1, 3}; |
17 static unsigned char second_dash[] = {1, 1}; | 29 static char second_dash[] = {1, 1}; |
18 | 30 |
19 InitializeDissolveEffect(dpy, drawable, fg_pixel, bg_pixel) | 31 void |
20 Display *dpy; | 32 InitializeDissolveEffect(Display *dpy, |
21 Drawable drawable; | 33 Drawable drawable, |
22 int fg_pixel; | 34 int fg_pixel, |
23 int bg_pixel; | 35 int bg_pixel) |
24 { | 36 { |
25 unsigned long gcvaluemask; | 37 unsigned long gcvaluemask; |
26 XGCValues gcvalues; | 38 XGCValues gcvalues; |
27 int i; | 39 int i; |
28 | 40 |
29 /* make DissolveOutGC */ | 41 /* make DissolveOutGC */ |
30 gcvalues.background = bg_pixel; | 42 gcvalues.background = bg_pixel; |
31 gcvalues.foreground = bg_pixel; | 43 gcvalues.foreground = bg_pixel; |
32 gcvalues.function = GXcopy; | 44 gcvalues.function = GXcopy; |
33 gcvalues.fill_style = FillStippled; | 45 gcvalues.fill_style = FillStippled; |
34 gcvalues.line_width = 0; | 46 gcvalues.line_width = 0; |
35 gcvaluemask = GCFunction | GCForeground | GCBackground | GCFillStyle | | 47 gcvaluemask = GCFunction | GCForeground | GCBackground | GCFillStyle | |
58 i++; | 70 i++; |
59 DissolveOutLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); | 71 DissolveOutLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); |
60 XSetDashes(dpy, DissolveOutLineGC[i], 3, first_dash, 2); | 72 XSetDashes(dpy, DissolveOutLineGC[i], 3, first_dash, 2); |
61 i++; | 73 i++; |
62 gcvalues.line_style = LineSolid; | 74 gcvalues.line_style = LineSolid; |
63 DissolveOutLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); | 75 DissolveOutLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); |
64 | 76 |
65 /* make DissolveInLineGC */ | 77 /* make DissolveInLineGC */ |
66 i = 0; | 78 i = 0; |
67 gcvalues.foreground = fg_pixel; | 79 gcvalues.foreground = fg_pixel; |
68 gcvalues.fill_style = FillSolid; | 80 gcvalues.fill_style = FillSolid; |
78 i++; | 90 i++; |
79 DissolveInLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); | 91 DissolveInLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); |
80 XSetDashes(dpy, DissolveInLineGC[i], 3, first_dash, 2); | 92 XSetDashes(dpy, DissolveInLineGC[i], 3, first_dash, 2); |
81 i++; | 93 i++; |
82 gcvalues.line_style = LineSolid; | 94 gcvalues.line_style = LineSolid; |
83 DissolveInLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); | 95 DissolveInLineGC[i] = XCreateGC(dpy, drawable, gcvaluemask, &gcvalues); |
84 | 96 |
85 i = 0; | 97 i = 0; |
86 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 98 DissolvePixmaps[i] = |
87 first_bits, | 99 XCreateBitmapFromData(dpy, drawable, |
88 first_width, | 100 (char *) first_bits, first_width, first_height); |
89 first_height); | 101 i++; |
90 i++; | 102 DissolvePixmaps[i] = |
91 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 103 XCreateBitmapFromData(dpy, drawable, |
92 second_bits, | 104 (char *) second_bits, second_width, second_height); |
93 second_width, | 105 i++; |
94 second_height); | 106 DissolvePixmaps[i] = |
95 i++; | 107 XCreateBitmapFromData(dpy, drawable, |
96 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 108 (char *) third_bits, third_width, third_height); |
97 third_bits, | 109 i++; |
98 third_width, | 110 DissolvePixmaps[i] = |
99 third_height); | 111 XCreateBitmapFromData(dpy, drawable, |
100 i++; | 112 (char *) fourth_bits, fourth_width, fourth_height); |
101 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 113 i++; |
102 fourth_bits, | 114 DissolvePixmaps[i] = |
103 fourth_width, | 115 XCreateBitmapFromData(dpy, drawable, |
104 fourth_height); | 116 (char *) fifth_bits, fifth_width, fifth_height); |
105 i++; | 117 i++; |
106 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 118 DissolvePixmaps[i] = |
107 fifth_bits, | 119 XCreateBitmapFromData(dpy, drawable, |
108 fifth_width, | 120 (char *) sixth_bits, sixth_width, sixth_height); |
109 fifth_height); | 121 i++; |
110 i++; | 122 DissolvePixmaps[i] = |
111 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 123 XCreateBitmapFromData(dpy, drawable, |
112 sixth_bits, | 124 (char *) seventh_bits, seventh_width, seventh_height); |
113 sixth_width, | 125 i++; |
114 sixth_height); | 126 DissolvePixmaps[i] = |
115 i++; | 127 XCreateBitmapFromData(dpy, drawable, |
116 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 128 (char *) eighth_bits, eighth_width, eighth_height); |
117 seventh_bits, | 129 } |
118 seventh_width, | 130 |
119 seventh_height); | 131 #if 0 /* Currently Unused */ |
120 i++; | 132 void |
121 DissolvePixmaps[i] = XCreateBitmapFromData(dpy, drawable, | 133 DissolveRectangle(Display *dpy, Window drawable, |
122 eighth_bits, | 134 int x, int y, int width, int height, int mode) |
123 eighth_width, | |
124 eighth_height); | |
125 } | |
126 | |
127 DissolveRectangle(dpy, drawable, x, y, width, height, mode) | |
128 Display *dpy; | |
129 Window drawable; | |
130 int x, y, width, height; | |
131 int mode; | |
132 { | 135 { |
133 int i; | 136 int i; |
134 GC gc; | 137 GC gc; |
135 | 138 |
136 gc = mode ? DissolveOutGC : DissolveInGC; | 139 gc = mode ? DissolveOutGC : DissolveInGC; |
143 XDrawRectangle(dpy, drawable, gc, x, y, width, height); | 146 XDrawRectangle(dpy, drawable, gc, x, y, width, height); |
144 XFlush(dpy); | 147 XFlush(dpy); |
145 usleep(50000); | 148 usleep(50000); |
146 } | 149 } |
147 } | 150 } |
148 | 151 |
149 DissolveRectangles(dpy, drawable, rectangles, nrectangles, mode) | 152 void |
150 Display *dpy; | 153 DissolveRectangles(Display *dpy, |
151 Window drawable; | 154 Window drawable, |
152 XRectangle rectangles[]; | 155 XRectangle rectangles[], |
153 int nrectangles; | 156 int nrectangles, |
154 int mode; | 157 int mode) |
155 { | 158 { |
156 int i; | 159 int i; |
157 GC gc; | 160 GC gc; |
158 | 161 |
159 gc = mode ? DissolveOutGC : DissolveInGC; | 162 gc = mode ? DissolveOutGC : DissolveInGC; |
167 XFlush(dpy); | 170 XFlush(dpy); |
168 usleep(50000); | 171 usleep(50000); |
169 } | 172 } |
170 } | 173 } |
171 | 174 |
172 DissolveSegments(dpy, drawable, segments, nsegments, mode) | 175 void |
173 Display *dpy; | 176 DissolveSegments(Display *dpy, Window drawable, |
174 Window drawable; | 177 XSegment segments[], int nsegments, int mode) |
175 XSegment segments[]; | |
176 int nsegments; | |
177 int mode; | |
178 { | 178 { |
179 int i; | 179 int i; |
180 GC *gc; | 180 GC *gc; |
181 | 181 |
182 gc = mode ? DissolveOutLineGC : DissolveInLineGC; | 182 gc = mode ? DissolveOutLineGC : DissolveInLineGC; |
186 XFlush(dpy); | 186 XFlush(dpy); |
187 usleep(50000); | 187 usleep(50000); |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 DissolveTree(dpy, drawable, rectangles, nrectangles, segments, nsegments, mode) | 191 #endif /* 0 - Unused */ |
192 Display *dpy; | 192 |
193 Window drawable; | 193 void |
194 XRectangle rectangles[]; | 194 DissolveTree(Display *dpy, |
195 int nrectangles; | 195 Window drawable, |
196 XSegment segments[]; | 196 XRectangle rectangles[], |
197 int nsegments; | 197 int nrectangles, |
198 int mode; | 198 XSegment segments[], |
199 int nsegments, | |
200 int mode) | |
199 { | 201 { |
200 int i; | 202 int i; |
201 int j = 0; | 203 int j = 0; |
202 int idle; | 204 int idle; |
203 GC gc; | 205 GC gc; |
206 gc = mode ? DissolveOutGC : DissolveInGC; | 208 gc = mode ? DissolveOutGC : DissolveInGC; |
207 lineGC = mode ? DissolveOutLineGC : DissolveInLineGC; | 209 lineGC = mode ? DissolveOutLineGC : DissolveInLineGC; |
208 | 210 |
209 /* speed up if there are lots of nodes */ | 211 /* speed up if there are lots of nodes */ |
210 idle = nrectangles > 50 ? 0 : 25000; | 212 idle = nrectangles > 50 ? 0 : 25000; |
211 | 213 |
212 for (i = 0 ; i < NUM_DISSOLVE_STEPS ; i++) { | 214 for (i = 0 ; i < NUM_DISSOLVE_STEPS ; i++) { |
213 XSetStipple(dpy, gc, DissolvePixmaps[i]); | 215 XSetStipple(dpy, gc, DissolvePixmaps[i]); |
214 if (mode) | 216 if (mode) |
215 XFillRectangles(dpy, drawable, gc, rectangles, nrectangles); | 217 XFillRectangles(dpy, drawable, gc, rectangles, nrectangles); |
216 else | 218 else |
220 XFlush(dpy); | 222 XFlush(dpy); |
221 usleep(idle); | 223 usleep(idle); |
222 } | 224 } |
223 } | 225 } |
224 | 226 |
225 DissolvePolygon(dpy, drawable, pts, num_pts, mode) | 227 #if 0 /* Currently Unused */ |
226 Display *dpy; | 228 void |
227 Window drawable; | 229 DissolvePolygon(Display *dpy, |
228 XPoint *pts; | 230 Window drawable, |
229 int num_pts; | 231 XPoint *pts, |
230 int mode; | 232 int num_pts, |
233 int mode) | |
231 { | 234 { |
232 int i; | 235 int i; |
233 GC gc; | 236 GC gc; |
234 | 237 |
235 gc = mode ? DissolveOutGC : DissolveInGC; | 238 gc = mode ? DissolveOutGC : DissolveInGC; |
241 XFlush(dpy); | 244 XFlush(dpy); |
242 usleep(50000); | 245 usleep(50000); |
243 } | 246 } |
244 } | 247 } |
245 | 248 |
249 #endif /* Currently Unused */ |