OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/animation/CSSBorderImageLengthBoxInterpolationType.h" | 5 #include "core/animation/CSSBorderImageLengthBoxInterpolationType.h" |
6 | 6 |
7 #include "core/animation/BorderImageLengthBoxPropertyFunctions.h" | 7 #include "core/animation/BorderImageLengthBoxPropertyFunctions.h" |
8 #include "core/animation/CSSLengthInterpolationType.h" | 8 #include "core/animation/LengthInterpolationFunctions.h" |
9 #include "core/css/CSSQuadValue.h" | 9 #include "core/css/CSSQuadValue.h" |
10 #include "core/css/resolver/StyleResolverState.h" | 10 #include "core/css/resolver/StyleResolverState.h" |
11 #include "wtf/PtrUtil.h" | 11 #include "wtf/PtrUtil.h" |
12 #include <memory> | 12 #include <memory> |
13 | 13 |
14 namespace blink { | 14 namespace blink { |
15 | 15 |
16 namespace { | 16 namespace { |
17 | 17 |
18 enum SideIndex : unsigned { | 18 enum SideIndex : unsigned { |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 sides[SideTop] = &box.top(); | 139 sides[SideTop] = &box.top(); |
140 sides[SideRight] = &box.right(); | 140 sides[SideRight] = &box.right(); |
141 sides[SideBottom] = &box.bottom(); | 141 sides[SideBottom] = &box.bottom(); |
142 sides[SideLeft] = &box.left(); | 142 sides[SideLeft] = &box.left(); |
143 | 143 |
144 for (size_t i = 0; i < SideIndexCount; i++) { | 144 for (size_t i = 0; i < SideIndexCount; i++) { |
145 const BorderImageLength& side = *sides[i]; | 145 const BorderImageLength& side = *sides[i]; |
146 if (side.isNumber()) { | 146 if (side.isNumber()) { |
147 list->set(i, InterpolableNumber::create(side.number())); | 147 list->set(i, InterpolableNumber::create(side.number())); |
148 } else { | 148 } else { |
149 InterpolationValue convertedSide = CSSLengthInterpolationType::maybe
ConvertLength(side.length(), zoom); | 149 InterpolationValue convertedSide = LengthInterpolationFunctions::may
beConvertLength(side.length(), zoom); |
150 if (!convertedSide) | 150 if (!convertedSide) |
151 return nullptr; | 151 return nullptr; |
152 list->set(i, std::move(convertedSide.interpolableValue)); | 152 list->set(i, std::move(convertedSide.interpolableValue)); |
153 nonInterpolableValues[i] = convertedSide.nonInterpolableValue.releas
e(); | 153 nonInterpolableValues[i] = convertedSide.nonInterpolableValue.releas
e(); |
154 } | 154 } |
155 } | 155 } |
156 | 156 |
157 return InterpolationValue(std::move(list), CSSBorderImageLengthBoxNonInterpo
lableValue::create(SideNumbers(box), std::move(nonInterpolableValues))); | 157 return InterpolationValue(std::move(list), CSSBorderImageLengthBoxNonInterpo
lableValue::create(SideNumbers(box), std::move(nonInterpolableValues))); |
158 } | 158 } |
159 | 159 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 sides[SideTop] = quad.top(); | 199 sides[SideTop] = quad.top(); |
200 sides[SideRight] = quad.right(); | 200 sides[SideRight] = quad.right(); |
201 sides[SideBottom] = quad.bottom(); | 201 sides[SideBottom] = quad.bottom(); |
202 sides[SideLeft] = quad.left(); | 202 sides[SideLeft] = quad.left(); |
203 | 203 |
204 for (size_t i = 0; i < SideIndexCount; i++) { | 204 for (size_t i = 0; i < SideIndexCount; i++) { |
205 const CSSPrimitiveValue& side = *sides[i]; | 205 const CSSPrimitiveValue& side = *sides[i]; |
206 if (side.isNumber()) { | 206 if (side.isNumber()) { |
207 list->set(i, InterpolableNumber::create(side.getDoubleValue())); | 207 list->set(i, InterpolableNumber::create(side.getDoubleValue())); |
208 } else { | 208 } else { |
209 InterpolationValue convertedSide = CSSLengthInterpolationType::maybe
ConvertCSSValue(side); | 209 InterpolationValue convertedSide = LengthInterpolationFunctions::may
beConvertCSSValue(side); |
210 if (!convertedSide) | 210 if (!convertedSide) |
211 return nullptr; | 211 return nullptr; |
212 list->set(i, std::move(convertedSide.interpolableValue)); | 212 list->set(i, std::move(convertedSide.interpolableValue)); |
213 nonInterpolableValues[i] = convertedSide.nonInterpolableValue.releas
e(); | 213 nonInterpolableValues[i] = convertedSide.nonInterpolableValue.releas
e(); |
214 } | 214 } |
215 } | 215 } |
216 | 216 |
217 return InterpolationValue(std::move(list), CSSBorderImageLengthBoxNonInterpo
lableValue::create(SideNumbers(quad), std::move(nonInterpolableValues))); | 217 return InterpolationValue(std::move(list), CSSBorderImageLengthBoxNonInterpo
lableValue::create(SideNumbers(quad), std::move(nonInterpolableValues))); |
218 } | 218 } |
219 | 219 |
(...skipping 28 matching lines...) Expand all Loading... |
248 InterpolationValue& underlyingValue = underlyingValueOwner.mutableValue(); | 248 InterpolationValue& underlyingValue = underlyingValueOwner.mutableValue(); |
249 InterpolableList& underlyingList = toInterpolableList(*underlyingValue.inter
polableValue); | 249 InterpolableList& underlyingList = toInterpolableList(*underlyingValue.inter
polableValue); |
250 Vector<RefPtr<NonInterpolableValue>>& underlyingSideNonInterpolableValues =
toCSSBorderImageLengthBoxNonInterpolableValue(*underlyingValue.nonInterpolableVa
lue).sideNonInterpolableValues(); | 250 Vector<RefPtr<NonInterpolableValue>>& underlyingSideNonInterpolableValues =
toCSSBorderImageLengthBoxNonInterpolableValue(*underlyingValue.nonInterpolableVa
lue).sideNonInterpolableValues(); |
251 const InterpolableList& list = toInterpolableList(*value.interpolableValue); | 251 const InterpolableList& list = toInterpolableList(*value.interpolableValue); |
252 const Vector<RefPtr<NonInterpolableValue>>& sideNonInterpolableValues = nonI
nterpolableValue.sideNonInterpolableValues(); | 252 const Vector<RefPtr<NonInterpolableValue>>& sideNonInterpolableValues = nonI
nterpolableValue.sideNonInterpolableValues(); |
253 | 253 |
254 for (size_t i = 0; i < SideIndexCount; i++) { | 254 for (size_t i = 0; i < SideIndexCount; i++) { |
255 if (sideNumbers.isNumber[i]) | 255 if (sideNumbers.isNumber[i]) |
256 underlyingList.getMutable(i)->scaleAndAdd(underlyingFraction, *list.
get(i)); | 256 underlyingList.getMutable(i)->scaleAndAdd(underlyingFraction, *list.
get(i)); |
257 else | 257 else |
258 CSSLengthInterpolationType::composite(underlyingList.getMutable(i),
underlyingSideNonInterpolableValues[i], underlyingFraction, *list.get(i), sideNo
nInterpolableValues[i].get()); | 258 LengthInterpolationFunctions::composite(underlyingList.getMutable(i)
, underlyingSideNonInterpolableValues[i], underlyingFraction, *list.get(i), side
NonInterpolableValues[i].get()); |
259 } | 259 } |
260 } | 260 } |
261 | 261 |
262 void CSSBorderImageLengthBoxInterpolationType::apply(const InterpolableValue& in
terpolableValue, const NonInterpolableValue* nonInterpolableValue, Interpolation
Environment& environment) const | 262 void CSSBorderImageLengthBoxInterpolationType::apply(const InterpolableValue& in
terpolableValue, const NonInterpolableValue* nonInterpolableValue, Interpolation
Environment& environment) const |
263 { | 263 { |
264 const SideNumbers& sideNumbers = toCSSBorderImageLengthBoxNonInterpolableVal
ue(nonInterpolableValue)->sideNumbers(); | 264 const SideNumbers& sideNumbers = toCSSBorderImageLengthBoxNonInterpolableVal
ue(nonInterpolableValue)->sideNumbers(); |
265 const Vector<RefPtr<NonInterpolableValue>>& nonInterpolableValues = toCSSBor
derImageLengthBoxNonInterpolableValue(nonInterpolableValue)->sideNonInterpolable
Values(); | 265 const Vector<RefPtr<NonInterpolableValue>>& nonInterpolableValues = toCSSBor
derImageLengthBoxNonInterpolableValue(nonInterpolableValue)->sideNonInterpolable
Values(); |
266 const InterpolableList& list = toInterpolableList(interpolableValue); | 266 const InterpolableList& list = toInterpolableList(interpolableValue); |
267 const auto& convertSide = [&sideNumbers, &list, &environment, &nonInterpolab
leValues](size_t index) -> BorderImageLength { | 267 const auto& convertSide = [&sideNumbers, &list, &environment, &nonInterpolab
leValues](size_t index) -> BorderImageLength { |
268 if (sideNumbers.isNumber[index]) | 268 if (sideNumbers.isNumber[index]) |
269 return clampTo<double>(toInterpolableNumber(list.get(index))->value(
), 0); | 269 return clampTo<double>(toInterpolableNumber(list.get(index))->value(
), 0); |
270 return CSSLengthInterpolationType::createLength(*list.get(index), nonInt
erpolableValues[index].get(), environment.state().cssToLengthConversionData(), V
alueRangeNonNegative); | 270 return LengthInterpolationFunctions::createLength(*list.get(index), nonI
nterpolableValues[index].get(), environment.state().cssToLengthConversionData(),
ValueRangeNonNegative); |
271 }; | 271 }; |
272 BorderImageLengthBox box( | 272 BorderImageLengthBox box( |
273 convertSide(SideTop), | 273 convertSide(SideTop), |
274 convertSide(SideRight), | 274 convertSide(SideRight), |
275 convertSide(SideBottom), | 275 convertSide(SideBottom), |
276 convertSide(SideLeft)); | 276 convertSide(SideLeft)); |
277 BorderImageLengthBoxPropertyFunctions::setBorderImageLengthBox(cssProperty()
, *environment.state().style(), box); | 277 BorderImageLengthBoxPropertyFunctions::setBorderImageLengthBox(cssProperty()
, *environment.state().style(), box); |
278 } | 278 } |
279 | 279 |
280 } // namespace blink | 280 } // namespace blink |
OLD | NEW |