From d5e66ff9f47b4bbd59808c75ede6e30ad35a5cd4 Mon Sep 17 00:00:00 2001

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:
Cgg
2014-06-21 14:32:30 +02:00
parent 16a53fd632
commit 9da9590b38
2 changed files with 12 additions and 0 deletions

View File

@@ -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();
}