X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7eff657c071f9df1938edb2d1b530492ccfc9489..c73b439f80d84ce1a58d862835b3b8cc3fb96f5d:/src/gtk/cursor.cpp diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index ab0d7294a2..159bb4bffa 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; } @@ -142,127 +142,131 @@ wxCursor::wxCursor(const char bits[], int width, int height, wxCursor::wxCursor( const wxCursor &cursor ) + : wxObject() { Ref( cursor ); } #if wxUSE_IMAGE + wxCursor::wxCursor( const wxImage & image ) { unsigned char * rgbBits = image.GetData(); - int w = image.GetWidth() ; - int h = image.GetHeight() ; - bool bHasMask = image.HasMask() ; + int w = image.GetWidth() ; + int h = image.GetHeight(); + bool bHasMask = image.HasMask(); int imagebitcount = (w*h)/8; - unsigned char r, g, b ; unsigned char * bits = new unsigned char [imagebitcount]; unsigned char * maskBits = new unsigned char [imagebitcount]; - int i,j, i8; unsigned char c, cMask; + int i, j, i8; unsigned char c, cMask; for (i=0; i mid grey - if (c>127) - bits[i] = bits[i] | cMask ; - cMask = cMask * 2 ; - } + { + // possible overflow if we do the summation first ? + c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3; + //if average value is > mid grey + if (c>127) + bits[i] = bits[i] | cMask; + cMask = cMask * 2; } + } + + unsigned long keyMaskColor; if (bHasMask) - { - r = image.GetMaskRed() ; - g = image.GetMaskGreen() ; - b = image.GetMaskBlue() ; + { + unsigned char + r = image.GetMaskRed(), + g = image.GetMaskGreen(), + b = image.GetMaskBlue(); for (i=0; iGetData(); - 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) ) ; + (unsigned char)(MostFreqCol) ); wxColour bg = wxColour ( (unsigned char)(NextFreqCol >> 16), (unsigned char)(NextFreqCol >> 8), - (unsigned char)(NextFreqCol) ) ; - + (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 ); @@ -276,11 +280,11 @@ wxCursor::wxCursor( const wxImage & image ) gdk_bitmap_unref( data ); gdk_bitmap_unref( mask ); - delete [] bits ; + delete [] bits; delete [] maskBits; - } -#endif + +#endif // wxUSE_IMAGE wxCursor::~wxCursor() { @@ -361,7 +365,7 @@ void wxBeginBusyCursor( wxCursor *WXUNUSED(cursor) ) if (wxTheApp) wxTheApp->SendIdleEvents(); - + gdk_flush(); }