X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7eff657c071f9df1938edb2d1b530492ccfc9489..79954978c03064b8e2a28c0b8892d9e759e1550e:/src/gtk/cursor.cpp diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index ab0d7294a2..c4b56c6172 100644 --- a/src/gtk/cursor.cpp +++ b/src/gtk/cursor.cpp @@ -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(); }