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

Side by Side Diff: Source/core/platform/animation/TimingFunction.h

Issue 60033004: Don't check all animation/transition properties when comparing RenderStyles (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/platform/animation/CSSAnimationData.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) 3 * (C) 2000 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 LinearFunction, CubicBezierFunction, StepsFunction, ChainedFunction 45 LinearFunction, CubicBezierFunction, StepsFunction, ChainedFunction
46 }; 46 };
47 47
48 virtual ~TimingFunction() { } 48 virtual ~TimingFunction() { }
49 49
50 Type type() const { return m_type; } 50 Type type() const { return m_type; }
51 51
52 // Evaluates the timing function at the given fraction. The accuracy paramet er provides a hint as to the required 52 // Evaluates the timing function at the given fraction. The accuracy paramet er provides a hint as to the required
53 // accuracy and is not guaranteed. 53 // accuracy and is not guaranteed.
54 virtual double evaluate(double fraction, double accuracy) const = 0; 54 virtual double evaluate(double fraction, double accuracy) const = 0;
55 virtual bool operator==(const TimingFunction& other) const = 0;
56 55
57 protected: 56 protected:
58 TimingFunction(Type type) 57 TimingFunction(Type type)
59 : m_type(type) 58 : m_type(type)
60 { 59 {
61 } 60 }
62 61
63 private: 62 private:
64 Type m_type; 63 Type m_type;
65 }; 64 };
66 65
67 class LinearTimingFunction : public TimingFunction { 66 class LinearTimingFunction : public TimingFunction {
68 public: 67 public:
69 static PassRefPtr<LinearTimingFunction> create() 68 static PassRefPtr<LinearTimingFunction> create()
70 { 69 {
71 return adoptRef(new LinearTimingFunction); 70 return adoptRef(new LinearTimingFunction);
72 } 71 }
73 72
74 ~LinearTimingFunction() { } 73 ~LinearTimingFunction() { }
75 74
76 virtual double evaluate(double fraction, double) const 75 virtual double evaluate(double fraction, double) const
77 { 76 {
78 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1)); 77 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1));
79 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified"); 78 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified");
80 return fraction; 79 return fraction;
81 } 80 }
82 81
83 virtual bool operator==(const TimingFunction& other) const
84 {
85 return other.type() == LinearFunction;
86 }
87
88 private: 82 private:
89 LinearTimingFunction() 83 LinearTimingFunction()
90 : TimingFunction(LinearFunction) 84 : TimingFunction(LinearFunction)
91 { 85 {
92 } 86 }
93 }; 87 };
94 88
95 89
96 // Forward declare so we can friend it below. Don't use in production code! 90 // Forward declare so we can friend it below. Don't use in production code!
97 class ChainedTimingFunctionPrinter; 91 class ChainedTimingFunctionPrinter;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 138
145 virtual double evaluate(double fraction, double accuracy) const 139 virtual double evaluate(double fraction, double accuracy) const
146 { 140 {
147 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1)); 141 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1));
148 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified"); 142 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified");
149 if (!m_bezier) 143 if (!m_bezier)
150 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2)); 144 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2));
151 return m_bezier->solve(fraction, accuracy); 145 return m_bezier->solve(fraction, accuracy);
152 } 146 }
153 147
154 virtual bool operator==(const TimingFunction& other) const
155 {
156 if (other.type() == CubicBezierFunction) {
157 const CubicBezierTimingFunction* ctf = static_cast<const CubicBezier TimingFunction*>(&other);
158 if (m_subType != Custom)
159 return m_subType == ctf->m_subType;
160
161 return m_x1 == ctf->m_x1 && m_y1 == ctf->m_y1 && m_x2 == ctf->m_x2 & & m_y2 == ctf->m_y2;
162 }
163 return false;
164 }
165
166 double x1() const { return m_x1; } 148 double x1() const { return m_x1; }
167 double y1() const { return m_y1; } 149 double y1() const { return m_y1; }
168 double x2() const { return m_x2; } 150 double x2() const { return m_x2; }
169 double y2() const { return m_y2; } 151 double y2() const { return m_y2; }
170 152
171 SubType subType() const { return m_subType; } 153 SubType subType() const { return m_subType; }
172 154
173 private: 155 private:
174 explicit CubicBezierTimingFunction(SubType subType, double x1, double y1, do uble x2, double y2) 156 explicit CubicBezierTimingFunction(SubType subType, double x1, double y1, do uble x2, double y2)
175 : TimingFunction(CubicBezierFunction) 157 : TimingFunction(CubicBezierFunction)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 206
225 ~StepsTimingFunction() { } 207 ~StepsTimingFunction() { }
226 208
227 virtual double evaluate(double fraction, double) const 209 virtual double evaluate(double fraction, double) const
228 { 210 {
229 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1)); 211 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1));
230 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified"); 212 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnabled() || ( fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing fun ction behavior outside the range [0, 1] is not yet specified");
231 return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_ste ps); 213 return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_ste ps);
232 } 214 }
233 215
234 virtual bool operator==(const TimingFunction& other) const
235 {
236 if (other.type() == StepsFunction) {
237 const StepsTimingFunction* stf = static_cast<const StepsTimingFuncti on*>(&other);
238 if (m_subType != Custom)
239 return m_subType == stf->m_subType;
240 return m_steps == stf->m_steps && m_stepAtStart == stf->m_stepAtStar t;
241 }
242 return false;
243 }
244
245 int numberOfSteps() const { return m_steps; } 216 int numberOfSteps() const { return m_steps; }
246 bool stepAtStart() const { return m_stepAtStart; } 217 bool stepAtStart() const { return m_stepAtStart; }
247 218
248 SubType subType() const { return m_subType; } 219 SubType subType() const { return m_subType; }
249 220
250 private: 221 private:
251 StepsTimingFunction(SubType subType, int steps, bool stepAtStart) 222 StepsTimingFunction(SubType subType, int steps, bool stepAtStart)
252 : TimingFunction(StepsFunction) 223 : TimingFunction(StepsFunction)
253 , m_steps(steps) 224 , m_steps(steps)
254 , m_stepAtStart(stepAtStart) 225 , m_stepAtStart(stepAtStart)
(...skipping 25 matching lines...) Expand all
280 ASSERT(!m_segments.isEmpty()); 251 ASSERT(!m_segments.isEmpty());
281 ASSERT(m_segments.last().max() == 1); 252 ASSERT(m_segments.last().max() == 1);
282 size_t i = 0; 253 size_t i = 0;
283 const Segment* segment = &m_segments[i++]; 254 const Segment* segment = &m_segments[i++];
284 while (fraction >= segment->max() && i < m_segments.size()) { 255 while (fraction >= segment->max() && i < m_segments.size()) {
285 segment = &m_segments[i++]; 256 segment = &m_segments[i++];
286 } 257 }
287 return segment->evaluate(fraction, accuracy); 258 return segment->evaluate(fraction, accuracy);
288 } 259 }
289 260
290 virtual bool operator==(const TimingFunction& other) const
291 {
292 // This class is not exposed to CSS, so this method is not required.
293 ASSERT_NOT_REACHED();
294 return false;
295 }
296
297 private: 261 private:
298 class Segment { 262 class Segment {
299 public: 263 public:
300 Segment(double min, double max, TimingFunction* timingFunction) 264 Segment(double min, double max, TimingFunction* timingFunction)
301 : m_min(min) 265 : m_min(min)
302 , m_max(max) 266 , m_max(max)
303 , m_timingFunction(timingFunction) 267 , m_timingFunction(timingFunction)
304 { } 268 { }
305 269
306 double max() const { return m_max; } 270 double max() const { return m_max; }
(...skipping 24 matching lines...) Expand all
331 Vector<Segment> m_segments; 295 Vector<Segment> m_segments;
332 296
333 // Allow printing of our segments. Can be removed once 297 // Allow printing of our segments. Can be removed once
334 // ChainedTimingFunction has a public API for segments. 298 // ChainedTimingFunction has a public API for segments.
335 friend class ChainedTimingFunctionPrinter; 299 friend class ChainedTimingFunctionPrinter;
336 }; 300 };
337 301
338 } // namespace WebCore 302 } // namespace WebCore
339 303
340 #endif // TimingFunction_h 304 #endif // TimingFunction_h
OLDNEW
« no previous file with comments | « Source/core/platform/animation/CSSAnimationData.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698