diff --git a/source/Platform/Unix/X11Display.cpp b/source/Platform/Unix/X11Display.cpp index ed93a7a..968a9c3 100644 --- a/source/Platform/Unix/X11Display.cpp +++ b/source/Platform/Unix/X11Display.cpp @@ -10,9 +10,11 @@ namespace sp { X11Display:: X11Display() : -m_screen (0), -m_disp (NULL), -m_size (200,200) +m_screen (0), +m_disp (NULL), +m_size (200,200), +m_cur_last (0), +m_cur_hidden (0) { } @@ -65,6 +67,8 @@ bool X11Display::create(DisplayDescription description) Log::info("X11: Created display"); + createHiddenCursor(); + return true; } @@ -117,9 +121,27 @@ void X11Display::setIcon(const std::string& icon) // TODO: Implement } +void X11Display::createHiddenCursor() +{ + XColor c; + Pixmap pix = ::XCreatePixmap(m_disp, m_win, 1, 1, 1); + GC gc = ::XCreateGC(m_disp, pix, 0, NULL); + + // Draw transparent pixel. + ::XDrawPoint(m_disp, pix, gc, 0, 0); + + c.red = c.green = c.blue = 0; + c.flags = DoRed | DoGreen | DoBlue; + m_cur_hidden = XCreatePixmapCursor(m_disp, pix, pix, &c, &c, 0, 0); + + // Free GC and pixmap. + ::XFreePixmap(m_disp, pix); + ::XFreeGC(m_disp, gc); +} + void X11Display::showCursor(bool value) { - // TODO: Implement + XDefineCursor(m_disp, m_win, value ? m_cur_last : m_cur_hidden); } void X11Display::processEvent(const ::XEvent& event) diff --git a/source/Platform/Unix/X11Display.h b/source/Platform/Unix/X11Display.h index 9343705..ec4c094 100644 --- a/source/Platform/Unix/X11Display.h +++ b/source/Platform/Unix/X11Display.h @@ -39,6 +39,10 @@ public : void processEvent(const ::XEvent& event); +protected : + + void createHiddenCursor(); + protected : ::Display* m_disp; @@ -47,7 +51,8 @@ protected : int m_screen; - //GC m_GC; + ::Cursor m_cur_hidden; + ::Cursor m_cur_last; Vector2u m_size; };