]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/cursor.cpp
updated wxExecute API
[wxWidgets.git] / src / gtk1 / cursor.cpp
index ab0d7294a26a7abdac49c07d4d8aa53c5f1649e0..c4b56c61723c5b952d566b6b731993698d74c9dd 100644 (file)
@@ -68,7 +68,9 @@ wxCursor::wxCursor( int cursorId )
     GdkCursorType gdk_cur = GDK_LEFT_PTR;
     switch (cursorId)
     {
+        case wxCURSOR_ARROW:            // fall through to default
         case wxCURSOR_DEFAULT:          gdk_cur = GDK_LEFT_PTR; break;
+        case wxCURSOR_RIGHT_ARROW:      gdk_cur = GDK_RIGHT_PTR; break;
         case wxCURSOR_HAND:             gdk_cur = GDK_HAND1; break;
         case wxCURSOR_CROSS:            gdk_cur = GDK_CROSSHAIR; break;
         case wxCURSOR_SIZEWE:           gdk_cur = GDK_SB_H_DOUBLE_ARROW; break;
@@ -103,8 +105,6 @@ wxCursor::wxCursor( int cursorId )
         default:
             wxFAIL_MSG(wxT("unsupported cursor type"));
             // will use the standard one
-
-        case wxCURSOR_ARROW:
             break;
     }
 
@@ -205,42 +205,42 @@ wxCursor::wxCursor( const wxImage & image )
     //it seems a waste of effort to copy the image
     //but otherwise we need to remove the const modifier ??
     wxImage tmpImage = image.Copy();
-    wxHashTable hTable;
+    wxImageHistogram histogram;
 
     //colors as rrggbb
     unsigned long key;
+    unsigned long value;
     unsigned long keyMaskColor = 0;
-    if (bHasMask) keyMaskColor = (r << 16) | (g << 8) | b;
+    if (bHasMask)
+        keyMaskColor = (r << 16) | (g << 8) | b;
+
+    tmpImage.ComputeHistogram(histogram);
 
-    tmpImage.ComputeHistogram( hTable );
+    long MostFreqCol = 0;
+    unsigned long nMost = 0;
+    long NextFreqCol = 0;
+    unsigned long nNext = 0;
+    wxImageHistogram::iterator entry = histogram.begin();
 
-    long MostFreqCol = 0 ; long nMost = 0;
-    long NextFreqCol = 0 ; long nNext = 0;
-    long value ;
-    hTable.BeginFind();
-    wxNode *node = NULL;
-    while ((node = hTable.Next()) != NULL)
+    while ( entry != histogram.end() )
     {
-        wxHNode *hnode = (wxHNode*) node->GetData();
-        value = hnode->value;
-        key = node->GetKeyInteger() ;
-        if (!bHasMask || (key != keyMaskColor) )
+        value = entry->second.value;
+        key = entry->first;
+        if ( !bHasMask || (key != keyMaskColor) )
         {
-        if (value > nMost)
+            if (value > nMost)
             {
-            nMost = value;
-            MostFreqCol = key;
+                nMost = value;
+                MostFreqCol = key;
             }
-        else
-            if (value > nNext)
+            else if (value > nNext)
             {
-            nNext = value ;
-            NextFreqCol = key;
+                nNext = value;
+                NextFreqCol = key;
             }
         }
     }
 
-
     wxColour fg = wxColour ( (unsigned char)(MostFreqCol >> 16),
                              (unsigned char)(MostFreqCol >> 8),
                              (unsigned char)(MostFreqCol) ) ;
@@ -249,20 +249,18 @@ wxCursor::wxCursor( const wxImage & image )
                              (unsigned char)(NextFreqCol >> 8),
                              (unsigned char)(NextFreqCol) ) ;
 
-
-
-    int hotSpotX=0; 
+    int hotSpotX=0;
     int hotSpotY=0;
 
     if (image.HasOption(wxCUR_HOTSPOT_X))
-       hotSpotX = image.GetOptionInt(wxCUR_HOTSPOT_X);
+        hotSpotX = image.GetOptionInt(wxCUR_HOTSPOT_X);
     if (image.HasOption(wxCUR_HOTSPOT_Y))
-       hotSpotY = image.GetOptionInt(wxCUR_HOTSPOT_Y);
-   
+        hotSpotY = image.GetOptionInt(wxCUR_HOTSPOT_Y);
+
     if (hotSpotX < 0 || hotSpotX >= w)
-            hotSpotX = 0;
+        hotSpotX = 0;
     if (hotSpotY < 0 || hotSpotY >= h)
-            hotSpotY = 0;
+        hotSpotY = 0;
 
     GdkBitmap *data = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) bits,
         w, h );
@@ -278,7 +276,6 @@ wxCursor::wxCursor( const wxImage & image )
     gdk_bitmap_unref( mask );
     delete [] bits ;
     delete [] maskBits;
-
 }
 #endif
 
@@ -361,7 +358,7 @@ void wxBeginBusyCursor( wxCursor *WXUNUSED(cursor) )
 
     if (wxTheApp)
         wxTheApp->SendIdleEvents();
-        
+
     gdk_flush();
 }