/*** 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 /* 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(1) { // 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); };