OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 } | 53 } |
54 return result; | 54 return result; |
55 } | 55 } |
56 | 56 |
57 void KeyframeEffectModelBase::setFrames(KeyframeVector& keyframes) | 57 void KeyframeEffectModelBase::setFrames(KeyframeVector& keyframes) |
58 { | 58 { |
59 // TODO(samli): Should also notify/invalidate the animation | 59 // TODO(samli): Should also notify/invalidate the animation |
60 m_keyframes = keyframes; | 60 m_keyframes = keyframes; |
61 m_keyframeGroups = nullptr; | 61 m_keyframeGroups = nullptr; |
62 m_interpolationEffect.clear(); | 62 m_interpolationEffect.clear(); |
63 m_lastFraction = std::numeric_limits<double>::quiet_NaN(); | 63 clearLastFraction(); |
64 } | 64 } |
65 | 65 |
66 bool KeyframeEffectModelBase::sample(int iteration, double fraction, double iter
ationDuration, Vector<RefPtr<Interpolation>>& result) const | 66 void KeyframeEffectModelBase::sampleImpl(int iteration, double fraction, double
iterationDuration, Vector<RefPtr<Interpolation>>& result) const |
67 { | 67 { |
68 ASSERT(iteration >= 0); | |
69 ASSERT(!isNull(fraction)); | |
70 ensureKeyframeGroups(); | 68 ensureKeyframeGroups(); |
71 ensureInterpolationEffectPopulated(); | 69 ensureInterpolationEffectPopulated(); |
72 | |
73 bool changed = iteration != m_lastIteration || fraction != m_lastFraction ||
iterationDuration != m_lastIterationDuration; | |
74 m_lastIteration = iteration; | |
75 m_lastFraction = fraction; | |
76 m_lastIterationDuration = iterationDuration; | |
77 m_interpolationEffect.getActiveInterpolations(fraction, iterationDuration, r
esult); | 70 m_interpolationEffect.getActiveInterpolations(fraction, iterationDuration, r
esult); |
78 return changed; | |
79 } | 71 } |
80 | 72 |
81 bool KeyframeEffectModelBase::snapshotNeutralCompositorKeyframes(Element& elemen
t, const ComputedStyle& oldStyle, const ComputedStyle& newStyle, const ComputedS
tyle* parentStyle) const | 73 bool KeyframeEffectModelBase::snapshotNeutralCompositorKeyframes(Element& elemen
t, const ComputedStyle& oldStyle, const ComputedStyle& newStyle, const ComputedS
tyle* parentStyle) const |
82 { | 74 { |
83 bool updated = false; | 75 bool updated = false; |
84 ensureKeyframeGroups(); | 76 ensureKeyframeGroups(); |
85 for (CSSPropertyID property : CompositorAnimations::compositableProperties)
{ | 77 for (CSSPropertyID property : CompositorAnimations::compositableProperties)
{ |
86 if (CSSPropertyEquality::propertiesEqual(property, oldStyle, newStyle)) | 78 if (CSSPropertyEquality::propertiesEqual(property, oldStyle, newStyle)) |
87 continue; | 79 continue; |
88 PropertySpecificKeyframeGroup* keyframeGroup = m_keyframeGroups->get(Pro
pertyHandle(property)); | 80 PropertySpecificKeyframeGroup* keyframeGroup = m_keyframeGroups->get(Pro
pertyHandle(property)); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 for (size_t j = 1; j < i - lastIndex; ++j) | 137 for (size_t j = 1; j < i - lastIndex; ++j) |
146 result[lastIndex + j]->setOffset(lastOffset + (offset - lastOffs
et) * j / (i - lastIndex)); | 138 result[lastIndex + j]->setOffset(lastOffset + (offset - lastOffs
et) * j / (i - lastIndex)); |
147 lastIndex = i; | 139 lastIndex = i; |
148 lastOffset = offset; | 140 lastOffset = offset; |
149 } | 141 } |
150 } | 142 } |
151 | 143 |
152 return result; | 144 return result; |
153 } | 145 } |
154 | 146 |
155 bool KeyframeEffectModelBase::isTransformRelatedEffect() const | |
156 { | |
157 return affects(PropertyHandle(CSSPropertyTransform)) | |
158 || affects(PropertyHandle(CSSPropertyRotate)) | |
159 || affects(PropertyHandle(CSSPropertyScale)) | |
160 || affects(PropertyHandle(CSSPropertyTranslate)); | |
161 } | |
162 | |
163 void KeyframeEffectModelBase::ensureKeyframeGroups() const | 147 void KeyframeEffectModelBase::ensureKeyframeGroups() const |
164 { | 148 { |
165 if (m_keyframeGroups) | 149 if (m_keyframeGroups) |
166 return; | 150 return; |
167 | 151 |
168 m_keyframeGroups = wrapUnique(new KeyframeGroupMap); | 152 m_keyframeGroups = wrapUnique(new KeyframeGroupMap); |
169 RefPtr<TimingFunction> zeroOffsetEasing = m_defaultKeyframeEasing; | 153 RefPtr<TimingFunction> zeroOffsetEasing = m_defaultKeyframeEasing; |
170 for (const auto& keyframe : normalizedKeyframes(getFrames())) { | 154 for (const auto& keyframe : normalizedKeyframes(getFrames())) { |
171 if (keyframe->offset() == 0) | 155 if (keyframe->offset() == 0) |
172 zeroOffsetEasing = &keyframe->easing(); | 156 zeroOffsetEasing = &keyframe->easing(); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 } | 275 } |
292 if (m_keyframes.last()->offset() != 1.0) { | 276 if (m_keyframes.last()->offset() != 1.0) { |
293 appendKeyframe(m_keyframes.last()->neutralKeyframe(1, nullptr)); | 277 appendKeyframe(m_keyframes.last()->neutralKeyframe(1, nullptr)); |
294 addedSyntheticKeyframe = true; | 278 addedSyntheticKeyframe = true; |
295 } | 279 } |
296 | 280 |
297 return addedSyntheticKeyframe; | 281 return addedSyntheticKeyframe; |
298 } | 282 } |
299 | 283 |
300 } // namespace blink | 284 } // namespace blink |
OLD | NEW |