#include #include #include #include "imgProcess.h" #include "imgDisplay.h" imgDisplay::~imgDisplay() { } imgDisplay::imgDisplay(imgProcess *image) { iflXYint winSize(image->_image->getXsize(), image->_image->getYsize()); int Xattributes = ilVisDoubleBuffer; _display = XOpenDisplay(NULL); if (_display != NULL) { int screen = DefaultScreen(_display); winSize.x = iflMin(winSize.x, DisplayWidth(_display, screen)); winSize.y = iflMin(winSize.y, DisplayHeight(_display, screen)); // Create X window viewer ilViewer viewer(_display, winSize.x, winSize.y, Xattributes); viewer.addView(image->_image, ilLast, ilClip|ilCenter|ilDefer); viewer.setStop(TRUE); XEvent event; short done = FALSE; while (!done) { XNextEvent(_display, &event); switch (event.type) { case KeyPress: switch(XLookupKeysym(&event.xkey, 0)) { // center the selected view(s) in the viewer case XK_Home: viewer.display(NULL, ilCenter|ilClip); break; // control-Q and escape exit the program case XK_q: if (!(event.xkey.state&ControlMask)) break; /*FALLTHROUGH*/ case XK_Escape: done = TRUE; break; // raise and lower the current view(s) case XK_Up: viewer.raise(); break; case XK_Down: viewer.lower(); break; // enable/disable paint pipelining case XK_p: viewer.enableQueueing(!viewer.isQueueingEnabled()); break; } break; case DestroyNotify: viewer.destroyNotify(); done = TRUE; break; default: viewer.event(&event); break; } } viewer.remove(); XCloseDisplay(_display); } }