| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef InterpolableValue_h | 5 #ifndef InterpolableValue_h |
| 6 #define InterpolableValue_h | 6 #define InterpolableValue_h |
| 7 | 7 |
| 8 #include "wtf/OwnPtr.h" | 8 #include "wtf/OwnPtr.h" |
| 9 #include "wtf/PassOwnPtr.h" | 9 #include "wtf/PassOwnPtr.h" |
| 10 | 10 |
| 11 namespace WebCore { | 11 namespace WebCore { |
| 12 | 12 |
| 13 class InterpolableValue { | 13 class InterpolableValue { |
| 14 public: | 14 public: |
| 15 virtual bool isNumber() const { return false; } | 15 virtual bool isNumber() const { return false; } |
| 16 virtual bool isBool() const { return false; } | 16 virtual bool isBool() const { return false; } |
| 17 virtual bool isList() const { return false; } | 17 virtual bool isList() const { return false; } |
| 18 | 18 |
| 19 virtual ~InterpolableValue() { } | 19 virtual ~InterpolableValue() { } |
| 20 virtual PassOwnPtr<InterpolableValue> clone() const = 0; | 20 virtual PassOwnPtr<InterpolableValue> clone() const = 0; |
| 21 | 21 |
| 22 private: | 22 private: |
| 23 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &t
o, const double progress) const = 0; | 23 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &t
o, const double progress) const = 0; |
| 24 | 24 |
| 25 // TODO: Replace this with Interpolation when committing Interpolation | 25 friend class Interpolation; |
| 26 // patch. Refactor InterpolableValueTest to test via Interpolation | |
| 27 // interface. | |
| 28 friend class AnimationInterpolableValueTest; | |
| 29 | 26 |
| 30 // Keep interpolate private, but allow calls within the hierarchy without | 27 // Keep interpolate private, but allow calls within the hierarchy without |
| 31 // knowledge of type. | 28 // knowledge of type. |
| 32 friend class InterpolableNumber; | 29 friend class InterpolableNumber; |
| 33 friend class InterpolableBool; | 30 friend class InterpolableBool; |
| 34 friend class InterpolableList; | 31 friend class InterpolableList; |
| 35 }; | 32 }; |
| 36 | 33 |
| 37 class InterpolableNumber : public InterpolableValue { | 34 class InterpolableNumber : public InterpolableValue { |
| 38 public: | 35 public: |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 void set(size_t position, PassOwnPtr<InterpolableValue> value) | 89 void set(size_t position, PassOwnPtr<InterpolableValue> value) |
| 93 { | 90 { |
| 94 ASSERT(position < m_size); | 91 ASSERT(position < m_size); |
| 95 m_values.get()[position] = value; | 92 m_values.get()[position] = value; |
| 96 } | 93 } |
| 97 const InterpolableValue* get(size_t position) const | 94 const InterpolableValue* get(size_t position) const |
| 98 { | 95 { |
| 99 ASSERT(position < m_size); | 96 ASSERT(position < m_size); |
| 100 return m_values.get()[position].get(); | 97 return m_values.get()[position].get(); |
| 101 } | 98 } |
| 99 size_t length() const { return m_size; } |
| 102 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return
create(*this); } | 100 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return
create(*this); } |
| 103 | 101 |
| 104 private: | 102 private: |
| 105 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o
ther, const double progress) const OVERRIDE FINAL; | 103 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o
ther, const double progress) const OVERRIDE FINAL; |
| 106 InterpolableList(size_t size) | 104 InterpolableList(size_t size) |
| 107 : m_size(size) | 105 : m_size(size) |
| 108 { | 106 { |
| 109 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[size]); | 107 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[size]); |
| 110 } | 108 } |
| 111 | 109 |
| 112 InterpolableList(const InterpolableList& other) | 110 InterpolableList(const InterpolableList& other) |
| 113 : m_size(other.m_size) | 111 : m_size(other.m_size) |
| 114 { | 112 { |
| 115 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[m_size]); | 113 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[m_size]); |
| 116 for (size_t i = 0; i < m_size; i++) | 114 for (size_t i = 0; i < m_size; i++) |
| 117 set(i, other.m_values.get()[i]->clone()); | 115 set(i, other.m_values.get()[i]->clone()); |
| 118 } | 116 } |
| 119 | 117 |
| 120 size_t m_size; | 118 size_t m_size; |
| 121 OwnPtr<OwnPtr<InterpolableValue>[]> m_values; | 119 OwnPtr<OwnPtr<InterpolableValue>[]> m_values; |
| 122 }; | 120 }; |
| 123 | 121 |
| 124 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber(
), value.isNumber()); | 122 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber(
), value.isNumber()); |
| 125 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v
alue.isBool()); | 123 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v
alue.isBool()); |
| 126 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v
alue.isList()); | 124 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v
alue.isList()); |
| 127 | 125 |
| 128 } | 126 } |
| 129 | 127 |
| 130 #endif | 128 #endif |
| OLD | NEW |