Bug 1384839 - Part2. Add BuildWrMaskImage() for creating WrImageMask. r=kats

MozReview-Commit-ID: 5S3CRSLX5wY

--HG--
extra : rebase_source : aeedbdf986d6f53b1f9410bbe5608dc45226c8f7
This commit is contained in:
Ethan Lin 2017-07-28 11:49:05 +08:00
parent 582a02967a
commit a79f89c36a
2 changed files with 34 additions and 1 deletions

View File

@ -371,7 +371,13 @@ PaintItemByDrawTarget(nsDisplayItem* aItem,
aDT->ClearRect(aImageRect.ToUnknownRect());
RefPtr<gfxContext> context = gfxContext::CreateOrNull(aDT, aOffset.ToUnknownPoint());
MOZ_ASSERT(context);
aItem->Paint(aDisplayListBuilder, context);
if (aItem->GetType() == nsDisplayItem::TYPE_MASK) {
context->SetMatrix(gfxMatrix::Translation(-aOffset.x, -aOffset.y));
static_cast<nsDisplayMask*>(aItem)->PaintMask(aDisplayListBuilder, context);
} else {
aItem->Paint(aDisplayListBuilder, context);
}
if (gfxPrefs::WebRenderHighlightPaintedLayers()) {
aDT->SetTransform(Matrix());
@ -492,6 +498,28 @@ WebRenderLayerManager::GenerateFallbackData(nsDisplayItem* aItem,
return fallbackData.forget();
}
Maybe<wr::WrImageMask>
WebRenderLayerManager::BuildWrMaskImage(nsDisplayItem* aItem,
wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc,
nsDisplayListBuilder* aDisplayListBuilder,
const LayerRect& aBounds)
{
LayerRect imageRect;
LayerPoint offset;
RefPtr<WebRenderFallbackData> fallbackData = GenerateFallbackData(aItem, aBuilder, aDisplayListBuilder,
imageRect, offset);
if (!fallbackData) {
return Nothing();
}
wr::WrImageMask imageMask;
imageMask.image = fallbackData->GetKey().value();
imageMask.rect = aSc.ToRelativeLayoutRect(aBounds);
imageMask.repeat = false;
return Some(imageMask);
}
bool
WebRenderLayerManager::PushItemAsImage(nsDisplayItem* aItem,
wr::DisplayListBuilder& aBuilder,

View File

@ -75,6 +75,11 @@ public:
nsDisplayListBuilder* aDisplayListBuilder,
LayerRect& aImageRect,
LayerPoint& aOffset);
Maybe<wr::WrImageMask> BuildWrMaskImage(nsDisplayItem* aItem,
wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc,
nsDisplayListBuilder* aDisplayListBuilder,
const LayerRect& aBounds);
bool PushItemAsImage(nsDisplayItem* aItem,
wr::DisplayListBuilder& aBuilder,
const StackingContextHelper& aSc,