Bug 1216843 - Part 12: Factor out AddWeightedFilterList. r=dholbert

MozReview-Commit-ID: 6PwAFJ2pia0
This commit is contained in:
Hiroyuki Ikezoe 2016-09-13 11:48:45 +09:00
parent ec0fb59bd2
commit 1ca91ac957

View File

@ -2427,6 +2427,41 @@ AddWeightedShadowList(double aCoeff1,
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,
@ -2749,35 +2784,11 @@ StyleAnimationValue::AddWeighted(nsCSSPropertyID aProperty,
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(),