#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/X.h>
#include <X11/Xutil.h>

main() {
	Display *display;
	Window window;
	XSetWindowAttributes attr;
	Colormap colormap;
	XColor color1, color2;
	XGCValues gcvalue;
	GC gc;
	XSizeHints *sz;
	
	display = XOpenDisplay(0);

	/* 取得預設之 colormap */
	colormap = DefaultColormap(display, DefaultScreen(display));
	/* 取得 colorcell */
	color1.red = color1.blue = 0xffff;
	color1.green = 0;
	color2.red = color2.green = color2.blue = 0xff;
	color1.flags = color2.flags = DoRed | DoGreen | DoBlue; 
	XAllocColor(display, colormap, &color1);
	XAllocColor(display, colormap, &color2);

	/* 設定視窗的 attribute 和建設 */
	attr.background_pixel = color2.pixel; /* 背景顏色 */
	window = XCreateWindow(display,
		XDefaultRootWindow(display), 100, 100, 300, 300,
		2, XDefaultDepth(display, 0), InputOutput, 
		CopyFromParent, CWBackPixel, &attr);

	/* 設定和 window manager 進行溝通 */
	XStoreName(display, window, "hello!! world!!");
	sz = XAllocSizeHints();
	sz->x = 100;
	sz->y = 100;
	sz->width = 300;
	sz->height = 300;
	sz->flags = USPosition | USSize;
	XSetNormalHints(display, window, sz);

	/* 顯示視窗 */
	printf("Map window\n");
	XMapWindow(display, window);
	XFlush(display);
	getchar();
	
	/* 建立並設定 GC */
	gc = XCreateGC(display, window, 0, &gcvalue);
	XSetForeground(display, gc, color1.pixel);
	XSetBackground(display, gc, color2.pixel);
	
	/* 畫一個矩形 */
	printf("Draw rectangle\n");
	XDrawRectangle(display, window, gc, 10, 10, 100, 100);
	XFlush(display);
	getchar();
	
	/* 清除視窗 */
	XClearWindow(display, window);
	
	/* 設定 GC 內，線的形式 */
	XSetLineAttributes(display, gc, 5, LineOnOffDash,
		CapButt, JoinRound);
	/* 畫線 (200, 10) - (200, 290) */
	printf("Draw line\n");
	XDrawLine(display, window, gc, 200, 10, 200, 290);
	XFlush(display);
	getchar();
	
	/* 關閉視窗 */
	printf("Destory Window\n");
	XDestroyWindow(display, window);
	XFlush(display);
	getchar();
	
	printf("close display\n");
	XCloseDisplay(display);
	getchar();
}

