]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/cursor.cpp
create hatch bitmaps on demand, and dispose of them at termination
[wxWidgets.git] / src / gtk / cursor.cpp
index 56d699feb71025907baefc9ffcfd0c228ed09f68..0e778d1f8cafa26321de49733f62583014e0013b 100644 (file)
     #include "wx/colour.h"
 #endif // WX_PRECOMP
 
-#include "wx/gtk/private.h" //for idle stuff
+#include <gtk/gtk.h>
 
 //-----------------------------------------------------------------------------
 // wxCursor
 //-----------------------------------------------------------------------------
 
-class wxCursorRefData: public wxObjectRefData
+class wxCursorRefData: public wxGDIRefData
 {
-  public:
-
+public:
     wxCursorRefData();
     virtual ~wxCursorRefData();
 
+    virtual bool IsOk() const { return m_cursor != NULL; }
+
     GdkCursor *m_cursor;
 };
 
@@ -87,7 +88,7 @@ wxCursor::wxCursor( int cursorId )
         case wxCURSOR_ARROWWAIT:
         case wxCURSOR_WAIT:
         case wxCURSOR_WATCH:            gdk_cur = GDK_WATCH; break;
-        case wxCURSOR_SIZING:           gdk_cur = GDK_FLEUR; break;
+        case wxCURSOR_SIZING:           gdk_cur = GDK_SIZING; break;
         case wxCURSOR_SPRAYCAN:         gdk_cur = GDK_SPRAYCAN; break;
         case wxCURSOR_IBEAM:            gdk_cur = GDK_XTERM; break;
         case wxCURSOR_PENCIL:           gdk_cur = GDK_PENCIL; break;
@@ -178,7 +179,6 @@ wxCursor::wxCursor( const wxImage & image )
     bool bHasMask = image.HasMask();
     int imagebitcount = (w*h)/8;
 
-#if GTK_CHECK_VERSION(2,2,0)
     if ( gdk_display_supports_cursor_color(gdk_display_get_default()) )
     {
         unsigned char rMask = 0,
@@ -217,15 +217,14 @@ wxCursor::wxCursor( const wxImage & image )
 
         m_refData = new wxCursorRefData;
         M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixbuf
-                                 (
-                                  gdk_display_get_default(),
-                                  pixbuf,
-                                  hotSpotX, hotSpotY
-                                 );
+                             (
+                              gdk_display_get_default(),
+                              pixbuf,
+                              hotSpotX, hotSpotY
+                             );
         g_object_unref (pixbuf);
         return;
     }
-#endif // GTK+ 2.2+
 
     unsigned char * bits = new unsigned char [imagebitcount];
     unsigned char * maskBits = new unsigned char [imagebitcount];
@@ -362,21 +361,28 @@ wxCursor::~wxCursor()
 {
 }
 
-bool wxCursor::IsOk() const
+GdkCursor *wxCursor::GetCursor() const
+{
+    return M_CURSORDATA->m_cursor;
+}
+
+wxGDIRefData *wxCursor::CreateGDIRefData() const
 {
-    return (m_refData != NULL);
+    return new wxCursorRefData;
 }
 
-GdkCursor *wxCursor::GetCursor() const
+wxGDIRefData *wxCursor::CloneGDIRefData(const wxGDIRefData *data) const
 {
-    return M_CURSORDATA->m_cursor;
+    return new wxCursorRefData(*wx_static_cast(const wxCursorRefData *, data));
 }
 
 //-----------------------------------------------------------------------------
 // busy cursor routines
 //-----------------------------------------------------------------------------
 
-extern wxCursor g_globalCursor;
+/* Current cursor, in order to hang on to
+ * cursor handle when setting the cursor globally */
+wxCursor g_globalCursor;
 
 static wxCursor  gs_savedCursor;
 static int       gs_busyCount = 0;
@@ -428,8 +434,6 @@ bool wxIsBusy()
 
 void wxSetCursor( const wxCursor& cursor )
 {
-    if (g_isIdle)
-        wxapp_install_idle_handler();
-
     g_globalCursor = cursor;
+    wxTheApp->WakeUpIdle();
 }