Bug 783043 - Restore original image factory after paint operations. r=nical
--- gfx/layers/ImageContainer.h | 5 +++++ gfx/layers/basic/BasicImageLayer.cpp | 7 +++++++ 2 files changed, 12 insertions(+)
This commit is contained in:
@@ -74,6 +74,7 @@ BasicImageLayer::Paint(DrawTarget* aDT,
|
||||
return;
|
||||
}
|
||||
|
||||
nsRefPtr<ImageFactory> originalIF = mContainer->GetImageFactory();
|
||||
mContainer->SetImageFactory(mManager->IsCompositingCheap() ? nullptr : BasicManager()->GetImageFactory());
|
||||
|
||||
RefPtr<gfx::SourceSurface> surface;
|
||||
@@ -82,6 +83,7 @@ BasicImageLayer::Paint(DrawTarget* aDT,
|
||||
gfx::IntSize size = mSize = autoLock.GetSize();
|
||||
|
||||
if (!surface || !surface->IsValid()) {
|
||||
mContainer->SetImageFactory(originalIF);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -90,6 +92,7 @@ BasicImageLayer::Paint(DrawTarget* aDT,
|
||||
DrawOptions(GetEffectiveOpacity(), GetEffectiveOperator(this)),
|
||||
aMaskLayer);
|
||||
|
||||
mContainer->SetImageFactory(originalIF);
|
||||
GetContainer()->NotifyPaintedImage(image);
|
||||
}
|
||||
|
||||
@@ -102,6 +105,7 @@ BasicImageLayer::GetAndPaintCurrentImage(DrawTarget* aTarget,
|
||||
return;
|
||||
}
|
||||
|
||||
nsRefPtr<ImageFactory> originalIF = mContainer->GetImageFactory();
|
||||
mContainer->SetImageFactory(mManager->IsCompositingCheap() ?
|
||||
nullptr :
|
||||
BasicManager()->GetImageFactory());
|
||||
@@ -111,6 +115,7 @@ BasicImageLayer::GetAndPaintCurrentImage(DrawTarget* aTarget,
|
||||
mContainer->LockCurrentAsSourceSurface(&size, &image);
|
||||
|
||||
if (!surf) {
|
||||
mContainer->SetImageFactory(originalIF);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -126,6 +131,8 @@ BasicImageLayer::GetAndPaintCurrentImage(DrawTarget* aTarget,
|
||||
GetContainer()->NotifyPaintedImage(image);
|
||||
}
|
||||
|
||||
mContainer->SetImageFactory(originalIF);
|
||||
|
||||
mContainer->UnlockCurrentImage();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user