InterpolationValue SVGNumberInterpolationType::maybeConvertSVGValue(
    const SVGPropertyBase& svgValue) const {
  if (svgValue.type() != AnimatedNumber)
    return nullptr;
  return InterpolationValue(
      InterpolableNumber::create(toSVGNumber(svgValue).value()));
}
PassOwnPtr<InterpolationValue> SVGPathInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedPath)
        return nullptr;

    SVGPathByteStreamSource pathSource(toSVGPath(svgValue).byteStream());
    size_t length = 0;
    PathCoordinates currentCoordinates;
    Vector<OwnPtr<InterpolableValue>> interpolablePathSegs;
    Vector<SVGPathSegType> pathSegTypes;

    while (pathSource.hasMoreData()) {
        const PathSegmentData segment = pathSource.parseSegment();
        interpolablePathSegs.append(SVGPathSegInterpolationFunctions::consumePathSeg(segment, currentCoordinates));
        pathSegTypes.append(segment.command);
        length++;
    }

    OwnPtr<InterpolableList> pathArgs = InterpolableList::create(length);
    for (size_t i = 0; i < interpolablePathSegs.size(); i++)
        pathArgs->set(i, interpolablePathSegs[i].release());

    OwnPtr<InterpolableList> result = InterpolableList::create(PathComponentIndexCount);
    result->set(PathArgsIndex, pathArgs.release());
    result->set(PathNeutralIndex, InterpolableNumber::create(0));

    return InterpolationValue::create(*this, result.release(), SVGPathNonInterpolableValue::create(pathSegTypes));
}
Exemplo n.º 3
0
InterpolationValue SVGPathInterpolationType::maybeConvertSVGValue(
    const SVGPropertyBase& svgValue) const {
  if (svgValue.type() != AnimatedPath)
    return nullptr;

  return PathInterpolationFunctions::convertValue(
      toSVGPath(svgValue).byteStream());
}
Exemplo n.º 4
0
PassOwnPtr<InterpolationValue> SVGNumberListInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedNumberList)
        return nullptr;

    const SVGNumberList& numberList = toSVGNumberList(svgValue);
    OwnPtr<InterpolableList> result = InterpolableList::create(numberList.length());
    for (size_t i = 0; i < numberList.length(); i++)
        result->set(i, InterpolableNumber::create(numberList.at(i)->value()));
    return InterpolationValue::create(*this, result.release());
}
Exemplo n.º 5
0
PassOwnPtr<InterpolationValue> SVGIntegerOptionalIntegerInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedIntegerOptionalInteger)
        return nullptr;

    const SVGIntegerOptionalInteger& integerOptionalInteger = toSVGIntegerOptionalInteger(svgValue);
    OwnPtr<InterpolableList> result = InterpolableList::create(2);
    result->set(0, InterpolableNumber::create(integerOptionalInteger.firstInteger()->value()));
    result->set(1, InterpolableNumber::create(integerOptionalInteger.secondInteger()->value()));
    return InterpolationValue::create(*this, result.release());
}
Exemplo n.º 6
0
InterpolationValue SVGNumberListInterpolationType::maybeConvertSVGValue(
    const SVGPropertyBase& svgValue) const {
    if (svgValue.type() != AnimatedNumberList)
        return nullptr;

    const SVGNumberList& numberList = toSVGNumberList(svgValue);
    std::unique_ptr<InterpolableList> result =
        InterpolableList::create(numberList.length());
    for (size_t i = 0; i < numberList.length(); i++)
        result->set(i, InterpolableNumber::create(numberList.at(i)->value()));
    return InterpolationValue(std::move(result));
}
Exemplo n.º 7
0
PassOwnPtr<InterpolationValue> SVGRectInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedRect)
        return nullptr;

    const SVGRect& rect = toSVGRect(svgValue);
    OwnPtr<InterpolableList> result = InterpolableList::create(RectComponentIndexCount);
    result->set(RectX, InterpolableNumber::create(rect.x()));
    result->set(RectY, InterpolableNumber::create(rect.y()));
    result->set(RectWidth, InterpolableNumber::create(rect.width()));
    result->set(RectHeight, InterpolableNumber::create(rect.height()));
    return InterpolationValue::create(*this, result.release());
}
InterpolationValue SVGPointListInterpolationType::maybeConvertSVGValue(
    const SVGPropertyBase& svgValue) const {
  if (svgValue.type() != AnimatedPoints)
    return nullptr;

  const SVGPointList& pointList = toSVGPointList(svgValue);
  std::unique_ptr<InterpolableList> result =
      InterpolableList::create(pointList.length() * 2);
  for (size_t i = 0; i < pointList.length(); i++) {
    const SVGPoint& point = *pointList.at(i);
    result->set(2 * i, InterpolableNumber::create(point.x()));
    result->set(2 * i + 1, InterpolableNumber::create(point.y()));
  }

  return InterpolationValue(std::move(result));
}
InterpolationValue SVGTransformListInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedTransformList)
        return nullptr;

    const SVGTransformList& svgList = toSVGTransformList(svgValue);
    OwnPtr<InterpolableList> result = InterpolableList::create(svgList.length());

    Vector<SVGTransformType> transformTypes;
    for (size_t i = 0; i < svgList.length(); i++) {
        const SVGTransform* transform = svgList.at(i);
        SVGTransformType transformType(transform->transformType());
        if (transformType == SVG_TRANSFORM_MATRIX) {
            // TODO(ericwilligers): Support matrix interpolation.
            return nullptr;
        }
        result->set(i, toInterpolableValue(transform->clone().get(), transformType));
        transformTypes.append(transformType);
    }
    return InterpolationValue(result.release(), SVGTransformNonInterpolableValue::create(transformTypes));
}
PassOwnPtr<InterpolationValue> SVGIntegerInterpolationType::maybeConvertSVGValue(const SVGPropertyBase& svgValue) const
{
    if (svgValue.type() != AnimatedInteger)
        return nullptr;
    return InterpolationValue::create(*this, InterpolableNumber::create(toSVGInteger(svgValue).value()));
}