Bug 1339690 - Part 5: Merge two DistributeRange functions. draft
authorBoris Chiou <boris.chiou@gmail.com>
Thu, 15 Jun 2017 10:54:36 +0800
changeset 594708 6f829eb38b0b18958f8c10aa2d98c58c53d3861e
parent 594707 ecd6fe9074f421d6e856131004ef09afa3c4f664
child 594709 5dfddca5201194de9ffc34836e2296792c3629dc
push id64112
push userbmo:boris.chiou@gmail.com
push dateThu, 15 Jun 2017 10:38:49 +0000
bugs1339690
milestone56.0a1
Bug 1339690 - Part 5: Merge two DistributeRange functions. MozReview-Commit-ID: 3QT09Qmy3Lg
dom/animation/KeyframeUtils.cpp
--- a/dom/animation/KeyframeUtils.cpp
+++ b/dom/animation/KeyframeUtils.cpp
@@ -404,17 +404,17 @@ GetKeyframeListFromPropertyIndexedKeyfra
                                            nsTArray<Keyframe>& aResult,
                                            ErrorResult& aRv);
 
 static bool
 RequiresAdditiveAnimation(const nsTArray<Keyframe>& aKeyframes,
                           nsIDocument* aDocument);
 
 static void
-DistributeRange(const Range<Keyframe>& aSpacingRange);
+DistributeRange(const Range<Keyframe>& aRange);
 
 // ------------------------------------------------------------------
 //
 // Public API
 //
 // ------------------------------------------------------------------
 
 /* static */ nsTArray<Keyframe>
@@ -1512,53 +1512,29 @@ RequiresAdditiveAnimation(const nsTArray
     }
   }
 
   return !propertiesWithFromValue.Equals(properties) ||
          !propertiesWithToValue.Equals(properties);
 }
 
 /**
- * Evenly distribute the computed offsets in (A, B).
- * We pass the range keyframes in [A, B] and use A, B to calculate distributing
- * computed offsets in (A, B). The second range, aRangeToAdjust, is passed, so
- * we can know which keyframe we want to apply to. aRangeToAdjust should be in
- * the range of aSpacingRange.
+ * Distribute the offsets of all keyframes in between the endpoints of the
+ * given range.
  *
- * @param aSpacingRange The sequence of keyframes between whose endpoints we
- *   should apply distribute offsets.
- * @param aRangeToAdjust The range of keyframes we want to apply to.
+ * @param aRange The sequence of keyframes between whose endpoints we should
+ * distribute offsets.
  */
 static void
-DistributeRange(const Range<Keyframe>& aSpacingRange,
-                const Range<Keyframe>& aRangeToAdjust)
+DistributeRange(const Range<Keyframe>& aRange)
 {
-  MOZ_ASSERT(aRangeToAdjust.begin() >= aSpacingRange.begin() &&
-             aRangeToAdjust.end() <= aSpacingRange.end(),
-             "Out of range");
-  const size_t n = aSpacingRange.length() - 1;
-  const double startOffset = aSpacingRange[0].mComputedOffset;
-  const double diffOffset = aSpacingRange[n].mComputedOffset - startOffset;
-  for (auto iter = aRangeToAdjust.begin();
-       iter != aRangeToAdjust.end();
-       ++iter) {
-    size_t index = iter - aSpacingRange.begin();
+  const Range<Keyframe> rangeToAdjust = Range<Keyframe>(aRange.begin() + 1,
+                                                        aRange.end() - 1);
+  const size_t n = aRange.length() - 1;
+  const double startOffset = aRange[0].mComputedOffset;
+  const double diffOffset = aRange[n].mComputedOffset - startOffset;
+  for (auto iter = rangeToAdjust.begin(); iter != rangeToAdjust.end(); ++iter) {
+    size_t index = iter - aRange.begin();
     iter->mComputedOffset = startOffset + double(index) / n * diffOffset;
   }
 }
 
-/**
- * Overload of DistributeRange to apply distribute spacing to all keyframes in
- * between the endpoints of the given range.
- *
- * @param aSpacingRange The sequence of keyframes between whose endpoints we
- *   should apply distribute spacing.
- */
-static void
-DistributeRange(const Range<Keyframe>& aSpacingRange)
-{
-  // We don't need to apply distribute spacing to keyframe A and keyframe B.
-  DistributeRange(aSpacingRange,
-                  Range<Keyframe>(aSpacingRange.begin() + 1,
-                                  aSpacingRange.end() - 1));
-}
-
 } // namespace mozilla