--- a/dom/animation/ScrollTimeline.h
+++ b/dom/animation/ScrollTimeline.h
@@ -20,26 +20,34 @@
struct JSContext;
namespace mozilla {
namespace dom {
class ScrollObserver;
class ScrollObserverImpl : public ScrollObserver {
public:
- ScrollObserverImpl(Element* elem, LinkedList<dom::Animation>* animationOrder) {
+ ScrollObserverImpl(Element* elem, LinkedList<dom::Animation>* animationOrder,
+ Orientation aOrientation) {
mElement = elem;
mAnimationOrder = animationOrder;
+ mOrientation = aOrientation;
}
void notify() override {
if (mElement) {
- mCurrent = mElement->ScrollLeft();
- mMin = mElement->ScrollLeftMin();
- mMax = mElement->ScrollLeftMax();
+ if (mOrientation == Orientation::Horizontal) {
+ mCurrent = mElement->ScrollLeft();
+ mMin = mElement->ScrollLeftMin();
+ mMax = mElement->ScrollLeftMax();
+ } else {
+ mCurrent = mElement->ScrollTop();
+ mMin = mElement->ScrollTopMin();
+ mMax = mElement->ScrollTopMax();
+ }
}
// We will change the currentTime according to scroll volumes.
for (Animation* animation = mAnimationOrder->getFirst(); animation;
animation = animation->getNext()) {
StickyTimeDuration endTime = animation->EffectEnd();
TimeDuration time =
TimeDuration(endTime.MultDouble(mCurrent /(mMax - mMin)));
@@ -47,33 +55,35 @@ public:
ErrorResult rv;
animation->SetCurrentTimeAsDouble(Nullable<double>(time.ToMilliseconds()), rv);
}
}
private:
double mCurrent, mMin, mMax;
Element* mElement;
LinkedList<dom::Animation>* mAnimationOrder;
+ Orientation mOrientation;
};
class ScrollTimeline final
: public AnimationTimeline
, public nsARefreshObserver
{
public:
ScrollTimeline(nsIDocument* aDocument,
Element* aTarget,
- Orientation orientation,
+ Orientation aOrientation,
const Optional<double>& maxTime)
: AnimationTimeline(aDocument->GetParentObject())
, mDocument(aDocument)
, mIsObservingRefreshDriver(false)
+ , mOrientation(aOrientation)
, mElement(aTarget)
{
- mScrollObserver = new ScrollObserverImpl(aTarget, &mAnimationOrder);
+ mScrollObserver = new ScrollObserverImpl(aTarget, &mAnimationOrder, mOrientation);
aTarget->RegistScrollTimelineObserver(mScrollObserver);
}
protected:
virtual ~ScrollTimeline()
{
MOZ_ASSERT(!mIsObservingRefreshDriver, "Timeline should have disassociated"
" from the refresh driver before being destroyed");