- add sources.
[platform/framework/web/crosswalk.git] / src / ui / views / corewm / shadow.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_COREWM_SHADOW_H_
6 #define UI_VIEWS_COREWM_SHADOW_H_
7
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "ui/compositor/layer_animation_observer.h"
11 #include "ui/gfx/rect.h"
12 #include "ui/views/views_export.h"
13
14 namespace ui {
15 class Layer;
16 }  // namespace ui
17
18 namespace views {
19 namespace corewm {
20
21 class ImageGrid;
22
23 // Simple class that draws a drop shadow around content at given bounds.
24 class VIEWS_EXPORT Shadow : public ui::ImplicitAnimationObserver {
25  public:
26   enum Style {
27     // Active windows have more opaque shadows, shifted down to make the window
28     // appear "higher".
29     STYLE_ACTIVE,
30
31     // Inactive windows have less opaque shadows.
32     STYLE_INACTIVE,
33
34     // Small windows like tooltips and context menus have lighter, smaller
35     // shadows.
36     STYLE_SMALL,
37   };
38
39   Shadow();
40   virtual ~Shadow();
41
42   void Init(Style style);
43
44   // Returns |image_grid_|'s ui::Layer.  This is exposed so it can be added to
45   // the same layer as the content and stacked below it.  SetContentBounds()
46   // should be used to adjust the shadow's size and position (rather than
47   // applying transformations to this layer).
48   ui::Layer* layer() const;
49
50   const gfx::Rect& content_bounds() const { return content_bounds_; }
51   Style style() const { return style_; }
52
53   // Moves and resizes |image_grid_| to frame |content_bounds|.
54   void SetContentBounds(const gfx::Rect& content_bounds);
55
56   // Sets the shadow's style, animating opacity as necessary.
57   void SetStyle(Style style);
58
59   // ui::ImplicitAnimationObserver overrides:
60   virtual void OnImplicitAnimationsCompleted() OVERRIDE;
61
62  private:
63   // Updates the |image_grid_| images to the current |style_|.
64   void UpdateImagesForStyle();
65
66   // Updates the |image_grid_| bounds based on its image sizes and the
67   // current |content_bounds_|.
68   void UpdateImageGridBounds();
69
70   // The current style, set when the transition animation starts.
71   Style style_;
72
73   scoped_ptr<ImageGrid> image_grid_;
74
75   // Bounds of the content that the shadow encloses.
76   gfx::Rect content_bounds_;
77
78   // The interior inset of the shadow images. The content bounds of the image
79   // grid should be set to |content_bounds_| inset by this amount.
80   int interior_inset_;
81
82   DISALLOW_COPY_AND_ASSIGN(Shadow);
83 };
84
85 }  // namespace corewm
86 }  // namespace views
87
88 #endif  // UI_VIEWS_COREWM_SHADOW_H_