#include // Prevents conflict with X.h defining "None" #include #include "X11SharedDisplay.h" #include "GLXContext.h" #include "X11Display.h" namespace sp { X11Display:: X11Display() : m_screen (0), m_disp (NULL), m_size (200,200) { } bool X11Display::create(DisplayDescription description) { XSetWindowAttributes attr; XVisualInfo* vi; m_disp = XGetDisplay(); if (m_disp == NULL) { Log::warn("X11: Could not open display"); return false; } m_screen = DefaultScreen(m_disp); attr.border_pixel = BlackPixel(m_disp, m_screen); attr.background_pixel = WhitePixel(m_disp, m_screen); //attr.override_redirect = True; attr.colormap = ::XCreateColormap(m_disp, RootWindow(m_disp, m_screen), DefaultVisual(m_disp, m_screen), AllocNone); // We want Keyboard,Mouse,Resize,Exposure (repaint) events. attr.event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ResizeRedirectMask | ExposureMask; m_win = XCreateWindow(m_disp, RootWindow(m_disp, m_screen), 0, 0, m_size.x, m_size.y, 0, DefaultDepth(m_disp, m_screen), InputOutput, DefaultVisual(m_disp, m_screen), CWBackPixel | CWColormap | CWBorderPixel | CWEventMask, &attr); XMapWindow(m_disp, m_win); // Clear and take focus XClearWindow(m_disp, m_win); XMapRaised(m_disp, m_win); Log::info("X11: Created display"); return true; } void X11Display::destroy() { if (m_disp) { XReleaseDisplay(); m_disp = NULL; } } bool X11Display::isValid() { return m_disp && m_win; } void* X11Display::getHandle() const { return (void*) m_win; } void X11Display::setSize(unsigned int width, unsigned int height) { m_size = Vector2u(width, height); ::XResizeWindow(m_disp, m_win, m_size.x, m_size.y); } Vector2u X11Display::getSize() const { return m_size; } void X11Display::setPosition(unsigned int x, unsigned int y) { ::XMoveWindow(m_disp, m_win, x, y); } void X11Display::setCaption(const std::string& caption) { ::XStoreName(m_disp, m_win, caption.c_str()); } void X11Display::setIcon(const std::string& icon) { // TODO: Implement } void X11Display::showCursor(bool value) { // TODO: Implement } } // namespace sp