Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Side by Side Diff: third_party/WebKit/Source/core/animation/StringKeyframe.cpp

Issue 1701813002: Make Keyframe::PropertySpecificKeyframes RefCounted (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: InvalidatableInterpolation RefPtrs Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/StringKeyframe.h" 5 #include "core/animation/StringKeyframe.h"
6 6
7 #include "core/StylePropertyShorthand.h" 7 #include "core/StylePropertyShorthand.h"
8 #include "core/animation/ConstantStyleInterpolation.h" 8 #include "core/animation/ConstantStyleInterpolation.h"
9 #include "core/animation/DeferredLegacyStyleInterpolation.h" 9 #include "core/animation/DeferredLegacyStyleInterpolation.h"
10 #include "core/animation/DoubleStyleInterpolation.h" 10 #include "core/animation/DoubleStyleInterpolation.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 properties.add(PropertyHandle(*key)); 80 properties.add(PropertyHandle(*key));
81 81
82 return properties; 82 return properties;
83 } 83 }
84 84
85 PassRefPtr<Keyframe> StringKeyframe::clone() const 85 PassRefPtr<Keyframe> StringKeyframe::clone() const
86 { 86 {
87 return adoptRef(new StringKeyframe(*this)); 87 return adoptRef(new StringKeyframe(*this));
88 } 88 }
89 89
90 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::createPropertySpe cificKeyframe(PropertyHandle property) const 90 PassRefPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::createPropertySpe cificKeyframe(PropertyHandle property) const
91 { 91 {
92 if (property.isCSSProperty()) 92 if (property.isCSSProperty())
93 return adoptPtr(new CSSPropertySpecificKeyframe(offset(), &easing(), css PropertyValue(property.cssProperty()), composite())); 93 return CSSPropertySpecificKeyframe::create(offset(), &easing(), cssPrope rtyValue(property.cssProperty()), composite());
94 94
95 if (property.isPresentationAttribute()) 95 if (property.isPresentationAttribute())
96 return adoptPtr(new CSSPropertySpecificKeyframe(offset(), &easing(), pre sentationAttributeValue(property.presentationAttribute()), composite())); 96 return CSSPropertySpecificKeyframe::create(offset(), &easing(), presenta tionAttributeValue(property.presentationAttribute()), composite());
97 97
98 ASSERT(property.isSVGAttribute()); 98 ASSERT(property.isSVGAttribute());
99 return adoptPtr(new SVGPropertySpecificKeyframe(offset(), &easing(), svgProp ertyValue(property.svgAttribute()), composite())); 99 return SVGPropertySpecificKeyframe::create(offset(), &easing(), svgPropertyV alue(property.svgAttribute()), composite());
100 }
101
102 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, CSSValue* value, EffectModel::Composi teOperation op)
103 : Keyframe::PropertySpecificKeyframe(offset, easing, op)
104 , m_value(value)
105 { }
106
107 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, CSSValue* value)
108 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR eplace)
109 , m_value(value)
110 {
111 ASSERT(!isNull(m_offset));
112 } 100 }
113 101
114 bool StringKeyframe::CSSPropertySpecificKeyframe::populateAnimatableValue(CSSPro pertyID property, Element& element, const ComputedStyle* baseStyle, bool force) const 102 bool StringKeyframe::CSSPropertySpecificKeyframe::populateAnimatableValue(CSSPro pertyID property, Element& element, const ComputedStyle* baseStyle, bool force) const
115 { 103 {
116 if (m_animatableValueCache && !force) 104 if (m_animatableValueCache && !force)
117 return false; 105 return false;
118 if (!baseStyle && (!m_value || DeferredLegacyStyleInterpolation::interpolati onRequiresStyleResolve(*m_value))) 106 if (!baseStyle && (!m_value || DeferredLegacyStyleInterpolation::interpolati onRequiresStyleResolve(*m_value)))
119 return false; 107 return false;
120 if (!element.document().frame()) 108 if (!element.document().frame())
121 return false; 109 return false;
(...skipping 14 matching lines...) Expand all
136 ASSERT(element); 124 ASSERT(element);
137 populateAnimatableValue(property, *element, baseStyle, false); 125 populateAnimatableValue(property, *element, baseStyle, false);
138 end.populateAnimatableValue(property, *element, baseStyle, false); 126 end.populateAnimatableValue(property, *element, baseStyle, false);
139 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property); 127 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property);
140 } 128 }
141 129
142 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const 130 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const
143 { 131 {
144 const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMappin g::get(propertyHandle); 132 const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMappin g::get(propertyHandle);
145 if (applicableTypes) 133 if (applicableTypes)
146 return InvalidatableInterpolation::create(propertyHandle, *applicableTyp es, *this, end); 134 return InvalidatableInterpolation::create(propertyHandle, *applicableTyp es, const_cast<CSSPropertySpecificKeyframe*>(this), &end);
147 135
148 // TODO(alancutter): Remove the remainder of this function. 136 // TODO(alancutter): Remove the remainder of this function.
149 137
150 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter. 138 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter.
151 CSSPropertyID property = propertyHandle.isCSSProperty() ? propertyHandle.css Property() : propertyHandle.presentationAttribute(); 139 CSSPropertyID property = propertyHandle.isCSSProperty() ? propertyHandle.css Property() : propertyHandle.presentationAttribute();
152 CSSValue* fromCSSValue = m_value.get(); 140 CSSValue* fromCSSValue = m_value.get();
153 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value(); 141 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value();
154 InterpolationRange range = RangeAll; 142 InterpolationRange range = RangeAll;
155 143
156 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect. 144 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect.
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 if (!forceDefaultInterpolation) { 265 if (!forceDefaultInterpolation) {
278 ASSERT(AnimatableValue::usesDefaultInterpolation( 266 ASSERT(AnimatableValue::usesDefaultInterpolation(
279 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr operty, fromCSSValue).get(), 267 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr operty, fromCSSValue).get(),
280 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr operty, toCSSValue).get())); 268 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr operty, toCSSValue).get()));
281 } 269 }
282 270
283 return nullptr; 271 return nullptr;
284 272
285 } 273 }
286 274
287 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif icKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) co nst 275 PassRefPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif icKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) co nst
288 { 276 {
289 return adoptPtr(new CSSPropertySpecificKeyframe(offset, easing, static_cast< CSSValue*>(0), EffectModel::CompositeAdd)); 277 return create(offset, easing, nullptr, EffectModel::CompositeAdd);
290 } 278 }
291 279
292 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif icKeyframe::cloneWithOffset(double offset) const 280 PassRefPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif icKeyframe::cloneWithOffset(double offset) const
293 { 281 {
294 Keyframe::PropertySpecificKeyframe* theClone = new CSSPropertySpecificKeyfra me(offset, m_easing, m_value.get()); 282 RefPtr<CSSPropertySpecificKeyframe> clone = create(offset, m_easing, m_value .get(), m_composite);
295 toCSSPropertySpecificKeyframe(theClone)->m_animatableValueCache = m_animatab leValueCache; 283 clone->m_animatableValueCache = m_animatableValueCache;
296 return adoptPtr(theClone); 284 return clone.release();
297 } 285 }
298 286
299 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP tr<TimingFunction> easing, const String& value, EffectModel::CompositeOperation op) 287 PassRefPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::clon eWithOffset(double offset) const
300 : Keyframe::PropertySpecificKeyframe(offset, easing, op)
301 , m_value(value)
302 { 288 {
289 return create(offset, m_easing, m_value, m_composite);
303 } 290 }
304 291
305 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP tr<TimingFunction> easing, const String& value) 292 PassRefPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::neut ralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const
306 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR eplace)
307 , m_value(value)
308 { 293 {
309 ASSERT(!isNull(m_offset)); 294 return create(offset, easing, String(), EffectModel::CompositeAdd);
310 }
311
312 PassOwnPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::clon eWithOffset(double offset) const
313 {
314 return adoptPtr(new SVGPropertySpecificKeyframe(offset, m_easing, m_value));
315 }
316
317 PassOwnPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::neut ralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const
318 {
319 return adoptPtr(new SVGPropertySpecificKeyframe(offset, easing, String(), Ef fectModel::CompositeAdd));
320 } 295 }
321 296
322 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* , const ComputedStyle*) const 297 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* , const ComputedStyle*) const
323 { 298 {
324 const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMappin g::get(propertyHandle); 299 const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMappin g::get(propertyHandle);
325 ASSERT(applicableTypes); 300 ASSERT(applicableTypes);
326 return InvalidatableInterpolation::create(propertyHandle, *applicableTypes, *this, end); 301 return InvalidatableInterpolation::create(propertyHandle, *applicableTypes, const_cast<SVGPropertySpecificKeyframe*>(this), &end);
327 } 302 }
328 303
329 } // namespace blink 304 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698