зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1754897 - Part 5: Factor out the creation of ScrollTimeline object. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D146967
This commit is contained in:
Родитель
2b8751f919
Коммит
b6e80527ff
|
@ -61,6 +61,25 @@ ScrollTimeline::ScrollTimeline(Document* aDocument, const Scroller& aScroller,
|
|||
PlaybackDirection::Alternate, FillMode::Both);
|
||||
}
|
||||
|
||||
/* static */
|
||||
already_AddRefed<ScrollTimeline> ScrollTimeline::GetOrCreateScrollTimeline(
|
||||
Document* aDocument, const Scroller& aScroller,
|
||||
const StyleScrollAxis& aAxis) {
|
||||
MOZ_ASSERT(aScroller);
|
||||
|
||||
RefPtr<ScrollTimeline> timeline;
|
||||
auto* set =
|
||||
ScrollTimelineSet::GetOrCreateScrollTimelineSet(aScroller.mElement);
|
||||
auto p = set->LookupForAdd(aAxis);
|
||||
if (!p) {
|
||||
timeline = new ScrollTimeline(aDocument, aScroller, aAxis);
|
||||
set->Add(p, aAxis, timeline);
|
||||
} else {
|
||||
timeline = p->value();
|
||||
}
|
||||
return timeline.forget();
|
||||
}
|
||||
|
||||
static StyleScrollAxis ToStyleScrollAxis(
|
||||
const StyleScrollDirection aDirection) {
|
||||
switch (aDirection) {
|
||||
|
@ -83,6 +102,7 @@ static StyleScrollAxis ToStyleScrollAxis(
|
|||
return StyleScrollAxis::Block;
|
||||
}
|
||||
|
||||
/* static */
|
||||
already_AddRefed<ScrollTimeline> ScrollTimeline::FromRule(
|
||||
const RawServoScrollTimelineRule& aRule, Document* aDocument,
|
||||
const NonOwningAnimationTarget& aTarget) {
|
||||
|
@ -96,18 +116,8 @@ already_AddRefed<ScrollTimeline> ScrollTimeline::FromRule(
|
|||
StyleScrollAxis axis =
|
||||
ToStyleScrollAxis(Servo_ScrollTimelineRule_GetOrientation(&aRule));
|
||||
|
||||
RefPtr<ScrollTimeline> timeline;
|
||||
auto autoScroller = Scroller::Root(aTarget.mElement->OwnerDoc());
|
||||
auto* set =
|
||||
ScrollTimelineSet::GetOrCreateScrollTimelineSet(autoScroller.mElement);
|
||||
auto p = set->LookupForAdd(axis);
|
||||
if (!p) {
|
||||
timeline = new ScrollTimeline(aDocument, autoScroller, axis);
|
||||
set->Add(p, axis, timeline);
|
||||
} else {
|
||||
timeline = p->value();
|
||||
}
|
||||
return timeline.forget();
|
||||
return GetOrCreateScrollTimeline(aDocument, autoScroller, axis);
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
@ -135,18 +145,7 @@ already_AddRefed<ScrollTimeline> ScrollTimeline::FromAnonymousScroll(
|
|||
scroller = Scroller::Nearest(curr ? curr : root);
|
||||
}
|
||||
}
|
||||
|
||||
RefPtr<ScrollTimeline> timeline;
|
||||
auto* set =
|
||||
ScrollTimelineSet::GetOrCreateScrollTimelineSet(scroller.mElement);
|
||||
auto p = set->LookupForAdd(aAxis);
|
||||
if (!p) {
|
||||
timeline = new ScrollTimeline(aDocument, scroller, aAxis);
|
||||
set->Add(p, aAxis, timeline);
|
||||
} else {
|
||||
timeline = p->value();
|
||||
}
|
||||
return timeline.forget();
|
||||
return GetOrCreateScrollTimeline(aDocument, scroller, aAxis);
|
||||
}
|
||||
|
||||
/* static*/ already_AddRefed<ScrollTimeline> ScrollTimeline::FromNamedScroll(
|
||||
|
@ -202,18 +201,7 @@ already_AddRefed<ScrollTimeline> ScrollTimeline::FromAnonymousScroll(
|
|||
return nullptr;
|
||||
}
|
||||
Scroller scroller = Scroller::Named(result);
|
||||
|
||||
RefPtr<ScrollTimeline> timeline;
|
||||
auto* set =
|
||||
ScrollTimelineSet::GetOrCreateScrollTimelineSet(scroller.mElement);
|
||||
auto p = set->LookupForAdd(axis);
|
||||
if (!p) {
|
||||
timeline = new ScrollTimeline(aDocument, scroller, axis);
|
||||
set->Add(p, axis, timeline);
|
||||
} else {
|
||||
timeline = p->value();
|
||||
}
|
||||
return timeline.forget();
|
||||
return GetOrCreateScrollTimeline(aDocument, scroller, axis);
|
||||
}
|
||||
|
||||
Nullable<TimeDuration> ScrollTimeline::GetCurrentTimeAsDuration() const {
|
||||
|
|
|
@ -186,6 +186,10 @@ class ScrollTimeline final : public AnimationTimeline {
|
|||
ScrollTimeline(Document* aDocument, const Scroller& aScroller,
|
||||
StyleScrollAxis aAxis);
|
||||
|
||||
static already_AddRefed<ScrollTimeline> GetOrCreateScrollTimeline(
|
||||
Document* aDocument, const Scroller& aScroller,
|
||||
const StyleScrollAxis& aAxis);
|
||||
|
||||
// Note: This function is required to be idempotent, as it can be called from
|
||||
// both cycleCollection::Unlink() and ~ScrollTimeline(). When modifying this
|
||||
// function, be sure to preserve this property.
|
||||
|
|
Загрузка…
Ссылка в новой задаче