summaryrefslogtreecommitdiff
path: root/tests/xlib-beginner.c
blob: b31a148298f5d2823888f0c17f9a0e3773b87ad8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
/*Linux users will need to add -ldl to the Makefile to compile 
 *this example.
 */
Display *dis;
Window win;
XEvent report;
GC green_gc;
XColor green_col;
Colormap colormap;
/*
Try changing the green[] = below to a different color.
The color can also be from /usr/X11R6/lib/X11/rgb.txt, such as RoyalBlue4.
A # (number sign) is only needed when using hexadecimal colors.
*/
char green[] = "#00FF00";

int main() {
	dis = XOpenDisplay(NULL);
	win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 500, 500, 0, BlackPixel (dis, 0), BlackPixel(dis, 0));
	XMapWindow(dis, win);
	colormap = DefaultColormap(dis, 0);
	green_gc = XCreateGC(dis, win, 0, 0);
	XParseColor(dis, colormap, green, &green_col);
	XAllocColor(dis, colormap, &green_col);
	XSetForeground(dis, green_gc, green_col.pixel);

	XSelectInput(dis, win, ExposureMask | KeyPressMask | ButtonPressMask);

	XDrawRectangle(dis, win, green_gc, 1, 1, 497, 497);
	XDrawRectangle(dis, win, green_gc, 50, 50, 398, 398);
	XFlush(dis);

	while (1)  {
	XNextEvent(dis, &report);
		switch  (report.type) {
        case Expose:   
 	      	fprintf(stdout, "I have been exposed.\n");
				XDrawRectangle(dis, win, green_gc, 1, 1, 497, 497);
				XDrawRectangle(dis, win, green_gc, 50, 50, 398, 398);
				XFlush(dis);
			break;
	 		case KeyPress:
		/*Close the program if q is pressed.*/
				if (XLookupKeysym(&report.xkey, 0) == XK_q) {
				exit(0);
				}
			break;
		}
	}

return 0;
}