| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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_VIEWS_ANIMATION_FLOOD_FILL_INK_DROP_ANIMATION_H_ | |
| 6 #define UI_VIEWS_ANIMATION_FLOOD_FILL_INK_DROP_ANIMATION_H_ | |
| 7 | |
| 8 #include <memory> | |
| 9 #include <string> | |
| 10 | |
| 11 #include "base/macros.h" | |
| 12 #include "base/time/time.h" | |
| 13 #include "third_party/skia/include/core/SkColor.h" | |
| 14 #include "ui/compositor/layer.h" | |
| 15 #include "ui/compositor/layer_animator.h" | |
| 16 #include "ui/gfx/animation/tween.h" | |
| 17 #include "ui/gfx/geometry/point.h" | |
| 18 #include "ui/gfx/geometry/size.h" | |
| 19 #include "ui/gfx/transform.h" | |
| 20 #include "ui/views/animation/ink_drop_animation.h" | |
| 21 #include "ui/views/animation/ink_drop_painted_layer_delegates.h" | |
| 22 #include "ui/views/animation/ink_drop_state.h" | |
| 23 #include "ui/views/views_export.h" | |
| 24 | |
| 25 namespace ui { | |
| 26 class Layer; | |
| 27 } // namespace ui | |
| 28 | |
| 29 namespace views { | |
| 30 class CircleLayerDelegate; | |
| 31 | |
| 32 namespace test { | |
| 33 class FloodFillInkDropAnimationTestApi; | |
| 34 } // namespace test | |
| 35 | |
| 36 // An ink drop animation that starts as a small circle and flood fills a | |
| 37 // rectangle of the given size. The circle is clipped to the rectangles bounds. | |
| 38 // | |
| 39 // The valid InkDropState transitions are defined below: | |
| 40 // | |
| 41 // {All InkDropStates} => HIDDEN | |
| 42 // HIDDEN => ACTION_PENDING | |
| 43 // HIDDEN, ACTION_PENDING => ACTION_TRIGGERED | |
| 44 // ACTION_PENDING => ALTERNATE_ACTION_PENDING | |
| 45 // ALTERNATE_ACTION_PENDING => ALTERNATE_ACTION_TRIGGERED | |
| 46 // {All InkDropStates} => ACTIVATED | |
| 47 // {All InkDropStates} => DEACTIVATED | |
| 48 // | |
| 49 class VIEWS_EXPORT FloodFillInkDropAnimation : public InkDropAnimation { | |
| 50 public: | |
| 51 FloodFillInkDropAnimation(const gfx::Rect& clip_bounds, | |
| 52 const gfx::Point& center_point, | |
| 53 SkColor color); | |
| 54 ~FloodFillInkDropAnimation() override; | |
| 55 | |
| 56 // InkDropAnimation: | |
| 57 void SnapToActivated() override; | |
| 58 ui::Layer* GetRootLayer() override; | |
| 59 bool IsVisible() const override; | |
| 60 | |
| 61 private: | |
| 62 friend class test::FloodFillInkDropAnimationTestApi; | |
| 63 | |
| 64 // InkDropAnimation: | |
| 65 void AnimateStateChange(InkDropState old_ink_drop_state, | |
| 66 InkDropState new_ink_drop_state, | |
| 67 ui::LayerAnimationObserver* observer) override; | |
| 68 void SetStateToHidden() override; | |
| 69 void AbortAllAnimations() override; | |
| 70 | |
| 71 // Animates the |painted_layer_| to the specified |transform|. The animation | |
| 72 // will be configured with the given |duration|, |tween|, and | |
| 73 // |preemption_strategy| values. The |observer| will be added to all | |
| 74 // LayerAnimationSequences if not null. | |
| 75 void AnimateToTransform( | |
| 76 const gfx::Transform& transform, | |
| 77 base::TimeDelta duration, | |
| 78 ui::LayerAnimator::PreemptionStrategy preemption_strategy, | |
| 79 gfx::Tween::Type tween, | |
| 80 ui::LayerAnimationObserver* observer); | |
| 81 | |
| 82 // Sets the opacity of the ink drop. Note that this does not perform any | |
| 83 // animation. | |
| 84 void SetOpacity(float opacity); | |
| 85 | |
| 86 // Animates the |painted_layer_| to the specified |opacity|. The animation | |
| 87 // will be configured with the given |duration|, |tween|, and | |
| 88 // |preemption_strategy| values. The |observer| will be added to all | |
| 89 // LayerAnimationSequences if not null. | |
| 90 void AnimateToOpacity( | |
| 91 float opacity, | |
| 92 base::TimeDelta duration, | |
| 93 ui::LayerAnimator::PreemptionStrategy preemption_strategy, | |
| 94 gfx::Tween::Type tween, | |
| 95 ui::LayerAnimationObserver* observer); | |
| 96 | |
| 97 // Returns the Transform to be applied to the |painted_layer_| for the given | |
| 98 // |target_radius|. | |
| 99 gfx::Transform CalculateTransform(float target_radius) const; | |
| 100 | |
| 101 // Returns the target Transform for when the ink drop is fully shown. | |
| 102 gfx::Transform GetMaxSizeTargetTransform() const; | |
| 103 | |
| 104 // The clip bounds. | |
| 105 const gfx::Rect clip_bounds_; | |
| 106 | |
| 107 // The point where the Center of the ink drop's circle should be drawn. | |
| 108 gfx::Point center_point_; | |
| 109 | |
| 110 // The root layer that parents the animating layer. The root layer is used to | |
| 111 // manipulate opacity and clipping bounds, and it child is used to manipulate | |
| 112 // the different shape of the ink drop. | |
| 113 ui::Layer root_layer_; | |
| 114 | |
| 115 // ui::LayerDelegate to paint the |painted_layer_|. | |
| 116 CircleLayerDelegate circle_layer_delegate_; | |
| 117 | |
| 118 // Child ui::Layer of |root_layer_|. Used to manipulate the different size | |
| 119 // and shape of the ink drop. | |
| 120 ui::Layer painted_layer_; | |
| 121 | |
| 122 // The current ink drop state. | |
| 123 InkDropState ink_drop_state_; | |
| 124 | |
| 125 DISALLOW_COPY_AND_ASSIGN(FloodFillInkDropAnimation); | |
| 126 }; | |
| 127 | |
| 128 } // namespace views | |
| 129 | |
| 130 #endif // UI_VIEWS_ANIMATION_FLOOD_FILL_INK_DROP_ANIMATION_H_ | |
| OLD | NEW |