X-Git-Url: http://git.tdb.fi/?p=libs%2Fgltk.git;a=blobdiff_plain;f=source%2Fwindow.cpp;h=2ec55b97d03997c3cc11a851e46d6a666dcf8ed0;hp=81f8ce15d988673d28d62ec73ec79165b4c766ec;hb=e9455430a6e765b6184532f160f6fde4a67b4a2f;hpb=68c4aa0eaaade8b163cf9b3a96aa640ea16b1def diff --git a/source/window.cpp b/source/window.cpp index 81f8ce1..2ec55b9 100644 --- a/source/window.cpp +++ b/source/window.cpp @@ -38,8 +38,32 @@ Window::~Window() XCloseDisplay(display); } +void Window::show() +{ + XMapWindow(display, window); +} + +void Window::tick() +{ + while(1) + { + int pending=XPending(display); + if(pending==0) + break; + + for(int i=0; ivisual, 0, 0); + + XSelectInput(display, window, ButtonPressMask|ButtonReleaseMask|MotionMask|KeyPressMask|KeyReleaseMask); +} + +void Window::process_event(const XEvent &event) +{ + switch(event.type) + { + case ButtonPress: + signal_button_press.emit(event.button.x, event.button.y, event.button.button, event.button.state); + break; + case ButtonRelease: + signal_button_release.emit(event.button.x, event.button.y, event.button.button, event.button.state); + break; + case PointerMotion: + signal_pointer_motion.emit(event.motion.x, event.motion.y); + break; + case KeyPress: + { + char buf[16]; + XLookupString(event.key, buf, sizeof(buf), 0, 0); + // XXX Handle the result according to locale + signal_key_press.emit(event.key.keycode, event.key.state, buf[0]); + } + break; + case KeyRelease: + signal_key_release.emit(event.key.keycode, event.key.state); + break; + default:; + } } } // namespace GLtk