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

Side by Side Diff: app/slide_animation.cc

Issue 1961001: Refactors animation to allow for cleaner subclassing. I'm doing this (Closed)
Patch Set: Incorporated review feedback Created 10 years, 7 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 | « app/slide_animation.h ('k') | app/test_animation_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #include "app/slide_animation.h" 5 #include "app/slide_animation.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 // How many frames per second to target. 9 // How many frames per second to target.
10 static const int kDefaultFramerateHz = 50; 10 static const int kDefaultFramerateHz = 50;
11 11
12 // How long animations should take by default. 12 // How long animations should take by default.
13 static const int kDefaultDurationMs = 120; 13 static const int kDefaultDurationMs = 120;
14 14
15 SlideAnimation::SlideAnimation(AnimationDelegate* target) 15 SlideAnimation::SlideAnimation(AnimationDelegate* target)
16 : Animation(kDefaultFramerateHz, target), 16 : LinearAnimation(kDefaultFramerateHz, target),
17 target_(target), 17 target_(target),
18 tween_type_(EASE_OUT), 18 tween_type_(Tween::EASE_OUT),
19 showing_(false), 19 showing_(false),
20 value_start_(0), 20 value_start_(0),
21 value_end_(0), 21 value_end_(0),
22 value_current_(0), 22 value_current_(0),
23 slide_duration_(kDefaultDurationMs) { 23 slide_duration_(kDefaultDurationMs) {
24 } 24 }
25 25
26 SlideAnimation::~SlideAnimation() { 26 SlideAnimation::~SlideAnimation() {
27 } 27 }
28 28
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 77
78 // This will also reset the currently-occuring animation. 78 // This will also reset the currently-occuring animation.
79 SetDuration(static_cast<int>(slide_duration_ * value_current_)); 79 SetDuration(static_cast<int>(slide_duration_ * value_current_));
80 Start(); 80 Start();
81 } 81 }
82 82
83 void SlideAnimation::AnimateToState(double state) { 83 void SlideAnimation::AnimateToState(double state) {
84 if (state > 1.0) 84 if (state > 1.0)
85 state = 1.0; 85 state = 1.0;
86 86
87 // Make our animation ease-out. 87 state = Tween::CalculateValue(tween_type_, state);
88 switch (tween_type_) {
89 case EASE_IN:
90 state = pow(state, 2);
91 break;
92 case EASE_IN_OUT:
93 if (state < 0.5)
94 state = pow(state * 2, 2) / 2.0;
95 else
96 state = 1.0 - (pow((state - 1.0) * 2, 2) / 2.0);
97 break;
98 case FAST_IN_OUT:
99 state = (pow(state - 0.5, 3) + 0.125) / 0.25;
100 break;
101 case NONE:
102 // state remains linear.
103 break;
104 case EASE_OUT_SNAP:
105 state = 0.95 * (1.0 - pow(1.0 - state, 2));
106 break;
107 case EASE_OUT:
108 default:
109 state = 1.0 - pow(1.0 - state, 2);
110 break;
111 }
112 88
113 value_current_ = value_start_ + (value_end_ - value_start_) * state; 89 value_current_ = value_start_ + (value_end_ - value_start_) * state;
114 90
115 // Implement snapping. 91 // Implement snapping.
116 if (tween_type_ == EASE_OUT_SNAP && fabs(value_current_ - value_end_) <= 0.06) 92 if (tween_type_ == Tween::EASE_OUT_SNAP &&
93 fabs(value_current_ - value_end_) <= 0.06)
117 value_current_ = value_end_; 94 value_current_ = value_end_;
118 95
119 // Correct for any overshoot (while state may be capped at 1.0, let's not 96 // Correct for any overshoot (while state may be capped at 1.0, let's not
120 // take any rounding error chances. 97 // take any rounding error chances.
121 if ((value_end_ >= value_start_ && value_current_ > value_end_) || 98 if ((value_end_ >= value_start_ && value_current_ > value_end_) ||
122 (value_end_ < value_start_ && value_current_ < value_end_)) { 99 (value_end_ < value_start_ && value_current_ < value_end_)) {
123 value_current_ = value_end_; 100 value_current_ = value_end_;
124 } 101 }
125 } 102 }
OLDNEW
« no previous file with comments | « app/slide_animation.h ('k') | app/test_animation_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698