From 9269f6c8a48ea7c17b8338dafd401db606f31da2 Mon Sep 17 00:00:00 2001 From: Ryan Hunt Date: Wed, 20 Sep 2017 12:23:01 -0500 Subject: [PATCH] Bug 1401638 - Set and reset mPermitSubpixelAA in push and pop layer for DrawTargetCapture. r=bas MozReview-Commit-ID: DxeNaiAYJvb --HG-- extra : rebase_source : ea799e4f4d48b52702423d726304b1a5a96fbb65 --- gfx/2d/DrawTargetCapture.cpp | 11 +++++++++++ gfx/2d/DrawTargetCapture.h | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/gfx/2d/DrawTargetCapture.cpp b/gfx/2d/DrawTargetCapture.cpp index 813252517e3a..87630f15d84a 100644 --- a/gfx/2d/DrawTargetCapture.cpp +++ b/gfx/2d/DrawTargetCapture.cpp @@ -227,6 +227,13 @@ DrawTargetCaptureImpl::PushLayer(bool aOpaque, const IntRect& aBounds, bool aCopyBackground) { + // Have to update mPermitSubpixelAA for this DT + // because some code paths query the current setting + // to determine subpixel AA eligibility. + PushedLayer layer(GetPermitSubpixelAA()); + mPushedLayers.push_back(layer); + DrawTarget::SetPermitSubpixelAA(aOpaque); + AppendCommand(PushLayerCommand)(aOpaque, aOpacity, aMask, @@ -238,6 +245,10 @@ DrawTargetCaptureImpl::PushLayer(bool aOpaque, void DrawTargetCaptureImpl::PopLayer() { + MOZ_ASSERT(mPushedLayers.size()); + DrawTarget::SetPermitSubpixelAA(mPushedLayers.back().mOldPermitSubpixelAA); + mPushedLayers.pop_back(); + AppendCommand(PopLayerCommand)(); } diff --git a/gfx/2d/DrawTargetCapture.h b/gfx/2d/DrawTargetCapture.h index 4f53eaa859c3..02fad72cf032 100644 --- a/gfx/2d/DrawTargetCapture.h +++ b/gfx/2d/DrawTargetCapture.h @@ -168,6 +168,14 @@ private: RefPtr mRefDT; IntSize mSize; + struct PushedLayer + { + PushedLayer(bool aOldPermitSubpixelAA) + : mOldPermitSubpixelAA(aOldPermitSubpixelAA) + {} + bool mOldPermitSubpixelAA; + }; + std::vector mPushedLayers; std::vector mDrawCommandStorage; };