Optimize drawing of small bitmaps with alpha in wxMSW

Don't erase alpha channel of the entire destination image after drawing on it
using AlphaBlend(), we only need to do it for the area corresponding to the
bitmap drawn on it. This speeds things up when drawing small bitmaps with
alpha on a big bitmap without alpha selected into wxMemoryDC which is a common
case.

See #16766.
This commit is contained in:
Artur Wieczorek
2015-11-15 00:37:22 +01:00
committed by Vadim Zeitlin
parent 351103cc45
commit d04e256993

View File

@@ -2624,11 +2624,12 @@ static bool AlphaBlt(wxMSWDCImpl* dcDst,
if ( data )
{
wxAlphaPixelData::Iterator p(data);
for ( int old_y = 0; old_y < data.GetHeight(); old_y++ )
p.Offset(data, x, y);
for ( int yDst = 0; yDst < dstHeight; yDst++ )
{
wxAlphaPixelData::Iterator rowStart = p;
for ( int old_x = 0; old_x < data.GetWidth(); old_x++ )
for ( int xDst = 0; xDst < dstWidth; xDst++ )
{
// We choose to use wxALPHA_TRANSPARENT instead
// of perhaps more logical wxALPHA_OPAQUE here