Detect copyArea trying to operate on overlapping memory.
Equality test also needs to check if disjunct BitmapDevice instances might not actually share the same memory buffer. Change-Id: I09a93cb092a0039353be211ed053e991e7fe66f0
This commit is contained in:
committed by
Thorsten Behrens
parent
c32c11fbd4
commit
31b35ed6bb
@@ -680,7 +680,7 @@ namespace
|
||||
destIterRange(begin,
|
||||
acc,
|
||||
rDstRect),
|
||||
rSrcBitmap.get() == this );
|
||||
isSharedBuffer(rSrcBitmap) );
|
||||
damaged( rDstRect );
|
||||
}
|
||||
|
||||
@@ -903,7 +903,7 @@ namespace
|
||||
Masks::clipmask_polarity,
|
||||
FastMask >::type(acc),
|
||||
rDstRect),
|
||||
rSrcBitmap.get() == this);
|
||||
isSharedBuffer(rSrcBitmap));
|
||||
damaged( rDstRect );
|
||||
}
|
||||
|
||||
@@ -1147,6 +1147,11 @@ PaletteMemorySharedVector BitmapDevice::getPalette() const
|
||||
return mpImpl->mpPalette;
|
||||
}
|
||||
|
||||
bool BitmapDevice::isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const
|
||||
{
|
||||
return rOther.get()->getBuffer().get() == getBuffer().get();
|
||||
}
|
||||
|
||||
void BitmapDevice::clear( Color fillColor )
|
||||
{
|
||||
clear_i( fillColor, mpImpl->maBounds );
|
||||
@@ -1507,7 +1512,7 @@ void BitmapDevice::drawMaskedColor( Color aSrcColor,
|
||||
assertImagePoint(aDestPoint,mpImpl->maBounds);
|
||||
assertImageRange(aSrcRange,aSrcBounds);
|
||||
|
||||
if( rAlphaMask.get() == this )
|
||||
if( isSharedBuffer(rAlphaMask) )
|
||||
{
|
||||
// src == dest, copy rAlphaMask beforehand
|
||||
// ---------------------------------------------------
|
||||
@@ -1560,7 +1565,7 @@ void BitmapDevice::drawMaskedColor( Color aSrcColor,
|
||||
|
||||
if( isCompatibleClipMask( rClip ) )
|
||||
{
|
||||
if( rAlphaMask.get() == this )
|
||||
if( isSharedBuffer(rAlphaMask) )
|
||||
{
|
||||
// src == dest, copy rAlphaMask beforehand
|
||||
// ---------------------------------------------------
|
||||
|
@@ -140,6 +140,9 @@ public:
|
||||
*/
|
||||
PaletteMemorySharedVector getPalette() const;
|
||||
|
||||
/// Check if this and the other BitmapDevice share a buffer
|
||||
bool isSharedBuffer( const BitmapDeviceSharedPtr& rOther ) const;
|
||||
|
||||
/** Clear whole device with given color
|
||||
|
||||
This method works like a fill with the given color value,
|
||||
|
Reference in New Issue
Block a user