From 0ee25aaa7615f81c49adde0ba272416b39b28ccd Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Mon, 11 Apr 2016 18:06:42 +0200 Subject: [PATCH] Fixed creating Cairo bitmap from wxBitmap (wxMSW). Iterating over bit values with wxAlphaPixelData sets the internal wxBitmap's "has alpha" flag but we want to left it unchanged so we have to save its original value and restore it afterward. --- src/generic/graphicc.cpp | 80 +++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 218d1d7435..2a32a1df23 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -1414,43 +1414,57 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm if ( isSrcBpp32 ) { - // use the bitmap's alpha - wxAlphaPixelData - pixData(bmpSource, wxPoint(0, 0), wxSize(m_width, m_height)); - wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data.")); + // Using wxAlphaPixelData sets (on wxMSW and wxOSX) the internal + // "has alpha" flag but we want to leave it unchanged, so we need + // to save its current value now and restore it afterwards. +#if defined(__WXMSW__) || defined(__WXOSX__) + const bool hasAlpha = bmpSource.HasAlpha(); +#endif // __WXMSW__ || __WXOSX__ - wxAlphaPixelData::Iterator p(pixData); - for (int y=0; y