From ee867fb1b2a8117baffeb497b99b84b5c8dcb72d Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 11 Apr 2008 09:52:08 -0400 Subject: ENH: add a simple x11 program --- Tests/X11/HelloWorldX11.cxx | 145 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Tests/X11/HelloWorldX11.cxx diff --git a/Tests/X11/HelloWorldX11.cxx b/Tests/X11/HelloWorldX11.cxx new file mode 100644 index 0000000..7b18e20 --- /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 + +/* include the X library headers */ +#include +#include +#include + +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); +}; -- cgit v0.12