예제 #1
0
static std::unique_ptr<InterpolableValue> convertClipComponent(
    const CSSValue& length) {
  if (isCSSAuto(length))
    return InterpolableList::create(0);
  return LengthInterpolationFunctions::maybeConvertCSSValue(length)
      .interpolableValue;
}
InterpolationValue CSSClipInterpolationType::maybeConvertValue(const CSSValue& value, const StyleResolverState& state, ConversionCheckers&) const
{
    if (!value.isQuadValue())
        return nullptr;
    const CSSQuadValue& quad = toCSSQuadValue(value);
    OwnPtr<InterpolableList> list = InterpolableList::create(ClipComponentIndexCount);
    list->set(ClipTop, convertClipComponent(*quad.top()));
    list->set(ClipRight, convertClipComponent(*quad.right()));
    list->set(ClipBottom, convertClipComponent(*quad.bottom()));
    list->set(ClipLeft, convertClipComponent(*quad.left()));
    ClipAutos autos(
        isCSSAuto(*quad.top()),
        isCSSAuto(*quad.right()),
        isCSSAuto(*quad.bottom()),
        isCSSAuto(*quad.left()));
    return InterpolationValue(list.release(), CSSClipNonInterpolableValue::create(autos));
}
static PassOwnPtr<InterpolableValue> convertClipComponent(const CSSPrimitiveValue& length)
{
    if (isCSSAuto(length))
        return InterpolableList::create(0);
    return CSSLengthInterpolationType::maybeConvertCSSValue(length).interpolableValue.release();
}