Restore handling of XPMs with a mask in wxStyledTextCtrl

Fix XPM to RGBA conversion code for Scintilla markers to handle mask
correctly.

Closes #18374.
This commit is contained in:
New Pagodi
2019-03-30 03:44:09 +01:00
committed by Vadim Zeitlin
parent a15004fc5f
commit 211b81f459

View File

@@ -1346,12 +1346,32 @@ void ScintillaWX::DoMarkerDefineBitmap(int markerNumber, const wxBitmap& bmp) {
wxImage img = bmp.ConvertToImage();
int curRGBALoc = 0, curDataLoc = 0, curAlphaLoc = 0;
for ( int i = 0; i < totalPixels; ++i ) {
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] =
img.HasAlpha() ? img.GetAlpha()[curAlphaLoc++] : wxALPHA_OPAQUE ;
if ( img.HasMask() ) {
for ( int y = 0; y < bmp.GetHeight(); ++y ) {
for ( int x = 0 ; x < bmp.GetWidth(); ++x ) {
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.IsTransparent(x,y)
? wxALPHA_TRANSPARENT : wxALPHA_OPAQUE ;
}
}
}
else if ( img.HasAlpha() ) {
for ( int i = 0; i < totalPixels; ++i ) {
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetAlpha()[curAlphaLoc++];
}
}
else {
for ( int i = 0; i < totalPixels; ++i ) {
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = img.GetData()[curDataLoc++];
rgba[curRGBALoc++] = wxALPHA_OPAQUE ;
}
}
// Now follow the same procedure used for handling the