Ejemplo n.º 1
0
PassOwnPtr<InterpolableValue> FilterInterpolationFunctions::createNoneValue(const NonInterpolableValue& untypedNonInterpolableValue)
{
    switch (toFilterNonInterpolableValue(untypedNonInterpolableValue).type()) {
    case FilterOperation::GRAYSCALE:
    case FilterOperation::INVERT:
    case FilterOperation::SEPIA:
    case FilterOperation::HUE_ROTATE:
        return InterpolableNumber::create(0);

    case FilterOperation::BRIGHTNESS:
    case FilterOperation::CONTRAST:
    case FilterOperation::OPACITY:
    case FilterOperation::SATURATE:
        return InterpolableNumber::create(1);

    case FilterOperation::BLUR:
        return CSSLengthInterpolationType::createNeutralInterpolableValue();

    case FilterOperation::DROP_SHADOW:
        return ShadowInterpolationFunctions::createNeutralInterpolableValue();

    default:
        ASSERT_NOT_REACHED();
        return nullptr;
    }
}
FilterOperation* FilterInterpolationFunctions::createFilter(
    const InterpolableValue& interpolableValue,
    const NonInterpolableValue& untypedNonInterpolableValue,
    const StyleResolverState& state) {
  const FilterNonInterpolableValue& nonInterpolableValue =
      toFilterNonInterpolableValue(untypedNonInterpolableValue);
  FilterOperation::OperationType type = nonInterpolableValue.type();

  switch (type) {
    case FilterOperation::GRAYSCALE:
    case FilterOperation::HUE_ROTATE:
    case FilterOperation::SATURATE:
    case FilterOperation::SEPIA: {
      double value =
          clampParameter(toInterpolableNumber(interpolableValue).value(), type);
      return BasicColorMatrixFilterOperation::create(value, type);
    }

    case FilterOperation::BRIGHTNESS:
    case FilterOperation::CONTRAST:
    case FilterOperation::INVERT:
    case FilterOperation::OPACITY: {
      double value =
          clampParameter(toInterpolableNumber(interpolableValue).value(), type);
      return BasicComponentTransferFilterOperation::create(value, type);
    }

    case FilterOperation::BLUR: {
      Length stdDeviation = LengthInterpolationFunctions::createLength(
          interpolableValue, nonInterpolableValue.typeNonInterpolableValue(),
          state.cssToLengthConversionData(), ValueRangeNonNegative);
      return BlurFilterOperation::create(stdDeviation);
    }

    case FilterOperation::DROP_SHADOW: {
      ShadowData shadowData = ShadowInterpolationFunctions::createShadowData(
          interpolableValue, nonInterpolableValue.typeNonInterpolableValue(),
          state);
      Color color = shadowData.color().isCurrentColor()
                        ? Color::black
                        : shadowData.color().getColor();
      return DropShadowFilterOperation::create(
          IntPoint(shadowData.x(), shadowData.y()), shadowData.blur(), color);
    }

    default:
      NOTREACHED();
      return nullptr;
  }
}
Ejemplo n.º 3
0
bool FilterInterpolationFunctions::filtersAreCompatible(const NonInterpolableValue& a, const NonInterpolableValue& b)
{
    return toFilterNonInterpolableValue(a).type() == toFilterNonInterpolableValue(b).type();
}