mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-03 17:58:55 +02:00
Just like how we handle the CSSAnimation and CSSTransition. We use TimelineCollection to store the named progress timeline objects created by scroll-timeline-name and view-timeline-name, and reuse ElementAnimationData to handle the life time of TimelineCollection. Also, introduce TimelineManager to update timelines generated by CSS. We add one test which mutates the scroll-timeline-axis to make sure we restyle the animations associtated with the existing timelines. It will be passed when we start to use the new framework, in the next patch. Differential Revision: https://phabricator.services.mozilla.com/D169271
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "TimelineCollection.h"
|
|
|
|
#include "mozilla/ElementAnimationData.h"
|
|
#include "mozilla/dom/Element.h"
|
|
#include "mozilla/dom/ScrollTimeline.h"
|
|
#include <type_traits>
|
|
|
|
namespace mozilla {
|
|
|
|
template <class TimelineType>
|
|
TimelineCollection<TimelineType>::~TimelineCollection() {
|
|
MOZ_COUNT_DTOR(TimelineCollection);
|
|
|
|
// FIXME: Bug 1774060. We have to restyle the animations which use the
|
|
// timelines associtated with this TimelineCollection.
|
|
|
|
LinkedListElement<SelfType>::remove();
|
|
}
|
|
|
|
template <class TimelineType>
|
|
void TimelineCollection<TimelineType>::Destroy() {
|
|
auto* data = mElement.GetAnimationData();
|
|
MOZ_ASSERT(data);
|
|
if constexpr (std::is_same_v<TimelineType, dom::ScrollTimeline>) {
|
|
MOZ_ASSERT(data->GetScrollTimelineCollection(mPseudo) == this);
|
|
data->ClearScrollTimelineCollectionFor(mPseudo);
|
|
} else {
|
|
// TODO: Bug 1808410. Add ViewTimeline.
|
|
}
|
|
}
|
|
|
|
template <class TimelineType>
|
|
/* static */ TimelineCollection<TimelineType>*
|
|
TimelineCollection<TimelineType>::Get(const dom::Element* aElement,
|
|
const PseudoStyleType aPseudoType) {
|
|
MOZ_ASSERT(aElement);
|
|
auto* data = aElement->GetAnimationData();
|
|
if (!data) {
|
|
return nullptr;
|
|
}
|
|
|
|
if constexpr (std::is_same_v<TimelineType, dom::ScrollTimeline>) {
|
|
return data->GetScrollTimelineCollection(aPseudoType);
|
|
}
|
|
|
|
// TODO: Bug 1808410. Add ViewTimeline.
|
|
return nullptr;
|
|
}
|
|
|
|
// Explicit class instantiations
|
|
template class TimelineCollection<dom::ScrollTimeline>;
|
|
// TODO: Bug 1808410. Add TimelineCollection<dom::ViewTimeline>;
|
|
|
|
} // namespace mozilla
|