Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / views / controls / glow_hover_controller.h
1 // Copyright (c) 2012 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_CONTROLS_GLOW_HOVER_CONTROLLER_H_
6 #define UI_VIEWS_CONTROLS_GLOW_HOVER_CONTROLLER_H_
7
8 #include "ui/gfx/animation/animation_delegate.h"
9 #include "ui/gfx/animation/slide_animation.h"
10 #include "ui/views/views_export.h"
11
12 namespace gfx {
13 class Canvas;
14 class ImageSkia;
15 class Point;
16 }
17
18 namespace views {
19
20 class View;
21
22 // GlowHoverController is responsible for drawing a hover effect as is used by
23 // the tabstrip. Typical usage:
24 //   OnMouseEntered() -> invoke Show().
25 //   OnMouseMoved()   -> invoke SetLocation().
26 //   OnMouseExited()  -> invoke Hide().
27 //   OnPaint()        -> if ShouldDraw() returns true invoke Draw().
28 // Internally GlowHoverController uses an animation to animate the glow and
29 // invokes SchedulePaint() back on the View as necessary.
30 class VIEWS_EXPORT GlowHoverController : public gfx::AnimationDelegate {
31  public:
32   enum Style {
33     SUBTLE,
34     PRONOUNCED
35   };
36
37   explicit GlowHoverController(views::View* view);
38   ~GlowHoverController() override;
39
40   // Sets the AnimationContainer used by the animation.
41   void SetAnimationContainer(gfx::AnimationContainer* container);
42
43   // Sets the location of the hover, relative to the View passed to the
44   // constructor.
45   void SetLocation(const gfx::Point& location);
46
47   // Initiates showing the hover.
48   void Show(Style style);
49
50   // Hides the hover.
51   void Hide();
52
53   // Hides the hover immediately.
54   void HideImmediately();
55
56   // Returns the value of the animation.
57   double GetAnimationValue() const;
58
59   // Returns true if there is something to be drawn. Use this instead of
60   // invoking Draw() if creating |mask_image| is expensive.
61   bool ShouldDraw() const;
62
63   // If the hover is currently visible it is drawn to the supplied canvas.
64   // |mask_image| is used to determine what parts of the canvas to draw on.
65   void Draw(gfx::Canvas* canvas, const gfx::ImageSkia& mask_image) const;
66
67   // gfx::AnimationDelegate overrides:
68   void AnimationEnded(const gfx::Animation* animation) override;
69   void AnimationProgressed(const gfx::Animation* animation) override;
70
71  private:
72   // View we're drawing to.
73   views::View* view_;
74
75   // Opacity of the glow ramps up over time.
76   gfx::SlideAnimation animation_;
77
78   // Location of the glow, relative to view.
79   gfx::Point location_;
80   double opacity_scale_;
81
82   DISALLOW_COPY_AND_ASSIGN(GlowHoverController);
83 };
84
85 }  // namespace views
86
87 #endif  // UI_VIEWS_CONTROLS_GLOW_HOVER_CONTROLLER_H_