X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/15dadf3155f879f8c5031e452566a7b1859e01e3..36d9119341753b2f6f606571702a9b906050a07c:/src/gtk1/cursor.cpp diff --git a/src/gtk1/cursor.cpp b/src/gtk1/cursor.cpp index c4b56c6172..8bcc0d0ce1 100644 --- a/src/gtk1/cursor.cpp +++ b/src/gtk1/cursor.cpp @@ -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 hotSpotY=0; @@ -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() {