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