Bug 1284440 - Prevent CreateRenderTargetForWindow from clearing unwanted area. r=mattwoodrow

MozReview-Commit-ID: BhUlnThiI2
This commit is contained in:
Morris Tseng 2016-07-07 14:12:52 +08:00
parent 93a1a23b6b
commit 587bf3d8eb

View File

@ -621,6 +621,10 @@ BasicCompositor::BeginFrame(const nsIntRegion& aInvalidRegion,
clearRect = mInvalidRect;
}
// Prevent CreateRenderTargetForWindow from clearing unwanted area.
gfxUtils::ClipToRegion(mDrawTarget,
mInvalidRegion.ToUnknownRegion());
// Setup an intermediate render target to buffer all compositing. We will
// copy this into mDrawTarget (the widget), and/or mTarget in EndFrame()
RefPtr<CompositingRenderTarget> target =
@ -639,8 +643,10 @@ BasicCompositor::BeginFrame(const nsIntRegion& aInvalidRegion,
// translate future coordinates.
mRenderTarget->mDrawTarget->SetTransform(Matrix::Translation(-mRenderTarget->GetOrigin()));
gfxUtils::ClipToRegion(mRenderTarget->mDrawTarget,
mInvalidRegion.ToUnknownRegion());
if (mRenderTarget->mDrawTarget != mDrawTarget) {
gfxUtils::ClipToRegion(mRenderTarget->mDrawTarget,
mInvalidRegion.ToUnknownRegion());
}
if (aRenderBoundsOut) {
*aRenderBoundsOut = rect;
@ -675,7 +681,10 @@ BasicCompositor::EndFrame()
}
// Pop aInvalidregion
mRenderTarget->mDrawTarget->PopClip();
mDrawTarget->PopClip();
if (mRenderTarget->mDrawTarget != mDrawTarget) {
mRenderTarget->mDrawTarget->PopClip();
}
if (mTarget || mRenderTarget->mDrawTarget != mDrawTarget) {
// Note: Most platforms require us to buffer drawing to the widget surface.