FillSize SizeInterpolationFunctions::createFillSize( const InterpolableValue& interpolableValueA, const NonInterpolableValue* nonInterpolableValueA, const InterpolableValue& interpolableValueB, const NonInterpolableValue* nonInterpolableValueB, const CSSToLengthConversionData& conversionData) { const auto& sideA = toCSSSizeNonInterpolableValue(*nonInterpolableValueA); const auto& sideB = toCSSSizeNonInterpolableValue(*nonInterpolableValueB); if (sideA.isKeyword()) { switch (sideA.keyword()) { case CSSValueCover: DCHECK_EQ(sideA.keyword(), sideB.keyword()); return FillSize(Cover, LengthSize()); case CSSValueContain: DCHECK_EQ(sideA.keyword(), sideB.keyword()); return FillSize(Contain, LengthSize()); case CSSValueAuto: break; default: NOTREACHED(); break; } } return FillSize( SizeLength, LengthSize(createLength(interpolableValueA, sideA, conversionData), createLength(interpolableValueB, sideB, conversionData))); }
static Length resolveInterpolablePixelsOrPercentageLength(const InterpolableList& values, bool hasPercentage, ValueRange range, double zoom) { ASSERT(isPixelsOrPercentOnly(values)); double pixels = toInterpolableNumber(values.get(CSSPrimitiveValue::UnitTypePixels))->value() * zoom; double percentage = toInterpolableNumber(values.get(CSSPrimitiveValue::UnitTypePercentage))->value(); return createLength(pixels, percentage, hasPercentage, range); }
Length CSSLengthInterpolationType::resolveInterpolableLength(const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue, const CSSToLengthConversionData& conversionData, ValueRange range) { const InterpolableList& interpolableList = toInterpolableList(interpolableValue); bool hasPercentage = CSSLengthNonInterpolableValue::hasPercentage(nonInterpolableValue); double pixels = 0; double percentage = 0; for (size_t i = 0; i < CSSPrimitiveValue::LengthUnitTypeCount; i++) { double value = toInterpolableNumber(*interpolableList.get(i)).value(); if (i == CSSPrimitiveValue::UnitTypePercentage) { percentage = value; } else { CSSPrimitiveValue::UnitType type = CSSPrimitiveValue::lengthUnitTypeToUnitType(static_cast<CSSPrimitiveValue::LengthUnitType>(i)); pixels += conversionData.zoomedComputedPixels(value, type); } } return createLength(pixels, percentage, hasPercentage, range); }