summaryrefslogtreecommitdiff
path: root/Tests/X11
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2008-04-11 09:52:08 -0400
committerBill Hoffman <bill.hoffman@kitware.com>2008-04-11 09:52:08 -0400
commitee867fb1b2a8117baffeb497b99b84b5c8dcb72d (patch)
tree1accc9052a1429dfe74774aa22fb4d4f42c3a913 /Tests/X11
parent8d6a600409dd09261e32899ce578fec5001a6ef7 (diff)
downloadcmake-ee867fb1b2a8117baffeb497b99b84b5c8dcb72d.tar.gz
ENH: add a simple x11 program
Diffstat (limited to 'Tests/X11')
-rw-r--r--Tests/X11/HelloWorldX11.cxx145
1 files changed, 145 insertions, 0 deletions
diff --git a/Tests/X11/HelloWorldX11.cxx b/Tests/X11/HelloWorldX11.cxx
new file mode 100644
index 0000000000..7b18e20b79
--- /dev/null
+++ b/Tests/X11/HelloWorldX11.cxx
@@ -0,0 +1,145 @@
+
+/*** START MAIN.H ***/
+/* http://www.geocities.com/jeff_louie/x11/helloworld.htm* */
+/*
+ * main.h
+ * TestX
+ *
+ * Created by Jeff Louie on Tue Feb 03 2004.
+ * Copyright (c) 2004 __MyCompanyName__. All rights reserved.
+ *
+ */
+
+
+#ifndef MAIN_H
+#define MAIN_H 1
+
+#include <iostream>
+
+/* include the X library headers */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xos.h>
+
+class Main {
+
+public:
+ // constructor
+ Main(int argc, char * const argv[]);
+ //virtual ~Main();
+
+
+private:
+
+
+ /* here are our X variables */
+ Display *dis;
+ int screen;
+ Window win;
+ GC gc;
+
+ /* here are our X routines declared! */
+ void init_x();
+ void close_x();
+ void redraw();
+ int delay(int i);
+
+};
+
+#endif
+
+/*** END MAIN.H ***/
+
+/*** START MAIN.CPP ***/
+
+// modified from Brian Hammond's Howdy program at
+// http://www.insanityengine.com/doc/x11/xintro.html
+// jeff louie 02.05.2004
+
+
+
+int main (int argc, char * const argv[]) {
+ Main m(argc, argv);
+ return 0;
+}
+
+//Main::~Main() {;};
+Main::Main (int argc, char * const argv[]) {
+ XEvent event; // XEvent declaration
+ KeySym key; // KeyPress Events
+ char text[255]; // char buffer for KeyPress Events
+
+ init_x();
+
+ // event loop
+ while(TRUE) {
+ // get the next event and stuff it into our event variable.
+ // Note: only events we set the mask for are detected!
+ XNextEvent(dis, &event);
+
+
+ switch (event.type) {
+ int x;
+ int y;
+ case Expose:
+ if (event.xexpose.count==0) {
+ redraw();
+ }
+ break;
+ case KeyPress:
+ if (XLookupString(&event.xkey,text,255,&key,0)==1) {
+ // use the XLookupString routine to convert the invent
+ // KeyPress data into regular text. Weird but necessary...
+ if ((text[0]=='q') || (text[0]=='Q')) {
+ close_x();
+ }
+ else {
+ // echo key press
+ printf("You pressed the %c key!\n",text[0]);
+ }
+ }
+ break;
+ case ButtonPress:
+ // get cursor position
+ x= event.xbutton.x;
+ y= event.xbutton.y;
+ strcpy(text,"X is FUN!");
+ XSetForeground(dis,gc,rand()%event.xbutton.x%255);
+ // draw text at cursor
+ XDrawString(dis,win,gc,x,y, text, strlen(text));
+ break;
+ default:
+ printf("Unhandled event.\n");
+ }
+ }
+}
+
+void Main::init_x() {
+ unsigned long black,white;
+
+ dis=XOpenDisplay(NULL);
+ screen=DefaultScreen(dis);
+ black=BlackPixel(dis,screen),
+ white=WhitePixel(dis, screen);
+ win=XCreateSimpleWindow(dis,DefaultRootWindow(dis),0,0,
+ 300, 300, 5,black, white);
+ XSetStandardProperties(dis,win,"Hello World","Hi",None,NULL,0,NULL);
+ XSelectInput(dis, win, ExposureMask|ButtonPressMask|KeyPressMask);
+ // get Graphics Context
+ gc=XCreateGC(dis, win, 0,0);
+ XSetBackground(dis,gc,white);
+ XSetForeground(dis,gc,black);
+ XClearWindow(dis, win);
+ XMapRaised(dis, win);
+};
+
+void Main::close_x() {
+ XFreeGC(dis, gc);
+ XDestroyWindow(dis,win);
+ XCloseDisplay(dis);
+ exit(1);
+};
+
+void Main::redraw() {
+ XClearWindow(dis, win);
+};