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 */