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

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

Issue 131003004: Update platform classes to use OVERRIDE / FINAL when needed (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 };
66 66
67 class LinearTimingFunction : public TimingFunction { 67 class LinearTimingFunction FINAL : public TimingFunction {
68 public: 68 public:
69 static PassRefPtr<LinearTimingFunction> create() 69 static PassRefPtr<LinearTimingFunction> create()
70 { 70 {
71 return adoptRef(new LinearTimingFunction); 71 return adoptRef(new LinearTimingFunction);
72 } 72 }
73 73
74 ~LinearTimingFunction() { } 74 virtual ~LinearTimingFunction() { }
75 75
76 virtual double evaluate(double fraction, double) const 76 virtual double evaluate(double fraction, double) const OVERRIDE
77 { 77 {
78 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); 78 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
79 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified"); 79 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
80 return fraction; 80 return fraction;
81 } 81 }
82 82
83 private: 83 private:
84 LinearTimingFunction() 84 LinearTimingFunction()
85 : TimingFunction(LinearFunction) 85 : TimingFunction(LinearFunction)
86 { 86 {
87 } 87 }
88 }; 88 };
89 89
90 90
91 // Forward declare so we can friend it below. Don't use in production code! 91 // Forward declare so we can friend it below. Don't use in production code!
92 class ChainedTimingFunctionTestHelper; 92 class ChainedTimingFunctionTestHelper;
93 93
94 class CubicBezierTimingFunction : public TimingFunction { 94 class CubicBezierTimingFunction FINAL : public TimingFunction {
95 public: 95 public:
96 enum SubType { 96 enum SubType {
97 Ease, 97 Ease,
98 EaseIn, 98 EaseIn,
99 EaseOut, 99 EaseOut,
100 EaseInOut, 100 EaseInOut,
101 Custom 101 Custom
102 }; 102 };
103 103
104 static PassRefPtr<CubicBezierTimingFunction> create(double x1, double y1, do uble x2, double y2) 104 static PassRefPtr<CubicBezierTimingFunction> create(double x1, double y1, do uble x2, double y2)
(...skipping 23 matching lines...) Expand all
128 { 128 {
129 DEFINE_STATIC_REF(CubicBezierTimingFunction, easeInOut, (adoptRe f(new CubicBezierTimingFunction(EaseInOut, 0.42, 0.0, 0.58, 1.0)))); 129 DEFINE_STATIC_REF(CubicBezierTimingFunction, easeInOut, (adoptRe f(new CubicBezierTimingFunction(EaseInOut, 0.42, 0.0, 0.58, 1.0))));
130 return easeInOut; 130 return easeInOut;
131 } 131 }
132 default: 132 default:
133 ASSERT_NOT_REACHED(); 133 ASSERT_NOT_REACHED();
134 return 0; 134 return 0;
135 } 135 }
136 } 136 }
137 137
138 ~CubicBezierTimingFunction() { } 138 virtual ~CubicBezierTimingFunction() { }
139 139
140 virtual double evaluate(double fraction, double accuracy) const 140 virtual double evaluate(double fraction, double accuracy) const OVERRIDE
141 { 141 {
142 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); 142 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
143 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified"); 143 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
144 if (!m_bezier) 144 if (!m_bezier)
145 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2)); 145 m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2));
146 return m_bezier->solve(fraction, accuracy); 146 return m_bezier->solve(fraction, accuracy);
147 } 147 }
148 148
149 double x1() const { return m_x1; } 149 double x1() const { return m_x1; }
150 double y1() const { return m_y1; } 150 double y1() const { return m_y1; }
(...skipping 14 matching lines...) Expand all
165 } 165 }
166 166
167 double m_x1; 167 double m_x1;
168 double m_y1; 168 double m_y1;
169 double m_x2; 169 double m_x2;
170 double m_y2; 170 double m_y2;
171 SubType m_subType; 171 SubType m_subType;
172 mutable OwnPtr<UnitBezier> m_bezier; 172 mutable OwnPtr<UnitBezier> m_bezier;
173 }; 173 };
174 174
175 class StepsTimingFunction : public TimingFunction { 175 class StepsTimingFunction FINAL : public TimingFunction {
176 public: 176 public:
177 enum SubType { 177 enum SubType {
178 Start, 178 Start,
179 End, 179 End,
180 Custom 180 Custom
181 }; 181 };
182 182
183 static PassRefPtr<StepsTimingFunction> create(int steps, bool stepAtStart) 183 static PassRefPtr<StepsTimingFunction> create(int steps, bool stepAtStart)
184 { 184 {
185 return adoptRef(new StepsTimingFunction(Custom, steps, stepAtStart)); 185 return adoptRef(new StepsTimingFunction(Custom, steps, stepAtStart));
(...skipping 12 matching lines...) Expand all
198 DEFINE_STATIC_REF(StepsTimingFunction, end, (adoptRef(new StepsT imingFunction(End, 1, false)))); 198 DEFINE_STATIC_REF(StepsTimingFunction, end, (adoptRef(new StepsT imingFunction(End, 1, false))));
199 return end; 199 return end;
200 } 200 }
201 default: 201 default:
202 ASSERT_NOT_REACHED(); 202 ASSERT_NOT_REACHED();
203 return 0; 203 return 0;
204 } 204 }
205 } 205 }
206 206
207 207
208 ~StepsTimingFunction() { } 208 virtual ~StepsTimingFunction() { }
209 209
210 virtual double evaluate(double fraction, double) const 210 virtual double evaluate(double fraction, double) const OVERRIDE
211 { 211 {
212 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); 212 ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
213 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified"); 213 ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() | | (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
214 return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_ste ps); 214 return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_ste ps);
215 } 215 }
216 216
217 int numberOfSteps() const { return m_steps; } 217 int numberOfSteps() const { return m_steps; }
218 bool stepAtStart() const { return m_stepAtStart; } 218 bool stepAtStart() const { return m_stepAtStart; }
219 219
220 SubType subType() const { return m_subType; } 220 SubType subType() const { return m_subType; }
221 221
222 private: 222 private:
223 StepsTimingFunction(SubType subType, int steps, bool stepAtStart) 223 StepsTimingFunction(SubType subType, int steps, bool stepAtStart)
224 : TimingFunction(StepsFunction) 224 : TimingFunction(StepsFunction)
225 , m_steps(steps) 225 , m_steps(steps)
226 , m_stepAtStart(stepAtStart) 226 , m_stepAtStart(stepAtStart)
227 , m_subType(subType) 227 , m_subType(subType)
228 { 228 {
229 } 229 }
230 230
231 int m_steps; 231 int m_steps;
232 bool m_stepAtStart; 232 bool m_stepAtStart;
233 SubType m_subType; 233 SubType m_subType;
234 }; 234 };
235 235
236 class ChainedTimingFunction : public TimingFunction { 236 class ChainedTimingFunction FINAL : public TimingFunction {
237 public: 237 public:
238 static PassRefPtr<ChainedTimingFunction> create() 238 static PassRefPtr<ChainedTimingFunction> create()
239 { 239 {
240 return adoptRef(new ChainedTimingFunction); 240 return adoptRef(new ChainedTimingFunction);
241 } 241 }
242 242
243 void appendSegment(double upperBound, TimingFunction* timingFunction) 243 void appendSegment(double upperBound, TimingFunction* timingFunction)
244 { 244 {
245 double max = m_segments.isEmpty() ? 0 : m_segments.last().max(); 245 double max = m_segments.isEmpty() ? 0 : m_segments.last().max();
246 ASSERT(upperBound > max); 246 ASSERT(upperBound > max);
247 m_segments.append(Segment(max, upperBound, timingFunction)); 247 m_segments.append(Segment(max, upperBound, timingFunction));
248 } 248 }
249 virtual double evaluate(double fraction, double accuracy) const 249 virtual double evaluate(double fraction, double accuracy) const OVERRIDE
250 { 250 {
251 ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet sp ecified"); 251 ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet sp ecified");
252 ASSERT(!m_segments.isEmpty()); 252 ASSERT(!m_segments.isEmpty());
253 ASSERT(m_segments.last().max() == 1); 253 ASSERT(m_segments.last().max() == 1);
254 size_t i = 0; 254 size_t i = 0;
255 const Segment* segment = &m_segments[i++]; 255 const Segment* segment = &m_segments[i++];
256 while (fraction >= segment->max() && i < m_segments.size()) { 256 while (fraction >= segment->max() && i < m_segments.size()) {
257 segment = &m_segments[i++]; 257 segment = &m_segments[i++];
258 } 258 }
259 return segment->evaluate(fraction, accuracy); 259 return segment->evaluate(fraction, accuracy);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 value.type() == TimingFunction::typeName##Function) 321 value.type() == TimingFunction::typeName##Function)
322 322
323 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Linear); 323 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Linear);
324 DEFINE_TIMING_FUNCTION_TYPE_CASTS(CubicBezier); 324 DEFINE_TIMING_FUNCTION_TYPE_CASTS(CubicBezier);
325 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Steps); 325 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Steps);
326 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Chained); 326 DEFINE_TIMING_FUNCTION_TYPE_CASTS(Chained);
327 327
328 } // namespace WebCore 328 } // namespace WebCore
329 329
330 #endif // TimingFunction_h 330 #endif // TimingFunction_h
OLDNEW
« no previous file with comments | « Source/platform/animation/AnimationValue.h ('k') | Source/platform/audio/AudioDSPKernelProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698