| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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 UI_BASE_ANIMATION_MULTI_ANIMATION_H_ | |
| 6 #define UI_BASE_ANIMATION_MULTI_ANIMATION_H_ | |
| 7 | |
| 8 #include <vector> | |
| 9 | |
| 10 #include "ui/base/animation/animation.h" | |
| 11 #include "ui/base/animation/tween.h" | |
| 12 | |
| 13 namespace ui { | |
| 14 | |
| 15 // MultiAnimation is an animation that consists of a number of sub animations. | |
| 16 // To create a MultiAnimation pass in the parts, invoke Start() and the delegate | |
| 17 // is notified as the animation progresses. By default MultiAnimation runs until | |
| 18 // Stop is invoked, see |set_continuous()| for details. | |
| 19 class UI_EXPORT MultiAnimation : public Animation { | |
| 20 public: | |
| 21 // Defines part of the animation. Each part consists of the following: | |
| 22 // | |
| 23 // time_ms: the time of the part. | |
| 24 // start_time_ms: the amount of time to offset this part by when calculating | |
| 25 // the percented completed. | |
| 26 // end_time_ms: the end time used to calculate the percentange completed. | |
| 27 // | |
| 28 // In most cases |start_time_ms| = 0 and |end_time_ms| = |time_ms|. But you | |
| 29 // can adjust the start/end for different effects. For example, to run a part | |
| 30 // for 200ms with a % between .25 and .75 use the following three values: 200, | |
| 31 // 100, 400. | |
| 32 struct Part { | |
| 33 Part() : time_ms(0), start_time_ms(0), end_time_ms(0), type(Tween::ZERO) {} | |
| 34 Part(int time_ms, Tween::Type type) | |
| 35 : time_ms(time_ms), | |
| 36 start_time_ms(0), | |
| 37 end_time_ms(time_ms), | |
| 38 type(type) {} | |
| 39 | |
| 40 int time_ms; | |
| 41 int start_time_ms; | |
| 42 int end_time_ms; | |
| 43 Tween::Type type; | |
| 44 }; | |
| 45 | |
| 46 typedef std::vector<Part> Parts; | |
| 47 | |
| 48 MultiAnimation(const Parts& parts, base::TimeDelta timer_interval); | |
| 49 virtual ~MultiAnimation(); | |
| 50 | |
| 51 // Default interval. | |
| 52 static base::TimeDelta GetDefaultTimerInterval(); | |
| 53 | |
| 54 // Sets whether the animation continues after it reaches the end. If true, the | |
| 55 // animation runs until explicitly stopped. The default is true. | |
| 56 void set_continuous(bool continuous) { continuous_ = continuous; } | |
| 57 | |
| 58 // Returns the current value. The current value for a MultiAnimation is | |
| 59 // determined from the tween type of the current part. | |
| 60 virtual double GetCurrentValue() const OVERRIDE; | |
| 61 | |
| 62 // Returns the index of the current part. | |
| 63 size_t current_part_index() const { return current_part_index_; } | |
| 64 | |
| 65 protected: | |
| 66 // Animation overrides. | |
| 67 virtual void Step(base::TimeTicks time_now) OVERRIDE; | |
| 68 virtual void SetStartTime(base::TimeTicks start_time) OVERRIDE; | |
| 69 | |
| 70 private: | |
| 71 // Returns the part containing the specified time. |time_ms| is reset to be | |
| 72 // relative to the part containing the time and |part_index| the index of the | |
| 73 // part. | |
| 74 const Part& GetPart(int* time_ms, size_t* part_index); | |
| 75 | |
| 76 // The parts that make up the animation. | |
| 77 const Parts parts_; | |
| 78 | |
| 79 // Total time of all the parts. | |
| 80 const int cycle_time_ms_; | |
| 81 | |
| 82 // Current value for the animation. | |
| 83 double current_value_; | |
| 84 | |
| 85 // Index of the current part. | |
| 86 size_t current_part_index_; | |
| 87 | |
| 88 // See description above setter. | |
| 89 bool continuous_; | |
| 90 | |
| 91 DISALLOW_COPY_AND_ASSIGN(MultiAnimation); | |
| 92 }; | |
| 93 | |
| 94 } // namespace ui | |
| 95 | |
| 96 #endif // UI_BASE_ANIMATION_MULTI_ANIMATION_H_ | |
| OLD | NEW |