Bug 1401638 - Set and reset mPermitSubpixelAA in push and pop layer for DrawTargetCapture. r=bas

MozReview-Commit-ID: DxeNaiAYJvb

--HG--
extra : rebase_source : ea799e4f4d48b52702423d726304b1a5a96fbb65
This commit is contained in:
Ryan Hunt 2017-09-20 12:23:01 -05:00
parent a2d2f547b1
commit 9269f6c8a4
2 changed files with 19 additions and 0 deletions

View File

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

View File

@ -168,6 +168,14 @@ private:
RefPtr<DrawTarget> mRefDT;
IntSize mSize;
struct PushedLayer
{
PushedLayer(bool aOldPermitSubpixelAA)
: mOldPermitSubpixelAA(aOldPermitSubpixelAA)
{}
bool mOldPermitSubpixelAA;
};
std::vector<PushedLayer> mPushedLayers;
std::vector<uint8_t> mDrawCommandStorage;
};