Bug 1372912 - Extract a PushLayerClip helper method. r=jrmuizel

No functional changes. We'll want to reuse this code in a future patch.

MozReview-Commit-ID: LEuP38yXBHI

--HG--
extra : rebase_source : 11faa0123e987c255dd7495e4b704346ab2b714d
This commit is contained in:
Kartikaya Gupta 2017-06-15 17:02:12 -04:00
Родитель cd40ca46a9
Коммит 65a82350c5
2 изменённых файлов: 21 добавлений и 13 удалений

Просмотреть файл

@ -59,19 +59,8 @@ ScrollingLayersHelper::ScrollingLayersHelper(WebRenderLayer* aLayer,
// on that layer. That is, the clip scrolls along with the content in
// child layers. So we need to apply this after pushing all the scroll layers,
// which we do above.
if (Maybe<LayerClip> scrolledClip = layer->GetScrolledClip()) {
LayerRect clipRect = IntRectToRect(ViewAs<LayerPixel>(
scrolledClip->GetClipRect(),
PixelCastJustification::MovingDownToChildren));
Maybe<WrImageMask> mask;
if (Maybe<size_t> maskLayerIndex = scrolledClip->GetMaskLayerIndex()) {
Layer* maskLayer = layer->GetAncestorMaskLayerAt(maskLayerIndex.value());
WebRenderLayer* maskWrLayer = WebRenderLayer::ToWebRenderLayer(maskLayer);
// TODO: check this transform is correct in all cases
mask = maskWrLayer->RenderMaskLayer(aStackingContext, maskLayer->GetTransform());
}
mBuilder->PushClip(aStackingContext.ToRelativeWrRect(clipRect),
mask.ptrOr(nullptr));
if (const Maybe<LayerClip>& scrolledClip = layer->GetScrolledClip()) {
PushLayerClip(scrolledClip.ref(), aStackingContext);
}
// If the layer is marked as fixed-position, it is fixed relative to something
@ -114,6 +103,22 @@ ScrollingLayersHelper::PushLayerLocalClip(const StackingContextHelper& aStacking
}
}
void
ScrollingLayersHelper::PushLayerClip(const LayerClip& aClip,
const StackingContextHelper& aSc)
{
LayerRect clipRect = IntRectToRect(ViewAs<LayerPixel>(aClip.GetClipRect(),
PixelCastJustification::MovingDownToChildren));
Maybe<WrImageMask> mask;
if (Maybe<size_t> maskLayerIndex = aClip.GetMaskLayerIndex()) {
Layer* maskLayer = mLayer->GetLayer()->GetAncestorMaskLayerAt(maskLayerIndex.value());
WebRenderLayer* maskWrLayer = WebRenderLayer::ToWebRenderLayer(maskLayer);
// TODO: check this transform is correct in all cases
mask = maskWrLayer->RenderMaskLayer(aSc, maskLayer->GetTransform());
}
mBuilder->PushClip(aSc.ToRelativeWrRect(clipRect), mask.ptrOr(nullptr));
}
ScrollingLayersHelper::~ScrollingLayersHelper()
{
Layer* layer = mLayer->GetLayer();

Просмотреть файл

@ -16,6 +16,7 @@ class DisplayListBuilder;
namespace layers {
struct LayerClip;
class StackingContextHelper;
class WebRenderLayer;
@ -29,6 +30,8 @@ public:
private:
void PushLayerLocalClip(const StackingContextHelper& aStackingContext);
void PushLayerClip(const LayerClip& aClip,
const StackingContextHelper& aSc);
WebRenderLayer* mLayer;
wr::DisplayListBuilder* mBuilder;