зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
cd40ca46a9
Коммит
65a82350c5
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче