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

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

Issue 2097383002: Added support of calc() for SVGLength (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 4 years, 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/SVGLengthInterpolationType.h" 5 #include "core/animation/SVGLengthInterpolationType.h"
6 6
7 #include "core/animation/InterpolationEnvironment.h" 7 #include "core/animation/InterpolationEnvironment.h"
8 #include "core/animation/StringKeyframe.h" 8 #include "core/animation/StringKeyframe.h"
9 #include "core/css/CSSHelper.h" 9 #include "core/css/CSSHelper.h"
10 #include "core/svg/SVGElement.h" 10 #include "core/svg/SVGElement.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 { 96 {
97 std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(nu mLengthInterpolatedUnits); 97 std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(nu mLengthInterpolatedUnits);
98 for (size_t i = 0; i < numLengthInterpolatedUnits; ++i) 98 for (size_t i = 0; i < numLengthInterpolatedUnits; ++i)
99 listOfValues->set(i, InterpolableNumber::create(0)); 99 listOfValues->set(i, InterpolableNumber::create(0));
100 100
101 return std::move(listOfValues); 101 return std::move(listOfValues);
102 } 102 }
103 103
104 InterpolationValue SVGLengthInterpolationType::convertSVGLength(const SVGLength& length) 104 InterpolationValue SVGLengthInterpolationType::convertSVGLength(const SVGLength& length)
105 { 105 {
106 double value = length.valueInSpecifiedUnits(); 106 const CSSPrimitiveValue* primitiveValue = length.asCSSPrimitiveValue();
107 LengthInterpolatedUnit unitType = convertToInterpolatedUnit(length.typeWithC alcResolved(), value); 107
108 CSSLengthArray lengthArray;
109 primitiveValue->accumulateLengthArray(lengthArray);
108 110
109 double values[numLengthInterpolatedUnits] = { }; 111 double values[numLengthInterpolatedUnits] = { };
110 values[unitType] = value; 112
113 for (size_t i = 0; i < CSSPrimitiveValue::LengthUnitTypeCount; i++) {
114 double value = lengthArray.values[i];
115 LengthInterpolatedUnit unitType = convertToInterpolatedUnit(SVGLength::t oUnitType(i), value);
fs 2016/07/16 21:13:02 Couldn't we take this opportunity to transition to
Shanmuga Pandi 2016/07/18 13:35:32 That's good thought.. :) Done!!
fs 2016/07/18 13:56:48 Looks great, thanks!
116 values[unitType] = value;
117 }
111 118
112 std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(nu mLengthInterpolatedUnits); 119 std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(nu mLengthInterpolatedUnits);
113 for (size_t i = 0; i < numLengthInterpolatedUnits; ++i) 120 for (size_t i = 0; i < numLengthInterpolatedUnits; ++i)
114 listOfValues->set(i, InterpolableNumber::create(values[i])); 121 listOfValues->set(i, InterpolableNumber::create(values[i]));
115 122
116 return InterpolationValue(std::move(listOfValues)); 123 return InterpolationValue(std::move(listOfValues));
117 } 124 }
118 125
119 SVGLength* SVGLengthInterpolationType::resolveInterpolableSVGLength(const Interp olableValue& interpolableValue, const SVGLengthContext& lengthContext, SVGLength Mode unitMode, bool negativeValuesForbidden) 126 SVGLength* SVGLengthInterpolationType::resolveInterpolableSVGLength(const Interp olableValue& interpolableValue, const SVGLengthContext& lengthContext, SVGLength Mode unitMode, bool negativeValuesForbidden)
120 { 127 {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 184 }
178 185
179 void SVGLengthInterpolationType::apply(const InterpolableValue& interpolableValu e, const NonInterpolableValue* nonInterpolableValue, InterpolationEnvironment& e nvironment) const 186 void SVGLengthInterpolationType::apply(const InterpolableValue& interpolableValu e, const NonInterpolableValue* nonInterpolableValue, InterpolationEnvironment& e nvironment) const
180 { 187 {
181 SVGElement& element = environment.svgElement(); 188 SVGElement& element = environment.svgElement();
182 SVGLengthContext lengthContext(&element); 189 SVGLengthContext lengthContext(&element);
183 element.setWebAnimatedAttribute(attribute(), resolveInterpolableSVGLength(in terpolableValue, lengthContext, m_unitMode, m_negativeValuesForbidden)); 190 element.setWebAnimatedAttribute(attribute(), resolveInterpolableSVGLength(in terpolableValue, lengthContext, m_unitMode, m_negativeValuesForbidden));
184 } 191 }
185 192
186 } // namespace blink 193 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698