Support vertical scrolling draft
authorBotond Ballo <botond@mozilla.com>
Mon, 18 Jul 2016 17:50:11 -0400
changeset 394551 cf9177244f5930a4290cdc457ef701e2862f447c
parent 394550 ffcb8e876a6d5e3a64f42425e5249d2285cf3bc4
child 394552 bac442a609767fbb21b266dbd719d6eb968fbf3d
push id24603
push userbballo@mozilla.com
push dateFri, 29 Jul 2016 23:28:33 +0000
milestone50.0a1
Support vertical scrolling MozReview-Commit-ID: 8UWeTxKOtt4
dom/animation/ScrollTimeline.h
--- 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");