| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) | 2 Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
| 3 | 3 |
| 4 This library is free software; you can redistribute it and/or | 4 This library is free software; you can redistribute it and/or |
| 5 modify it under the terms of the GNU Library General Public | 5 modify it under the terms of the GNU Library General Public |
| 6 License as published by the Free Software Foundation; either | 6 License as published by the Free Software Foundation; either |
| 7 version 2 of the License, or (at your option) any later version. | 7 version 2 of the License, or (at your option) any later version. |
| 8 | 8 |
| 9 This library is distributed in the hope that it will be useful, | 9 This library is distributed in the hope that it will be useful, |
| 10 but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 if (progress > 0.5) | 66 if (progress > 0.5) |
| 67 result.operations().append(toOp ? toOp : identityOp); | 67 result.operations().append(toOp ? toOp : identityOp); |
| 68 else | 68 else |
| 69 result.operations().append(fromOp ? fromOp : identityOp); | 69 result.operations().append(fromOp ? fromOp : identityOp); |
| 70 } | 70 } |
| 71 } | 71 } |
| 72 | 72 |
| 73 return result; | 73 return result; |
| 74 } | 74 } |
| 75 | 75 |
| 76 static bool shouldReverseAnimationValue(Animation::AnimationDirection direction,
int loopCount) | 76 static bool shouldReverseAnimationValue(PrimitiveAnimation::AnimationDirection d
irection, int loopCount) |
| 77 { | 77 { |
| 78 if (((direction == Animation::AnimationDirectionAlternate) && (loopCount & 1
)) | 78 if (((direction == PrimitiveAnimation::AnimationDirectionAlternate) && (loop
Count & 1)) |
| 79 || ((direction == Animation::AnimationDirectionAlternateReverse) && !(lo
opCount & 1)) | 79 || ((direction == PrimitiveAnimation::AnimationDirectionAlternateReverse
) && !(loopCount & 1)) |
| 80 || direction == Animation::AnimationDirectionReverse) | 80 || direction == PrimitiveAnimation::AnimationDirectionReverse) |
| 81 return true; | 81 return true; |
| 82 return false; | 82 return false; |
| 83 } | 83 } |
| 84 | 84 |
| 85 static double normalizedAnimationValue(double runningTime, double duration, Anim
ation::AnimationDirection direction, double iterationCount) | 85 static double normalizedAnimationValue(double runningTime, double duration, Prim
itiveAnimation::AnimationDirection direction, double iterationCount) |
| 86 { | 86 { |
| 87 if (!duration) | 87 if (!duration) |
| 88 return 0; | 88 return 0; |
| 89 | 89 |
| 90 const int loopCount = runningTime / duration; | 90 const int loopCount = runningTime / duration; |
| 91 const double lastFullLoop = duration * double(loopCount); | 91 const double lastFullLoop = duration * double(loopCount); |
| 92 const double remainder = runningTime - lastFullLoop; | 92 const double remainder = runningTime - lastFullLoop; |
| 93 // Ignore remainder when we've reached the end of animation. | 93 // Ignore remainder when we've reached the end of animation. |
| 94 const double normalized = (loopCount == iterationCount) ? 1.0 : (remainder /
duration); | 94 const double normalized = (loopCount == iterationCount) ? 1.0 : (remainder /
duration); |
| 95 | 95 |
| 96 return shouldReverseAnimationValue(direction, loopCount) ? 1 - normalized :
normalized; | 96 return shouldReverseAnimationValue(direction, loopCount) ? 1 - normalized :
normalized; |
| 97 } | 97 } |
| 98 | 98 |
| 99 static double normalizedAnimationValueForFillsForwards(double iterationCount, An
imation::AnimationDirection direction) | 99 static double normalizedAnimationValueForFillsForwards(double iterationCount, Pr
imitiveAnimation::AnimationDirection direction) |
| 100 { | 100 { |
| 101 if (direction == Animation::AnimationDirectionNormal) | 101 if (direction == PrimitiveAnimation::AnimationDirectionNormal) |
| 102 return 1; | 102 return 1; |
| 103 if (direction == Animation::AnimationDirectionReverse) | 103 if (direction == PrimitiveAnimation::AnimationDirectionReverse) |
| 104 return 0; | 104 return 0; |
| 105 return shouldReverseAnimationValue(direction, iterationCount) ? 1 : 0; | 105 return shouldReverseAnimationValue(direction, iterationCount) ? 1 : 0; |
| 106 } | 106 } |
| 107 | 107 |
| 108 static float applyOpacityAnimation(float fromOpacity, float toOpacity, double pr
ogress) | 108 static float applyOpacityAnimation(float fromOpacity, float toOpacity, double pr
ogress) |
| 109 { | 109 { |
| 110 // Optimization: special case the edge values (0 and 1). | 110 // Optimization: special case the edge values (0 and 1). |
| 111 if (progress == 1.0) | 111 if (progress == 1.0) |
| 112 return toOpacity; | 112 return toOpacity; |
| 113 | 113 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 return matrix; | 193 return matrix; |
| 194 } | 194 } |
| 195 | 195 |
| 196 // Normal animation with a matching operation list. | 196 // Normal animation with a matching operation list. |
| 197 TransformOperations blended(*to); | 197 TransformOperations blended(*to); |
| 198 for (size_t i = 0; i < blended.operations().size(); ++i) | 198 for (size_t i = 0; i < blended.operations().size(); ++i) |
| 199 blended.operations()[i]->blend(from->at(i), progress, !from->at(i))->app
ly(matrix, boxSize); | 199 blended.operations()[i]->blend(from->at(i), progress, !from->at(i))->app
ly(matrix, boxSize); |
| 200 return matrix; | 200 return matrix; |
| 201 } | 201 } |
| 202 | 202 |
| 203 static const TimingFunction* timingFunctionForAnimationValue(const AnimationValu
e* animValue, const Animation* anim) | 203 static const TimingFunction* timingFunctionForAnimationValue(const AnimationValu
e* animValue, const PrimitiveAnimation* anim) |
| 204 { | 204 { |
| 205 if (animValue->timingFunction()) | 205 if (animValue->timingFunction()) |
| 206 return animValue->timingFunction(); | 206 return animValue->timingFunction(); |
| 207 if (anim->timingFunction()) | 207 if (anim->timingFunction()) |
| 208 return anim->timingFunction().get(); | 208 return anim->timingFunction().get(); |
| 209 | 209 |
| 210 return CubicBezierTimingFunction::defaultTimingFunction(); | 210 return CubicBezierTimingFunction::defaultTimingFunction(); |
| 211 } | 211 } |
| 212 | 212 |
| 213 GraphicsLayerAnimation::GraphicsLayerAnimation(const String& name, const Keyfram
eValueList& keyframes, const IntSize& boxSize, const Animation* animation, doubl
e startTime, bool listsMatch) | 213 GraphicsLayerAnimation::GraphicsLayerAnimation(const String& name, const Keyfram
eValueList& keyframes, const IntSize& boxSize, const PrimitiveAnimation* animati
on, double startTime, bool listsMatch) |
| 214 : m_keyframes(keyframes) | 214 : m_keyframes(keyframes) |
| 215 , m_boxSize(boxSize) | 215 , m_boxSize(boxSize) |
| 216 , m_animation(Animation::create(animation)) | 216 , m_animation(PrimitiveAnimation::create(animation)) |
| 217 , m_name(name) | 217 , m_name(name) |
| 218 , m_listsMatch(listsMatch) | 218 , m_listsMatch(listsMatch) |
| 219 , m_startTime(startTime) | 219 , m_startTime(startTime) |
| 220 , m_pauseTime(0) | 220 , m_pauseTime(0) |
| 221 , m_totalRunningTime(0) | 221 , m_totalRunningTime(0) |
| 222 , m_lastRefreshedTime(m_startTime) | 222 , m_lastRefreshedTime(m_startTime) |
| 223 , m_state(PlayingState) | 223 , m_state(PlayingState) |
| 224 { | 224 { |
| 225 } | 225 } |
| 226 | 226 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 } | 269 } |
| 270 | 270 |
| 271 void GraphicsLayerAnimation::apply(Client* client) | 271 void GraphicsLayerAnimation::apply(Client* client) |
| 272 { | 272 { |
| 273 if (!isActive()) | 273 if (!isActive()) |
| 274 return; | 274 return; |
| 275 | 275 |
| 276 double totalRunningTime = computeTotalRunningTime(); | 276 double totalRunningTime = computeTotalRunningTime(); |
| 277 double normalizedValue = normalizedAnimationValue(totalRunningTime, m_animat
ion->duration(), m_animation->direction(), m_animation->iterationCount()); | 277 double normalizedValue = normalizedAnimationValue(totalRunningTime, m_animat
ion->duration(), m_animation->direction(), m_animation->iterationCount()); |
| 278 | 278 |
| 279 if (m_animation->iterationCount() != Animation::IterationCountInfinite && to
talRunningTime >= m_animation->duration() * m_animation->iterationCount()) { | 279 if (m_animation->iterationCount() != PrimitiveAnimation::IterationCountInfin
ite && totalRunningTime >= m_animation->duration() * m_animation->iterationCount
()) { |
| 280 setState(StoppedState); | 280 setState(StoppedState); |
| 281 if (m_animation->fillsForwards()) | 281 if (m_animation->fillsForwards()) |
| 282 normalizedValue = normalizedAnimationValueForFillsForwards(m_animati
on->iterationCount(), m_animation->direction()); | 282 normalizedValue = normalizedAnimationValueForFillsForwards(m_animati
on->iterationCount(), m_animation->direction()); |
| 283 } | 283 } |
| 284 | 284 |
| 285 if (!normalizedValue) { | 285 if (!normalizedValue) { |
| 286 applyInternal(client, m_keyframes.at(0), m_keyframes.at(1), 0); | 286 applyInternal(client, m_keyframes.at(0), m_keyframes.at(1), 0); |
| 287 return; | 287 return; |
| 288 } | 288 } |
| 289 | 289 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 GraphicsLayerAnimations GraphicsLayerAnimations::getActiveAnimations() const | 389 GraphicsLayerAnimations GraphicsLayerAnimations::getActiveAnimations() const |
| 390 { | 390 { |
| 391 GraphicsLayerAnimations active; | 391 GraphicsLayerAnimations active; |
| 392 for (size_t i = 0; i < m_animations.size(); ++i) { | 392 for (size_t i = 0; i < m_animations.size(); ++i) { |
| 393 if (m_animations[i].isActive()) | 393 if (m_animations[i].isActive()) |
| 394 active.add(m_animations[i]); | 394 active.add(m_animations[i]); |
| 395 } | 395 } |
| 396 return active; | 396 return active; |
| 397 } | 397 } |
| 398 } | 398 } |
| OLD | NEW |