Mercurial > emacs
comparison src/=XTests.c @ 78:96d2734f0a00
Initial revision
author | Joseph Arceneaux <jla@gnu.org> |
---|---|
date | Thu, 09 Aug 1990 22:17:51 +0000 |
parents | |
children | 3165b2697c78 |
comparison
equal
deleted
inserted
replaced
77:f2a4b896fcf4 | 78:96d2734f0a00 |
---|---|
1 #include <X11/Xlib.h> | |
2 #include <X11/X.h> | |
3 #include <X11/Xutil.h> | |
4 #include <X11/Xresource.h> | |
5 #include "XTests.h" | |
6 #include <stdio.h> | |
7 | |
8 static Display *dpy; | |
9 | |
10 static void | |
11 quit (dpy) | |
12 Display *dpy; | |
13 { | |
14 XCloseDisplay (dpy); | |
15 exit (0); | |
16 } | |
17 | |
18 static Colormap screen_colormap; | |
19 | |
20 static unsigned long | |
21 obtain_color (color) | |
22 char *color; | |
23 { | |
24 int exists; | |
25 XColor color_def; | |
26 | |
27 if (!screen_colormap) | |
28 screen_colormap = DefaultColormap (dpy, DefaultScreen (dpy)); | |
29 | |
30 exists = XParseColor (dpy, screen_colormap, color, &color_def) | |
31 && XAllocColor (dpy, screen_colormap, &color_def); | |
32 if (exists) | |
33 return color_def.pixel; | |
34 | |
35 fprintf (stderr, "Can't get color; using black."); | |
36 return BlackPixel (dpy, DefaultScreen (dpy)); | |
37 } | |
38 | |
39 static char *visual_strings[] = | |
40 { | |
41 "StaticGray ", | |
42 "GrayScale ", | |
43 "StaticColor", | |
44 "PseudoColor", | |
45 "TrueColor ", | |
46 "DirectColor" | |
47 }; | |
48 | |
49 main (argc,argv) | |
50 int argc; | |
51 char *argv[]; | |
52 { | |
53 char *dpy_string; | |
54 int n; | |
55 long mask; | |
56 Visual *my_visual; | |
57 XVisualInfo *vinfo, visual_template; | |
58 XEvent event; | |
59 Window window; | |
60 Screen *scr; | |
61 XGCValues gc_values; | |
62 GC fill_gc, pix_gc, line_xor_gc, line_xor_inv_gc; | |
63 int i; | |
64 int x, y, width, height, geometry, gravity; | |
65 char *geo; | |
66 char default_geo[] = "80x40+0+0"; | |
67 int depth; | |
68 Pixmap pix; | |
69 char *string = "Kill the head and the body will die."; | |
70 char dash_list[] = {6, 4, 6, 4}; | |
71 int dashes = 4; | |
72 | |
73 if (argc < 2) | |
74 dpy_string = "localhost:0.0"; | |
75 else | |
76 dpy_string = argv[1]; | |
77 | |
78 if (argc >= 3) | |
79 { | |
80 XSizeHints hints; | |
81 | |
82 printf ("Geometry: %s\t(default: %s)\n", argv[2], default_geo); | |
83 geo = argv[2]; | |
84 XWMGeometry (dpy, DefaultScreen (dpy), geo, default_geo, | |
85 3, &hints, &x, &y, &width, &height, &gravity); | |
86 } | |
87 | |
88 dpy = XOpenDisplay (dpy_string); | |
89 if (!dpy) | |
90 { | |
91 printf ("Can' open display %s\n", dpy_string); | |
92 exit (1); | |
93 } | |
94 | |
95 window = XCreateSimpleWindow (dpy, DefaultRootWindow (dpy), | |
96 300, 300, 300, 300, 1, | |
97 BlackPixel (dpy, DefaultScreen (dpy)), | |
98 WhitePixel (dpy, DefaultScreen (dpy))); | |
99 XSelectInput (dpy, window, ButtonPressMask | KeyPressMask | |
100 | EnterWindowMask | LeaveWindowMask); | |
101 | |
102 gc_values.foreground = obtain_color ("blue"); | |
103 gc_values.background = WhitePixel (dpy, DefaultScreen (dpy)); | |
104 fill_gc = XCreateGC (dpy, window, GCForeground | GCBackground, | |
105 &gc_values); | |
106 | |
107 gc_values.foreground = obtain_color ("red"); | |
108 gc_values.function = GXor; | |
109 gc_values.line_width = 3; | |
110 gc_values.line_style = LineOnOffDash; | |
111 gc_values.cap_style = CapRound; | |
112 gc_values.join_style = JoinRound; | |
113 line_xor_gc = XCreateGC (dpy, window, | |
114 GCForeground | GCBackground | GCLineStyle | |
115 | GCJoinStyle | GCCapStyle | GCLineWidth | |
116 | GCFunction, | |
117 &gc_values); | |
118 XSetDashes (dpy, line_xor_gc, 0, dash_list, dashes); | |
119 | |
120 gc_values.background = WhitePixel (dpy, DefaultScreen (dpy)); | |
121 gc_values.foreground = obtain_color ("blue"); | |
122 line_xor_inv_gc = XCreateGC (dpy, window, | |
123 GCForeground | GCBackground | |
124 | GCLineWidth | GCFunction, | |
125 &gc_values); | |
126 | |
127 depth = DefaultDepthOfScreen (ScreenOfDisplay (dpy, DefaultScreen (dpy))); | |
128 pix = XCreateBitmapFromData (dpy, window, page_glyf_bits, | |
129 page_glyf_width, page_glyf_height); | |
130 | |
131 XMapWindow (dpy, window); | |
132 XFlush (dpy); | |
133 | |
134 while (1) | |
135 { | |
136 XNextEvent (dpy, &event); | |
137 switch (event.type) | |
138 { | |
139 case ButtonPress: | |
140 #if 0 | |
141 if (event.xbutton.state && ShiftMask) | |
142 #endif | |
143 switch (event.xbutton.button) | |
144 { | |
145 case Button1: | |
146 XDrawLine (dpy, window, line_xor_gc, 25, 75, 125, 75); | |
147 XFlush (dpy); | |
148 XDrawLine (dpy, window, line_xor_gc, 25, 75, 125, 75); | |
149 break; | |
150 | |
151 case Button2: | |
152 XDrawLine (dpy, window, line_xor_gc, 25, 75, 125, 75); | |
153 break; | |
154 | |
155 case Button3: | |
156 XDrawLine (dpy, window, line_xor_gc, 25, 75, 125, 75); | |
157 break; | |
158 } | |
159 break; | |
160 | |
161 case KeyPress: | |
162 { | |
163 char buf[20]; | |
164 int n; | |
165 XComposeStatus status; | |
166 KeySym keysym; | |
167 | |
168 n = XLookupString (&event, buf, 20, &keysym, | |
169 (XComposeStatus *) &status); | |
170 | |
171 if (n == 1 && buf[0] == 'q') | |
172 quit (dpy); | |
173 } | |
174 break; | |
175 | |
176 case EnterNotify: | |
177 XCopyPlane (dpy, pix, window, fill_gc, 0, 0, | |
178 page_glyf_width, page_glyf_height, 100, 100, 1L); | |
179 XFillRectangle (dpy, window, fill_gc, 50, 50, 50, 50); | |
180 break; | |
181 | |
182 case LeaveNotify: | |
183 XClearWindow (dpy, window); | |
184 break; | |
185 } | |
186 | |
187 XFlush (dpy); | |
188 } | |
189 } |