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

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: Added unit tests Created 6 years, 10 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
(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 PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const = 0;
16 virtual PassOwnPtr<InterpolableValue> clone() const = 0;
17
18 virtual bool isNumber() const { return false; }
19 virtual bool isBool() const { return false; }
20 virtual bool isList() const { return false; }
21
22 virtual ~InterpolableValue() { }
23 };
24
25 class InterpolableNumber : public InterpolableValue {
26 public:
27 static PassOwnPtr<InterpolableNumber> create(double value)
28 {
29 return adoptPtr(new InterpolableNumber(value));
30 }
31
32 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double progress) const OVERRIDE FINAL;
alancutter (OOO until 2018) 2014/02/26 00:42:29 The suite of blend() functions have the "other" be
shans 2014/02/26 21:24:20 Done.
33 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); }
34 virtual bool isNumber() const OVERRIDE FINAL { return true; }
35 double value() const { return m_value; }
36 private:
37 double m_value;
38
39 InterpolableNumber(double value)
40 : m_value(value)
41 { }
42
43 };
44
45 class InterpolableBool : public InterpolableValue {
46 public:
47 static PassOwnPtr<InterpolableBool> create(bool value)
48 {
49 return adoptPtr(new InterpolableBool(value));
50 }
51
52 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const OVERRIDE FINAL;
53 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); }
54 virtual bool isBool() const OVERRIDE FINAL { return true; }
55 bool value() const { return m_value; }
56 private:
57 bool m_value;
58
59 InterpolableBool(bool value)
60 : m_value(value)
61 { }
62 };
63
64 class InterpolableList : public InterpolableValue {
65 public:
66 static PassOwnPtr<InterpolableList> create(const InterpolableList &other)
67 {
68 return adoptPtr(new InterpolableList(other));
69 }
70
71 static PassOwnPtr<InterpolableList> create(size_t size)
72 {
73 return adoptPtr(new InterpolableList(size));
74 }
75
76 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const OVERRIDE FINAL;
77 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(*this); }
78 virtual bool isList() const OVERRIDE FINAL { return true; }
79 void set(size_t position, PassOwnPtr<InterpolableValue> value)
80 {
81 ASSERT(position < m_size);
82 m_values.get()[position] = value;
83 }
84 const InterpolableValue* get(size_t position) const
85 {
86 ASSERT(position < m_size);
alancutter (OOO until 2018) 2014/02/26 00:42:29 I'm not so sure unchecked array access in release
shans 2014/02/26 21:24:20 InterpolableValues should only be constructed in a
87 return m_values.get()[position].get();
88 }
89
90 private:
91 InterpolableList(size_t size)
92 : m_size(size)
93 {
94 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[size]);
95 }
96
97 InterpolableList(const InterpolableList& other)
98 : m_size(other.m_size)
99 {
100 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[m_size]);
101 for (size_t i = 0; i < m_size; i++)
102 set(i, other.m_values.get()[i]->clone());
103 }
104
105 size_t m_size;
106 OwnPtr<OwnPtr<InterpolableValue>[]> m_values;
107 };
108
109 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber( ), value.isNumber());
110 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v alue.isBool());
111 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v alue.isList());
112
113 }
114
115 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/core/animation/InterpolableValue.cpp » ('j') | Source/core/animation/InterpolableValueTest.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698