X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgbase%2Fwindow.cpp;h=9f2361e4e3c90ab93243294d0d206cf648e15ffb;hb=aeb2546fc11a7e27a02a47e85756746330253742;hp=3ba8d767a90e9edf5b9392bd2ef5d3d5b4f62e2d;hpb=881ad898c45954f95972091554af25d775b8c2a8;p=libs%2Fgui.git diff --git a/source/gbase/window.cpp b/source/gbase/window.cpp index 3ba8d76..9f2361e 100644 --- a/source/gbase/window.cpp +++ b/source/gbase/window.cpp @@ -54,6 +54,9 @@ Window::~Window() CloseWindow(window); #else XDestroyWindow(display.get_display(), window); + + if(invisible_cursor) + XFreeCursor(display.get_display(), invisible_cursor); #endif display.remove_window(this); @@ -143,6 +146,43 @@ void Window::reconfigure(const WindowOptions &opts) display.restore_mode(); } +void Window::show_cursor(bool s) +{ +#ifdef WIN32 + ShowCursor(s); +#else + ::Display *dpy=display.get_display(); + + if(s) + XUndefineCursor(dpy, window); + else + { + if(!invisible_cursor) + { + int screen=DefaultScreen(dpy); + char data=0; + XImage *img=XCreateImage(dpy, DefaultVisual(dpy, screen), 1, XYBitmap, 0, &data, 1, 1, 8, 1); + + Pixmap pm=XCreatePixmap(dpy, window, 1, 1, 1); + GC gc=XCreateGC(dpy, pm, 0, 0); + XPutImage(dpy, pm, gc, img, 0, 0, 0, 0, 1, 1); + + XColor black; + black.pixel=BlackPixel(dpy, screen); + XQueryColor(dpy, DefaultColormap(dpy, screen), &black); + + invisible_cursor=XCreatePixmapCursor(dpy, pm, pm, &black, &black, 0, 0); + + XFreeGC(dpy, gc); + XFreePixmap(dpy, pm); + img->data=0; + XDestroyImage(img); + } + XDefineCursor(dpy, window, invisible_cursor); + } +#endif +} + void Window::show() { #ifdef WIN32 @@ -220,6 +260,7 @@ void Window::init() ::Display *dpy=display.get_display(); wm_delete_window=XInternAtom(dpy, "WM_DELETE_WINDOW", true); + invisible_cursor=0; XSetWindowAttributes attr; attr.override_redirect=options.fullscreen;