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

Unified Diff: ui/views/animation/ink_drop_animation.h

Issue 1298513003: Implemented prototype for new ink drop specs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed pkasting@'s nits from patch set 9. Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: ui/views/animation/ink_drop_animation.h
diff --git a/ui/views/animation/ink_drop_animation.h b/ui/views/animation/ink_drop_animation.h
index 9c50f3a47d98d9d734fe9f07b4e6b17cf1e30d14..7347df98f9096cd55707c61f909ebdb44b2bfe98 100644
--- a/ui/views/animation/ink_drop_animation.h
+++ b/ui/views/animation/ink_drop_animation.h
@@ -8,90 +8,140 @@
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
-#include "ui/gfx/geometry/rect.h"
+#include "ui/compositor/layer_animator.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/geometry/size_f.h"
+#include "ui/gfx/transform.h"
#include "ui/views/animation/ink_drop_state.h"
#include "ui/views/views_export.h"
namespace ui {
class Layer;
+class LayerDelegate;
} // namespace ui
namespace views {
-class AppearAnimationObserver;
-class InkDropDelegate;
+class CircleLayerDelegate;
+class RectangleLayerDelegate;
-// An ink drop animation that animates between the different InkDropStates.
+namespace test {
+class InkDropAnimationTestApi;
+} // namespace test
+
+// An ink drop animation that smoothly animates between a circle and a rounded
+// rectangle of different sizes for each of the different InkDropStates. The
+// final frame for each InkDropState will be bounded by either a |large_size_|
+// rectangle or a |small_size_| rectangle.
class VIEWS_EXPORT InkDropAnimation {
public:
- InkDropAnimation();
+ InkDropAnimation(const gfx::Size& large_size,
+ int large_corner_radius,
+ const gfx::Size& small_size,
+ int small_corner_radius);
~InkDropAnimation();
- // The root that can be added in to a Layer tree.
+ // The root Layer that can be added in to a Layer tree.
ui::Layer* root_layer() { return root_layer_.get(); }
- // Animates from the current |state_| to |state|.
- void AnimateToState(InkDropState state);
-
- // Sets the size of the ink drop.
- void SetInkDropSize(const gfx::Size& size);
+ InkDropState ink_drop_state() const { return ink_drop_state_; }
- // Returns the ink drop bounds.
- gfx::Rect GetInkDropBounds() const;
+ // Animates from the current |ink_drop_state_| to a new |ink_drop_state|. It
+ // is possible to animate from any |ink_drop_state_| to any new
+ // |ink_drop_state|. Note that some state transitions will also perform an
+ // implicit transition to the another state. e.g. AnimateToState(QUICK_ACTION)
+ // will implicitly transition to the HIDDEN state.
+ void AnimateToState(InkDropState ink_drop_state);
- // Sets the bounds for the ink drop. |bounds| are in the coordinate space of
- // the parent ui::Layer that the ink drop layer is added to.
- void SetInkDropBounds(const gfx::Rect& bounds);
+ // Sets the |center_point| of the ink drop layer relative to its parent Layer.
+ void SetCenterPoint(const gfx::Point& center_point);
private:
- // Starts the animation of a touch event.
- void AnimateTapDown();
-
- // Schedules the hide animation of |ink_drop_layer_| for once its current
- // animation has completed. If |ink_drop_layer_| is not animating, the hide
- // animation begins immediately.
- void AnimateHide();
-
- // Starts the animation of a long press, and cancels hiding |ink_drop_layer_|
- // until the long press has completed.
- void AnimateLongPress();
-
- // Starts the showing animation on |layer|, with a |duration| in milliseconds.
- void AnimateShow(ui::Layer* layer,
- AppearAnimationObserver* observer,
- base::TimeDelta duration);
-
- // Sets the bounds for |layer|.
- void SetLayerBounds(ui::Layer* layer);
-
- // Initializes |layer|'s properties.
- void SetupAnimationLayer(ui::Layer* layer, InkDropDelegate* delegate);
-
- // The root layer that parents the animating layers.
+ friend class test::InkDropAnimationTestApi;
+
+ // Enumeration of the different shapes that compose the ink drop.
+ enum PaintedShape {
+ TOP_LEFT_CIRCLE,
sadrul 2015/09/14 20:05:40 = 0
bruthig 2015/09/15 19:47:09 Done.
+ TOP_RIGHT_CIRCLE,
+ BOTTOM_RIGHT_CIRCLE,
+ BOTTOM_LEFT_CIRCLE,
+ HORIZONTAL_RECT,
+ VERTICAL_RECT,
+ // The total number of shapes, not an actual shape.
+ PAINTED_SHAPE_COUNT
+ };
+
+ // Type that contains a gfx::Tansform for each of the layers required by the
+ // ink drop.
+ typedef gfx::Transform InkDropTransforms[PAINTED_SHAPE_COUNT];
+
+ // Animates all of the painted shape layers to the specified |transforms| and
+ // |opacity|.
+ void AnimateToTransforms(
+ InkDropTransforms transforms,
sadrul 2015/09/14 20:05:40 const
bruthig 2015/09/15 19:47:09 Done.
+ float opacity,
+ base::TimeDelta duration,
+ ui::LayerAnimator::PreemptionStrategy preemption_strategy);
+
+ // Resets the Transforms on all the owned Layers to a minium size.
tdanderson 2015/09/10 15:37:51 nit: minium -> minimum
bruthig 2015/09/15 19:47:09 Done.
+ void ResetTransformsToMinSize();
+
+ // Sets the |transforms| on all of the shape layers. Note that this does not
+ // perform any animation.
+ void SetTransforms(InkDropTransforms transforms);
sadrul 2015/09/14 20:05:40 const
bruthig 2015/09/15 19:47:09 Done.
+
+ // Sets the opacity of the ink drop.
+ void SetOpacity(float opacity);
+
+ // Updates all of the Transforms in |transforms| for a circle of the given
+ // |size|.
+ void CalculateCircleTransforms(const gfx::SizeF size,
sadrul 2015/09/14 20:05:40 const &
bruthig 2015/09/15 19:47:09 Done.
+ InkDropTransforms transforms) const;
sadrul 2015/09/14 20:05:40 const
bruthig 2015/09/15 19:47:09 |transforms| is an output parameter.
+
+ // Updates all of the Transforms in |transforms| for a rounded rectangle of
+ // the given |size| and |corner_radius|.
+ void CalculateRectTransforms(const gfx::SizeF size,
sadrul 2015/09/14 20:05:40 const &
bruthig 2015/09/15 19:47:09 Done.
+ float corner_radius,
+ InkDropTransforms transforms) const;
sadrul 2015/09/14 20:05:41 const
bruthig 2015/09/15 19:47:09 |transforms| is an output parameter.
+
+ // Updates all of the Transforms in |transforms| to the current target
+ // Transforms of the Layers.
+ void GetCurrentTansforms(InkDropTransforms transforms) const;
sadrul 2015/09/14 20:05:40 *Transforms InkDropTransforms* since out-param.
bruthig 2015/09/15 19:47:09 Done.
+
+ // Adds and configures a new |painted_shape| layer to |painted_layers_|.
+ void AddPaintLayer(PaintedShape painted_shape);
+
+ // Maximum size that an ink drop will be drawn to for any InkDropState whose
+ // final frame should be large.
+ gfx::Size large_size_;
+
+ // Corner radius used to draw the rounded rectangles corner for any
+ // InkDropState whose final frame should be large.
+ int large_corner_radius_;
+
+ // Maximum size that an ink drop will be drawn to for any InkDropState whose
+ // final frame should be small.
+ gfx::Size small_size_;
+
+ // Corner radius used to draw the rounded rectangles corner for any
+ // InkDropState whose final frame should be small.
+ int small_corner_radius_;
+
+ // ui::LayerDelegate to paint circles for all the circle layers.
+ scoped_ptr<CircleLayerDelegate> circle_layer_delegate_;
+
+ // ui::LayerDelegate to paint rectangles for all the rectangle layers.
+ scoped_ptr<RectangleLayerDelegate> rect_layer_delegate_;
+
+ // The root layer that parents the animating layers. The root layer is used to
+ // manipulate opacity and location, and its children are used to manipulate
+ // the different painted shapes that compose the ink drop.
scoped_ptr<ui::Layer> root_layer_;
- // The layer used for animating a user touch.
- scoped_ptr<ui::Layer> ink_drop_layer_;
-
- // ui::LayerDelegate responsible for painting to |ink_drop_layer_|.
- scoped_ptr<InkDropDelegate> ink_drop_delegate_;
-
- // ui::ImplicitAnimationObserver which observes |ink_drop_layer_| and can be
- // used to automatically trigger a hide animation upon completion.
- scoped_ptr<AppearAnimationObserver> appear_animation_observer_;
-
- // The layer used for animating a long press.
- scoped_ptr<ui::Layer> long_press_layer_;
-
- // ui::LayerDelegate responsible for painting to |long_press_layer_|.
- scoped_ptr<InkDropDelegate> long_press_delegate_;
-
- // ui::ImplicitAnimationObserver which observers |long_press_layer_| and can
- // be used to automatically trigger a hide animation upon completion.
- scoped_ptr<AppearAnimationObserver> long_press_animation_observer_;
+ // ui::Layers for all of the painted shape layers that compose the ink drop.
+ scoped_ptr<ui::Layer> painted_layers_[PAINTED_SHAPE_COUNT];
- // The bounds of the ink drop layers. Defined in the coordinate space of the
- // parent ui::Layer that the ink drop layers were added to.
- gfx::Rect ink_drop_bounds_;
+ // The current ink drop state.
+ InkDropState ink_drop_state_;
DISALLOW_COPY_AND_ASSIGN(InkDropAnimation);
};

Powered by Google App Engine
This is Rietveld 408576698