зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1267438 - Support adding ancestor mask layers from places other than SetupScrollingMetadata. r=mstange
MozReview-Commit-ID: DwdbSRdEMEc --HG-- extra : rebase_source : 703ff74d56cecf0546457ff8940265f97a3331cc extra : source : 1c8e4840f8b40b7e02b9274e446e278e8c907053 extra : histedit_source : 6efd4834b4ec52a6d57a05bdd9529cf39a7669a4
This commit is contained in:
Родитель
241127e62f
Коммит
de687339fd
|
@ -1088,7 +1088,7 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CONSTRUCTION PHASE ONLY
|
* CONSTRUCTION PHASE ONLY
|
||||||
* Add a FrameMetrics-associated mask layer.
|
* Add mask layers associated with LayerClips.
|
||||||
*/
|
*/
|
||||||
void SetAncestorMaskLayers(const nsTArray<RefPtr<Layer>>& aLayers) {
|
void SetAncestorMaskLayers(const nsTArray<RefPtr<Layer>>& aLayers) {
|
||||||
if (aLayers != mAncestorMaskLayers) {
|
if (aLayers != mAncestorMaskLayers) {
|
||||||
|
@ -1098,6 +1098,15 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CONSTRUCTION PHASE ONLY
|
||||||
|
* Add a mask layer associated with a LayerClip.
|
||||||
|
*/
|
||||||
|
void AddAncestorMaskLayer(const RefPtr<Layer>& aLayer) {
|
||||||
|
mAncestorMaskLayers.AppendElement(aLayer);
|
||||||
|
Mutated();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CONSTRUCTION PHASE ONLY
|
* CONSTRUCTION PHASE ONLY
|
||||||
* Tell this layer what its transform should be. The transformation
|
* Tell this layer what its transform should be. The transformation
|
||||||
|
@ -1352,6 +1361,9 @@ public:
|
||||||
Layer* GetAncestorMaskLayerAt(size_t aIndex) const {
|
Layer* GetAncestorMaskLayerAt(size_t aIndex) const {
|
||||||
return mAncestorMaskLayers.ElementAt(aIndex);
|
return mAncestorMaskLayers.ElementAt(aIndex);
|
||||||
}
|
}
|
||||||
|
const nsTArray<RefPtr<Layer>>& GetAllAncestorMaskLayers() const {
|
||||||
|
return mAncestorMaskLayers;
|
||||||
|
}
|
||||||
|
|
||||||
bool HasMaskLayers() const {
|
bool HasMaskLayers() const {
|
||||||
return GetMaskLayer() || mAncestorMaskLayers.Length() > 0;
|
return GetMaskLayer() || mAncestorMaskLayers.Length() > 0;
|
||||||
|
|
|
@ -2268,6 +2268,7 @@ ContainerState::RecyclePaintedLayer(PaintedLayer* aLayer,
|
||||||
// Clear clip rect and mask layer so we don't accidentally stay clipped.
|
// Clear clip rect and mask layer so we don't accidentally stay clipped.
|
||||||
// We will reapply any necessary clipping.
|
// We will reapply any necessary clipping.
|
||||||
aLayer->SetMaskLayer(nullptr);
|
aLayer->SetMaskLayer(nullptr);
|
||||||
|
aLayer->SetAncestorMaskLayers({});
|
||||||
aLayer->ClearExtraDumpInfo();
|
aLayer->ClearExtraDumpInfo();
|
||||||
|
|
||||||
PaintedDisplayItemLayerUserData* data =
|
PaintedDisplayItemLayerUserData* data =
|
||||||
|
@ -4715,8 +4716,11 @@ ContainerState::SetupScrollingMetadata(NewLayerEntry* aEntry)
|
||||||
MOZ_ASSERT(!aEntry->mBaseScrollMetadata->HasMaskLayer());
|
MOZ_ASSERT(!aEntry->mBaseScrollMetadata->HasMaskLayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any extra mask layers we need to attach to FrameMetrics.
|
// Any extra mask layers we need to attach to ScrollMetadatas.
|
||||||
nsTArray<RefPtr<Layer>> maskLayers;
|
// The list may already contain an entry added for the layer's scrolled clip
|
||||||
|
// so add to it rather than overwriting it (we clear the list when recycling
|
||||||
|
// a layer).
|
||||||
|
nsTArray<RefPtr<Layer>> maskLayers(aEntry->mLayer->GetAllAncestorMaskLayers());
|
||||||
|
|
||||||
for (const DisplayItemScrollClip* scrollClip = aEntry->mScrollClip;
|
for (const DisplayItemScrollClip* scrollClip = aEntry->mScrollClip;
|
||||||
scrollClip && scrollClip != mContainerScrollClip;
|
scrollClip && scrollClip != mContainerScrollClip;
|
||||||
|
@ -5186,6 +5190,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
|
||||||
"Wrong layer type");
|
"Wrong layer type");
|
||||||
containerLayer = static_cast<ContainerLayer*>(oldLayer);
|
containerLayer = static_cast<ContainerLayer*>(oldLayer);
|
||||||
containerLayer->SetMaskLayer(nullptr);
|
containerLayer->SetMaskLayer(nullptr);
|
||||||
|
containerLayer->SetAncestorMaskLayers({});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче