Bug 1234485 - Part 4. Implement nsDisplayMask::ShouldPaintOnMaskLayer. r=mstange

MozReview-Commit-ID: CChi1vbLLh8

--HG--
extra : rebase_source : d869aeb9993e6d631a494f0b63494de3b576b5b3
This commit is contained in:
cku 2016-10-19 11:44:15 +08:00
parent 4d9495cf77
commit 51fd365a1a
2 changed files with 32 additions and 0 deletions

View File

@ -7057,9 +7057,37 @@ nsDisplayMask::GetLayerState(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aParameters)
{
if (ShouldPaintOnMaskLayer(aManager)) {
return RequiredLayerStateForChildren(aBuilder, aManager, aParameters,
mList, GetAnimatedGeometryRoot());
}
return LAYER_SVG_EFFECTS;
}
bool nsDisplayMask::ShouldPaintOnMaskLayer(LayerManager* aManager)
{
if (!aManager->IsCompositingCheap()) {
return false;
}
nsSVGIntegrationUtils::MaskUsage maskUsage;
nsSVGIntegrationUtils::DetermineMaskUsage(mFrame, mHandleOpacity, maskUsage);
if (!maskUsage.shouldGenerateMaskLayer ||
maskUsage.opacity != 1.0 || maskUsage.shouldApplyClipPath ||
maskUsage.shouldApplyBasicShape ||
maskUsage.shouldGenerateClipMaskLayer) {
return false;
}
if (!nsSVGIntegrationUtils::IsMaskResourceReady(mFrame)) {
return false;
}
return true;
}
bool nsDisplayMask::ComputeVisibility(nsDisplayListBuilder* aBuilder,
nsRegion* aVisibleRegion)
{

View File

@ -3918,6 +3918,10 @@ public:
return mDestRects;
}
private:
// According to mask property and the capability of aManager, determine
// whether paint mask onto a dedicate mask layer.
bool ShouldPaintOnMaskLayer(LayerManager* aManager);
nsTArray<nsRect> mDestRects;
};