Bug 1216843 - Part 12: Factor out AddWeightedFilterList. r?dholbert
MozReview-Commit-ID: 6PwAFJ2pia0
--- 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: {