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

Side by Side Diff: Source/core/animation/InterpolableValue.h

Issue 177183007: Web Animations: Add InterpolableValue hierarchy. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 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
« no previous file with comments | « no previous file | Source/core/animation/InterpolableValue.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef InterpolableValue_h
6 #define InterpolableValue_h
7
8 #include "wtf/OwnPtr.h"
9 #include "wtf/PassOwnPtr.h"
10
11 namespace WebCore {
12
13 class InterpolableValue {
14 public:
15 virtual bool isNumber() const { return false; }
16 virtual bool isBool() const { return false; }
17 virtual bool isList() const { return false; }
18
19 virtual ~InterpolableValue() { }
20 virtual PassOwnPtr<InterpolableValue> clone() const = 0;
21
22 private:
23 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &t o, const double progress) const = 0;
24
25 // TODO: Replace this with Interpolation when committing Interpolation
26 // patch. Refactor InterpolableValueTest to test via Interpolation
27 // interface.
28 friend class AnimationInterpolableValueTest;
29
30 // Keep interpolate private, but allow calls within the hierarchy without
31 // knowledge of type.
32 friend class InterpolableNumber;
33 friend class InterpolableBool;
34 friend class InterpolableList;
35 };
36
37 class InterpolableNumber : public InterpolableValue {
38 public:
39 static PassOwnPtr<InterpolableNumber> create(double value)
40 {
41 return adoptPtr(new InterpolableNumber(value));
42 }
43
44 virtual bool isNumber() const OVERRIDE FINAL { return true; }
45 double value() const { return m_value; }
46 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); }
47
48 private:
49 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &t o, const double progress) const OVERRIDE FINAL;
50 double m_value;
51
52 InterpolableNumber(double value)
53 : m_value(value)
54 { }
55
56 };
57
58 class InterpolableBool : public InterpolableValue {
59 public:
60 static PassOwnPtr<InterpolableBool> create(bool value)
61 {
62 return adoptPtr(new InterpolableBool(value));
63 }
64
65 virtual bool isBool() const OVERRIDE FINAL { return true; }
66 bool value() const { return m_value; }
67 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); }
68
69 private:
70 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &t o, const double progress) const OVERRIDE FINAL;
71 bool m_value;
72
73 InterpolableBool(bool value)
74 : m_value(value)
75 { }
76
77 };
78
79 class InterpolableList : public InterpolableValue {
80 public:
81 static PassOwnPtr<InterpolableList> create(const InterpolableList &other)
82 {
83 return adoptPtr(new InterpolableList(other));
84 }
85
86 static PassOwnPtr<InterpolableList> create(size_t size)
87 {
88 return adoptPtr(new InterpolableList(size));
89 }
90
91 virtual bool isList() const OVERRIDE FINAL { return true; }
92 void set(size_t position, PassOwnPtr<InterpolableValue> value)
93 {
94 ASSERT(position < m_size);
95 m_values.get()[position] = value;
96 }
97 const InterpolableValue* get(size_t position) const
98 {
99 ASSERT(position < m_size);
100 return m_values.get()[position].get();
101 }
102 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(*this); }
103
104 private:
105 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, const double progress) const OVERRIDE FINAL;
106 InterpolableList(size_t size)
107 : m_size(size)
108 {
109 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[size]);
110 }
111
112 InterpolableList(const InterpolableList& other)
113 : m_size(other.m_size)
114 {
115 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[m_size]);
116 for (size_t i = 0; i < m_size; i++)
117 set(i, other.m_values.get()[i]->clone());
118 }
119
120 size_t m_size;
121 OwnPtr<OwnPtr<InterpolableValue>[]> m_values;
122 };
123
124 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber( ), value.isNumber());
125 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v alue.isBool());
126 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v alue.isList());
127
128 }
129
130 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/core/animation/InterpolableValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698