InterpolationValue SVGInterpolationType::maybeConvertSingle(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const InterpolationValue& underlying, ConversionCheckers& conversionCheckers) const { if (keyframe.isNeutral()) return maybeConvertNeutral(underlying, conversionCheckers); SVGPropertyBase* svgValue = environment.svgBaseValue().cloneForAnimation(toSVGPropertySpecificKeyframe(keyframe).value()); return maybeConvertSVGValue(*svgValue); }
InterpolationValue SVGTransformListInterpolationType::maybeConvertSingle( const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const InterpolationValue& underlying, ConversionCheckers& conversionCheckers) const { Vector<SVGTransformType> types; Vector<std::unique_ptr<InterpolableValue>> interpolableParts; if (keyframe.composite() == EffectModel::CompositeAdd) { if (underlying) { types.appendVector(getTransformTypes(underlying)); interpolableParts.append(underlying.interpolableValue->clone()); } conversionCheckers.append(SVGTransformListChecker::create(underlying)); } else { DCHECK(!keyframe.isNeutral()); } if (!keyframe.isNeutral()) { SVGPropertyBase* svgValue = environment.svgBaseValue().cloneForAnimation( toSVGPropertySpecificKeyframe(keyframe).value()); InterpolationValue value = maybeConvertSVGValue(*svgValue); if (!value) return nullptr; types.appendVector(getTransformTypes(value)); interpolableParts.append(std::move(value.interpolableValue)); } std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(types.size()); size_t interpolableListIndex = 0; for (auto& part : interpolableParts) { InterpolableList& list = toInterpolableList(*part); for (size_t i = 0; i < list.length(); ++i) { interpolableList->set(interpolableListIndex, std::move(list.getMutable(i))); ++interpolableListIndex; } } return InterpolationValue(std::move(interpolableList), SVGTransformNonInterpolableValue::create(types)); }
PassOwnPtr<InterpolationValue> SVGTransformListInterpolationType::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const { return maybeConvertSVGValue(environment.svgBaseValue()); }
InterpolationValue SVGInterpolationType::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const { return maybeConvertSVGValue(environment.svgBaseValue()); }