X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/952ae1e88b9092f493b4ea6911a2b60b378d422d..e3fed5c49ab00309ec63dbf05fd498e658ad81e2:/src/gtk1/cursor.cpp?ds=sidebyside diff --git a/src/gtk1/cursor.cpp b/src/gtk1/cursor.cpp index adf882b133..8bcc0d0ce1 100644 --- a/src/gtk1/cursor.cpp +++ b/src/gtk1/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; } @@ -147,72 +147,77 @@ wxCursor::wxCursor( const wxCursor &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; i> 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); if (image.HasOption(wxCUR_HOTSPOT_Y)) hotSpotY = image.GetOptionInt(wxCUR_HOTSPOT_Y); - + if (hotSpotX < 0 || hotSpotX >= w) hotSpotX = 0; if (hotSpotY < 0 || hotSpotY >= h) @@ -274,10 +279,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() { @@ -358,7 +364,7 @@ void wxBeginBusyCursor( wxCursor *WXUNUSED(cursor) ) if (wxTheApp) wxTheApp->SendIdleEvents(); - + gdk_flush(); }