]> git.tdb.fi Git - libs/gui.git/blobdiff - source/gbase/window.cpp
Move Image from mspgl to here
[libs/gui.git] / source / gbase / window.cpp
index 3ba8d767a90e9edf5b9392bd2ef5d3d5b4f62e2d..9f2361e4e3c90ab93243294d0d206cf648e15ffb 100644 (file)
@@ -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;