Bug 1216843 - Part 12: Factor out AddWeightedFilterList. r?dholbert draft
authorHiroyuki Ikezoe <hiikezoe@mozilla-japan.org>
Mon, 12 Sep 2016 14:34:29 +0900
changeset 412525 c1dc7d3b9c819420b0a1752dca4cbfe686fa79e5
parent 412524 22a7cb11611d4717f9326b3c74babaffbc058b3c
child 412526 0b43696f29baa94e704528e891f8b364e1e13b01
push id29192
push userbmo:hiikezoe@mozilla-japan.org
push dateMon, 12 Sep 2016 05:39:50 +0000
reviewersdholbert
bugs1216843
milestone51.0a1
Bug 1216843 - Part 12: Factor out AddWeightedFilterList. r?dholbert MozReview-Commit-ID: 6PwAFJ2pia0
layout/style/StyleAnimationValue.cpp
--- a/layout/style/StyleAnimationValue.cpp
+++ b/layout/style/StyleAnimationValue.cpp
@@ -2421,16 +2421,51 @@ AddWeightedShadowList(double aCoeff1,
 
       longShadow = longShadow->mNext;
       AppendToCSSValueList(result, Move(shadowValue), &tail);
     }
   }
   return result;
 }
 
+static UniquePtr<nsCSSValueList>
+AddWeightedFilterList(double aCoeff1, const nsCSSValueList* aList1,
+                      double aCoeff2, const nsCSSValueList* aList2)
+{
+  UniquePtr<nsCSSValueList> result;
+  nsCSSValueList* tail = nullptr;
+  while (aList1 || aList2) {
+    if ((aList1 && aList1->mValue.GetUnit() != eCSSUnit_Function) ||
+        (aList2 && aList2->mValue.GetUnit() != eCSSUnit_Function)) {
+      // If we don't have filter-functions, we must have filter-URLs, which
+      // we can't add or interpolate.
+      return nullptr;
+    }
+
+    UniquePtr<nsCSSValueList> resultFunction =
+      AddWeightedFilterFunction(aCoeff1, aList1, aCoeff2, aList2);
+    if (!resultFunction) {
+      // filter function mismatch
+      return nullptr;
+    }
+
+    AppendToCSSValueList(result, Move(resultFunction), &tail);
+
+    // move to next aList items
+    if (aList1) {
+      aList1 = aList1->mNext;
+    }
+    if (aList2) {
+      aList2 = aList2->mNext;
+    }
+  }
+
+  return result;
+}
+
 bool
 StyleAnimationValue::AddWeighted(nsCSSPropertyID aProperty,
                                  double aCoeff1,
                                  const StyleAnimationValue& aValue1,
                                  double aCoeff2,
                                  const StyleAnimationValue& aValue2,
                                  StyleAnimationValue& aResultValue)
 {
@@ -2743,45 +2778,21 @@ StyleAnimationValue::AddWeighted(nsCSSPr
                          aCoeff2, aValue2.GetCSSValueArrayValue());
       if (!result) {
         return false;
       }
       aResultValue.SetCSSValueArrayValue(result, eUnit_Shape);
       return true;
     }
     case eUnit_Filter: {
-      const nsCSSValueList *list1 = aValue1.GetCSSValueListValue();
-      const nsCSSValueList *list2 = aValue2.GetCSSValueListValue();
-
-      UniquePtr<nsCSSValueList> result;
-      nsCSSValueList* tail = nullptr;
-      while (list1 || list2) {
-        if ((list1 && list1->mValue.GetUnit() != eCSSUnit_Function) ||
-            (list2 && list2->mValue.GetUnit() != eCSSUnit_Function)) {
-          // If we don't have filter-functions, we must have filter-URLs, which
-          // we can't add or interpolate.
-          return false;
-        }
-
-        UniquePtr<nsCSSValueList> resultFunction =
-          AddWeightedFilterFunction(aCoeff1, list1, aCoeff2, list2);
-        if (!resultFunction) {
-          // filter function mismatch
-          return false;
-        }
-
-        AppendToCSSValueList(result, Move(resultFunction), &tail);
-
-        // move to next list items
-        if (list1) {
-          list1 = list1->mNext;
-        }
-        if (list2) {
-          list2 = list2->mNext;
-        }
+      UniquePtr<nsCSSValueList> result =
+        AddWeightedFilterList(aCoeff1, aValue1.GetCSSValueListValue(),
+                              aCoeff2, aValue2.GetCSSValueListValue());
+      if (!result) {
+        return false;
       }
 
       aResultValue.SetAndAdoptCSSValueListValue(result.release(),
                                                 eUnit_Filter);
       return true;
     }
 
     case eUnit_Transform: {