JAL Computing
|
Hello WorldA simple low level X11 Xt program. An object version of Brian Hammond's "Howdy" program. Although interesting, it is unlikely that you will need such low level access to X11. /*** START MAIN.H ***/ /* * 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 #include "main.h" 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); }; /*** END MAIN.CPP ***/
|
Send mail to [email protected]
with questions or comments about this web site. Copyright © 2001, 2002, 2003,
2004, 2005, 2006, 2007, 2008, 2009 ©
|