Try to simply alpha handling in wxCairoBitmapData a bit more
Don't use hasAlpha under platforms where it's always true.
This commit is contained in:
@@ -1491,10 +1491,15 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm
|
|||||||
// different format and iterator than if it doesn't...
|
// different format and iterator than if it doesn't...
|
||||||
const bool isSrcBpp32 = bmp.GetDepth() == 32;
|
const bool isSrcBpp32 = bmp.GetDepth() == 32;
|
||||||
|
|
||||||
|
#if defined(__WXMSW__) || defined(__WXOSX__)
|
||||||
|
// Under MSW and OSX we can have 32 bpp xRGB bitmaps (without alpha).
|
||||||
|
const bool hasAlpha = bmpSource.HasAlpha();
|
||||||
|
#endif
|
||||||
|
|
||||||
cairo_format_t bufferFormat =
|
cairo_format_t bufferFormat =
|
||||||
// Under MSW and OSX we can have 32 bpp xRGB bitmaps (without alpha).
|
// Under MSW and OSX we can have 32 bpp xRGB bitmaps (without alpha).
|
||||||
#if defined(__WXMSW__) || defined(__WXOSX__)
|
#if defined(__WXMSW__) || defined(__WXOSX__)
|
||||||
(isSrcBpp32 && bmp.HasAlpha()) || bmp.GetMask() != NULL
|
(isSrcBpp32 && hasAlpha) || bmp.GetMask() != NULL
|
||||||
#else
|
#else
|
||||||
isSrcBpp32 || bmp.GetMask() != NULL
|
isSrcBpp32 || bmp.GetMask() != NULL
|
||||||
#endif
|
#endif
|
||||||
@@ -1507,13 +1512,6 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm
|
|||||||
|
|
||||||
if ( isSrcBpp32 )
|
if ( isSrcBpp32 )
|
||||||
{
|
{
|
||||||
#if defined(__WXMSW__) || defined(__WXOSX__)
|
|
||||||
// Under MSW and OSX we can have 32 bpp xRGB bitmaps (without alpha).
|
|
||||||
const bool hasAlpha = bmpSource.HasAlpha();
|
|
||||||
#else
|
|
||||||
const bool hasAlpha = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// use the bitmap's alpha
|
// use the bitmap's alpha
|
||||||
wxAlphaPixelData pixData(bmpSource);
|
wxAlphaPixelData pixData(bmpSource);
|
||||||
@@ -1530,11 +1528,13 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm
|
|||||||
// with alpha in the upper 8 bits, then red, then green, then
|
// with alpha in the upper 8 bits, then red, then green, then
|
||||||
// blue. The 32-bit quantities are stored native-endian.
|
// blue. The 32-bit quantities are stored native-endian.
|
||||||
// Pre-multiplied alpha is used.
|
// Pre-multiplied alpha is used.
|
||||||
unsigned char alpha = hasAlpha ? p.Alpha() : 255;
|
|
||||||
#if defined (__WXMSW__) || defined(__WXOSX__)
|
#if defined (__WXMSW__) || defined(__WXOSX__)
|
||||||
|
unsigned char alpha = hasAlpha ? p.Alpha() : 255;
|
||||||
// MSW and OSX bitmap pixel bits are already premultiplied.
|
// MSW and OSX bitmap pixel bits are already premultiplied.
|
||||||
*data = (alpha << 24 | p.Red() << 16 | p.Green() << 8 | p.Blue());
|
*data = (alpha << 24 | p.Red() << 16 | p.Green() << 8 | p.Blue());
|
||||||
#else // !__WXMSW__ , !__WXOSX__
|
#else // !__WXMSW__ , !__WXOSX__
|
||||||
|
// We always have alpha, but we need to premultiply it.
|
||||||
|
unsigned char alpha = p.Alpha();
|
||||||
if (alpha == 0)
|
if (alpha == 0)
|
||||||
*data = 0;
|
*data = 0;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user