зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1368496 - Propagate the layer's "scrolled clip" to WebRender. r=jrmuizel
If the layer has a "scrolled clip", that clip scrolls with the content of the layers (it moves if any of the scrollable frames defined by that layer are scrolled). MozReview-Commit-ID: 37hvXWO930f --HG-- extra : rebase_source : 4150c3bb061d027b483e44418bec7f3b810a9ccc
This commit is contained in:
Родитель
8e9f1257f8
Коммит
c8d5fd6ffd
|
@ -51,6 +51,25 @@ ScrollingLayersHelper::ScrollingLayersHelper(WebRenderLayer* aLayer,
|
||||||
aStackingContext.ToRelativeWrRect(contentRect),
|
aStackingContext.ToRelativeWrRect(contentRect),
|
||||||
aStackingContext.ToRelativeWrRect(clipBounds));
|
aStackingContext.ToRelativeWrRect(clipBounds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The scrolled clip on the layer is "inside" all of the scrollable metadatas
|
||||||
|
// 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(maskLayer->GetTransform());
|
||||||
|
}
|
||||||
|
mBuilder->PushClip(aStackingContext.ToRelativeWrRect(clipRect),
|
||||||
|
mask.ptrOr(nullptr));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollingLayersHelper::~ScrollingLayersHelper()
|
ScrollingLayersHelper::~ScrollingLayersHelper()
|
||||||
|
@ -60,6 +79,9 @@ ScrollingLayersHelper::~ScrollingLayersHelper()
|
||||||
}
|
}
|
||||||
|
|
||||||
Layer* layer = mLayer->GetLayer();
|
Layer* layer = mLayer->GetLayer();
|
||||||
|
if (layer->GetScrolledClip()) {
|
||||||
|
mBuilder->PopClip();
|
||||||
|
}
|
||||||
for (int32_t i = layer->GetScrollMetadataCount(); i > 0; i--) {
|
for (int32_t i = layer->GetScrollMetadataCount(); i > 0; i--) {
|
||||||
const FrameMetrics& fm = layer->GetFrameMetrics(i - 1);
|
const FrameMetrics& fm = layer->GetFrameMetrics(i - 1);
|
||||||
if (!fm.IsScrollable()) {
|
if (!fm.IsScrollable()) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче