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

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

Issue 52923003: Fixing reflectivity of operator== for timing functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/platform/animation/TimingFunctionTest.cpp » ('j') | 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 17 matching lines...) Expand all
28 #include "RuntimeEnabledFeatures.h" 28 #include "RuntimeEnabledFeatures.h"
29 #include "platform/animation/AnimationUtilities.h" // For blend() 29 #include "platform/animation/AnimationUtilities.h" // For blend()
30 #include "platform/animation/UnitBezier.h" 30 #include "platform/animation/UnitBezier.h"
31 #include "wtf/OwnPtr.h" 31 #include "wtf/OwnPtr.h"
32 #include "wtf/PassOwnPtr.h" 32 #include "wtf/PassOwnPtr.h"
33 #include "wtf/PassRefPtr.h" 33 #include "wtf/PassRefPtr.h"
34 #include "wtf/RefCounted.h" 34 #include "wtf/RefCounted.h"
35 #include "wtf/Vector.h" 35 #include "wtf/Vector.h"
36 #include <algorithm> 36 #include <algorithm>
37 37
38
39 namespace WebCore { 38 namespace WebCore {
40 39
41 class TimingFunction : public RefCounted<TimingFunction> { 40 class TimingFunction : public RefCounted<TimingFunction> {
42 public: 41 public:
43 42
44 enum Type { 43 enum Type {
45 LinearFunction, CubicBezierFunction, StepsFunction, ChainedFunction 44 LinearFunction, CubicBezierFunction, StepsFunction, ChainedFunction
46 }; 45 };
47 46
48 virtual ~TimingFunction() { } 47 virtual ~TimingFunction() { }
49 48
50 Type type() const { return m_type; } 49 Type type() const { return m_type; }
51 50
52 // Evaluates the timing function at the given fraction. The accuracy paramet er provides a hint as to the required 51 // 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. 52 // accuracy and is not guaranteed.
54 virtual double evaluate(double fraction, double accuracy) const = 0; 53 virtual double evaluate(double fraction, double accuracy) const = 0;
55 virtual bool operator==(const TimingFunction& other) const = 0; 54 virtual bool operator==(const TimingFunction& other) const = 0;
55 virtual bool operator!=(const TimingFunction& other) const { return !operato r==(other); }
56 56
57 protected: 57 protected:
58 TimingFunction(Type type) 58 TimingFunction(Type type)
59 : m_type(type) 59 : m_type(type)
60 { 60 {
61 } 61 }
62 62
63 private: 63 private:
64 Type m_type; 64 Type m_type;
65 }; 65 };
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 { 146 {
147 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1)); 147 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1));
148 RELEASE_ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnable d() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Ti ming function behavior outside the range [0, 1] is not yet specified"); 148 RELEASE_ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnable d() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Ti ming function behavior outside the range [0, 1] is not yet specified");
149 if (!m_bezier) 149 if (!m_bezier)
150 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2)); 150 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2));
151 return m_bezier->solve(fraction, accuracy); 151 return m_bezier->solve(fraction, accuracy);
152 } 152 }
153 153
154 virtual bool operator==(const TimingFunction& other) const 154 virtual bool operator==(const TimingFunction& other) const
155 { 155 {
156 if (other.type() == CubicBezierFunction) { 156 if (other.type() != CubicBezierFunction)
157 const CubicBezierTimingFunction* ctf = static_cast<const CubicBezier TimingFunction*>(&other); 157 return false;
158 if (m_subType != Custom)
159 return m_subType == ctf->m_subType;
160 158
159 const CubicBezierTimingFunction* ctf = static_cast<const CubicBezierTimi ngFunction*>(&other);
160 if (m_subType == Custom && ctf->m_subType == Custom)
161 return m_x1 == ctf->m_x1 && m_y1 == ctf->m_y1 && m_x2 == ctf->m_x2 & & m_y2 == ctf->m_y2; 161 return m_x1 == ctf->m_x1 && m_y1 == ctf->m_y1 && m_x2 == ctf->m_x2 & & m_y2 == ctf->m_y2;
162 } 162
163 return false; 163 return m_subType == ctf->m_subType;
164 } 164 }
165 165
166 double x1() const { return m_x1; } 166 double x1() const { return m_x1; }
167 double y1() const { return m_y1; } 167 double y1() const { return m_y1; }
168 double x2() const { return m_x2; } 168 double x2() const { return m_x2; }
169 double y2() const { return m_y2; } 169 double y2() const { return m_y2; }
170 170
171 SubType subType() const { return m_subType; } 171 SubType subType() const { return m_subType; }
172 172
173 private: 173 private:
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 virtual double evaluate(double fraction, double) const 227 virtual double evaluate(double fraction, double) const
228 { 228 {
229 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1)); 229 ASSERT(RuntimeEnabledFeatures::webAnimationsEnabled() || (fraction >= 0 && fraction <= 1));
230 RELEASE_ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnable d() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Ti ming function behavior outside the range [0, 1] is not yet specified"); 230 RELEASE_ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsEnable d() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Ti ming function 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); 231 return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_ste ps);
232 } 232 }
233 233
234 virtual bool operator==(const TimingFunction& other) const 234 virtual bool operator==(const TimingFunction& other) const
235 { 235 {
236 if (other.type() == StepsFunction) { 236 if (other.type() != StepsFunction)
237 const StepsTimingFunction* stf = static_cast<const StepsTimingFuncti on*>(&other); 237 return false;
238 if (m_subType != Custom) 238
239 return m_subType == stf->m_subType; 239 const StepsTimingFunction* stf = static_cast<const StepsTimingFunction*> (&other);
240 if (m_subType == Custom && stf->m_subType == Custom)
240 return m_steps == stf->m_steps && m_stepAtStart == stf->m_stepAtStar t; 241 return m_steps == stf->m_steps && m_stepAtStart == stf->m_stepAtStar t;
241 } 242
242 return false; 243 return m_subType == stf->m_subType;
243 } 244 }
244 245
245 int numberOfSteps() const { return m_steps; } 246 int numberOfSteps() const { return m_steps; }
246 bool stepAtStart() const { return m_stepAtStart; } 247 bool stepAtStart() const { return m_stepAtStart; }
247 248
248 SubType subType() const { return m_subType; } 249 SubType subType() const { return m_subType; }
249 250
250 private: 251 private:
251 StepsTimingFunction(SubType subType, int steps, bool stepAtStart) 252 StepsTimingFunction(SubType subType, int steps, bool stepAtStart)
252 : TimingFunction(StepsFunction) 253 : TimingFunction(StepsFunction)
(...skipping 14 matching lines...) Expand all
267 { 268 {
268 return adoptRef(new ChainedTimingFunction); 269 return adoptRef(new ChainedTimingFunction);
269 } 270 }
270 271
271 void appendSegment(double upperBound, TimingFunction* timingFunction) 272 void appendSegment(double upperBound, TimingFunction* timingFunction)
272 { 273 {
273 double max = m_segments.isEmpty() ? 0 : m_segments.last().max(); 274 double max = m_segments.isEmpty() ? 0 : m_segments.last().max();
274 ASSERT(upperBound > max); 275 ASSERT(upperBound > max);
275 m_segments.append(Segment(max, upperBound, timingFunction)); 276 m_segments.append(Segment(max, upperBound, timingFunction));
276 } 277 }
278
277 virtual double evaluate(double fraction, double accuracy) const 279 virtual double evaluate(double fraction, double accuracy) const
278 { 280 {
279 RELEASE_ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animati ons not yet implemented: Timing function behavior outside the range [0, 1] is no t yet specified"); 281 RELEASE_ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animati ons not yet implemented: Timing function behavior outside the range [0, 1] is no t yet specified");
280 ASSERT(!m_segments.isEmpty()); 282 ASSERT(!m_segments.isEmpty());
281 ASSERT(m_segments.last().max() == 1); 283 ASSERT(m_segments.last().max() == 1);
282 size_t i = 0; 284 size_t i = 0;
283 const Segment* segment = &m_segments[i++]; 285 const Segment* segment = &m_segments[i++];
284 while (fraction >= segment->max() && i < m_segments.size()) { 286 while (fraction >= segment->max() && i < m_segments.size()) {
285 segment = &m_segments[i++]; 287 segment = &m_segments[i++];
286 } 288 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 Vector<Segment> m_segments; 333 Vector<Segment> m_segments;
332 334
333 // Allow printing of our segments. Can be removed once 335 // Allow printing of our segments. Can be removed once
334 // ChainedTimingFunction has a public API for segments. 336 // ChainedTimingFunction has a public API for segments.
335 friend class ChainedTimingFunctionPrintTo; 337 friend class ChainedTimingFunctionPrintTo;
336 }; 338 };
337 339
338 } // namespace WebCore 340 } // namespace WebCore
339 341
340 #endif // TimingFunction_h 342 #endif // TimingFunction_h
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/platform/animation/TimingFunctionTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698