Exemplo n.º 1
0
TEST(AnimationAnimatableLengthTest, Zoom)
{
    EXPECT_EQ(Length(4, Fixed), create(Length(10, Fixed), 5)->length(2, ValueRangeAll));
    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent), 5)->length(2, ValueRangeAll));
    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
    Length result = Length(CalculationValue::create(PixelsAndPercent(2, 10), ValueRangeAll));
    EXPECT_TRUE(result == create(calc, 5)->length(2, ValueRangeAll));
}
Exemplo n.º 2
0
TEST(AnimationAnimatableLengthTest, Interpolate)
{
    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(10, Fixed)).get(), create(Length(0, Fixed)).get(), 0.2)->equals(create(Length(8, Fixed)).get()));
    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(4, Percent)).get(), create(Length(12, Percent)).get(), 0.25)->equals(create(Length(6, Percent)).get()));
    Length calc = Length(CalculationValue::create(PixelsAndPercent(12, 4), ValueRangeAll));
    EXPECT_TRUE(AnimatableValue::interpolate(create(Length(20, Fixed)).get(), create(Length(10, Percent)).get(), 0.4)->equals(create(calc).get()));
}
Exemplo n.º 3
0
Length AnimatableLength::length(float zoom, ValueRange range) const
{
    if (!m_hasPercent)
        return Length(clampNumber(m_pixels, range) * zoom, Fixed);
    if (!m_hasPixels)
        return Length(clampNumber(m_percent, range), Percent);
    return Length(CalculationValue::create(PixelsAndPercent(m_pixels * zoom, m_percent), range));
}
static Length createLength(double pixels, double percentage, bool hasPercentage, ValueRange range)
{
    ASSERT(hasPercentage || percentage == 0);
    if (pixels && hasPercentage)
        return Length(CalculationValue::create(PixelsAndPercent(pixels, percentage), range));
    if (hasPercentage)
        return Length(clampToRange(percentage, range), Percent);
    return Length(CSSPrimitiveValue::clampToCSSLengthRange(clampToRange(pixels, range)), Fixed);
}
Exemplo n.º 5
0
TEST(AnimationAnimatableLengthTest, ValueRangeNonNegative)
{
    EXPECT_EQ(Length(10, Fixed), create(Length(10, Fixed))->length(1, ValueRangeNonNegative));
    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent))->length(1, ValueRangeNonNegative));
    EXPECT_EQ(Length(0, Fixed), create(Length(-10, Fixed))->length(1, ValueRangeNonNegative));
    EXPECT_EQ(Length(0, Percent), create(Length(-10, Percent))->length(1, ValueRangeNonNegative));
    Length calc = Length(CalculationValue::create(PixelsAndPercent(-5, -10), ValueRangeNonNegative));
    EXPECT_TRUE(calc == create(calc)->length(1, ValueRangeNonNegative));
}
Exemplo n.º 6
0
TEST(AnimationAnimatableLengthTest, Equals)
{
    EXPECT_TRUE(create(Length(10, Fixed))->equals(create(Length(10, Fixed)).get()));
    EXPECT_TRUE(create(Length(20, Percent))->equals(create(Length(20, Percent)).get()));
    EXPECT_FALSE(create(Length(10, Fixed))->equals(create(Length(10, Percent)).get()));
    EXPECT_FALSE(create(Length(0, Percent))->equals(create(Length(0, Fixed)).get()));
    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
    EXPECT_TRUE(create(calc)->equals(create(calc).get()));
    EXPECT_FALSE(create(calc)->equals(create(Length(10, Percent)).get()));
}
Exemplo n.º 7
0
TEST(AnimationAnimatableLengthTest, RoundTripConversion)
{
    EXPECT_EQ(Length(0, Fixed), create(Length(0, Fixed))->length(1, ValueRangeAll));
    EXPECT_EQ(Length(0, Percent), create(Length(0, Percent))->length(1, ValueRangeAll));
    EXPECT_EQ(Length(10, Fixed), create(Length(10, Fixed))->length(1, ValueRangeAll));
    EXPECT_EQ(Length(10, Percent), create(Length(10, Percent))->length(1, ValueRangeAll));
    EXPECT_EQ(Length(-10, Fixed), create(Length(-10, Fixed))->length(1, ValueRangeAll));
    EXPECT_EQ(Length(-10, Percent), create(Length(-10, Percent))->length(1, ValueRangeAll));
    Length calc = Length(CalculationValue::create(PixelsAndPercent(5, 10), ValueRangeAll));
    EXPECT_EQ(calc, create(calc)->length(1, ValueRangeAll));
}
Length LengthInterpolationFunctions::createLength(
    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 (value == 0)
      continue;
    if (i == CSSPrimitiveValue::UnitTypePercentage) {
      percentage = value;
    } else {
      CSSPrimitiveValue::UnitType type =
          CSSPrimitiveValue::lengthUnitTypeToUnitType(
              static_cast<CSSPrimitiveValue::LengthUnitType>(i));
      pixels += conversionData.zoomedComputedPixels(value, type);
    }
  }

  if (percentage != 0)
    hasPercentage = true;
  if (pixels != 0 && hasPercentage)
    return Length(
        CalculationValue::create(PixelsAndPercent(pixels, percentage), range));
  if (hasPercentage)
    return Length(clampToRange(percentage, range), Percent);
  return Length(
      CSSPrimitiveValue::clampToCSSLengthRange(clampToRange(pixels, range)),
      Fixed);
}