123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*** 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 <stdlib.h>
- /* include the X library headers */
- #include <X11/Xlib.h>
- #include <X11/Xos.h>
- #include <X11/Xutil.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);
- };
|