+ long MostFreqCol = 0;
+ unsigned long nMost = 0;
+ long NextFreqCol = 0;
+ unsigned long nNext = 0;
+ wxImageHistogram::iterator entry = histogram.begin();
+
+ while ( entry != histogram.end() )
+ {
+ value = entry->second.value;
+ key = entry->first;
+ if ( !bHasMask || (key != keyMaskColor) )
+ {
+ if (value > nMost)
+ {
+ nMost = value;
+ MostFreqCol = key;
+ }
+ else if (value > nNext)
+ {
+ nNext = value;
+ NextFreqCol = key;
+ }
+ }
+ }
+
+ wxColour fg = wxColour ( (unsigned char)(MostFreqCol >> 16),
+ (unsigned char)(MostFreqCol >> 8),
+ (unsigned char)(MostFreqCol) );
+
+ wxColour bg = wxColour ( (unsigned char)(NextFreqCol >> 16),
+ (unsigned char)(NextFreqCol >> 8),
+ (unsigned char)(NextFreqCol) );
+
+ int hotSpotX=0;
+ int hotSpotY=0;
+
+ if (image.HasOption(wxCUR_HOTSPOT_X))
+ hotSpotX = image.GetOptionInt(wxCUR_HOTSPOT_X);
+ if (image.HasOption(wxCUR_HOTSPOT_Y))
+ hotSpotY = image.GetOptionInt(wxCUR_HOTSPOT_Y);
+
+ if (hotSpotX < 0 || hotSpotX >= w)
+ hotSpotX = 0;
+ if (hotSpotY < 0 || hotSpotY >= h)
+ hotSpotY = 0;
+
+ GdkBitmap *data = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) bits,
+ w, h );
+ GdkBitmap *mask = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) maskBits,
+ w, h );
+
+ m_refData = new wxCursorRefData;
+ M_CURSORDATA->m_cursor = gdk_cursor_new_from_pixmap(
+ data, mask, fg.GetColor(), bg.GetColor(),
+ hotSpotX, hotSpotY );
+
+ gdk_bitmap_unref( data );
+ gdk_bitmap_unref( mask );
+ delete [] bits;
+ delete [] maskBits;
+}
+
+#endif // wxUSE_IMAGE
+
+wxCursor::~wxCursor()