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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/common/content_settings_types.h"
10 #include "ui/gfx/animation/animation_delegate.h"
11 #include "ui/gfx/animation/slide_animation.h"
12 #include "ui/views/painter.h"
13 #include "ui/views/view.h"
14 #include "ui/views/widget/widget_observer.h"
16 class ContentSettingImageModel
;
17 class LocationBarView
;
32 // The ContentSettingImageView displays an icon and optional text label for
33 // various content settings affordances in the location bar (i.e. plugin
34 // blocking, geolocation).
35 class ContentSettingImageView
: public gfx::AnimationDelegate
,
37 public views::WidgetObserver
{
39 ContentSettingImageView(ContentSettingsType content_type
,
40 LocationBarView
* parent
,
41 const gfx::FontList
& font_list
,
43 SkColor parent_background_color
);
44 virtual ~ContentSettingImageView();
46 // Updates the decoration from the shown WebContents.
47 void Update(content::WebContents
* web_contents
);
50 // Number of milliseconds spent animating open; also the time spent animating
52 static const int kOpenTimeMS
;
54 // The total animation time, including open and close as well as an
55 // intervening "stay open" period.
56 static const int kAnimationDurationMS
;
58 // Amount of padding at the edges of the bubble. If |by_icon| is true, this
59 // is the padding next to the icon; otherwise it's the padding next to the
60 // label. (We increase padding next to the label by the amount of padding
61 // "built in" to the icon in order to make the bubble appear to have
62 // symmetrical padding.)
63 static int GetBubbleOuterPadding(bool by_icon
);
65 // gfx::AnimationDelegate:
66 virtual void AnimationEnded(const gfx::Animation
* animation
) OVERRIDE
;
67 virtual void AnimationProgressed(const gfx::Animation
* animation
) OVERRIDE
;
68 virtual void AnimationCanceled(const gfx::Animation
* animation
) OVERRIDE
;
71 virtual gfx::Size
GetPreferredSize() const OVERRIDE
;
72 virtual void Layout() OVERRIDE
;
73 virtual bool OnMousePressed(const ui::MouseEvent
& event
) OVERRIDE
;
74 virtual void OnMouseReleased(const ui::MouseEvent
& event
) OVERRIDE
;
75 virtual void OnGestureEvent(ui::GestureEvent
* event
) OVERRIDE
;
76 virtual void OnPaintBackground(gfx::Canvas
* canvas
) OVERRIDE
;
78 // views::WidgetObserver:
79 virtual void OnWidgetDestroying(views::Widget
* widget
) OVERRIDE
;
81 bool background_showing() const {
82 return slide_animator_
.is_animating() || pause_animation_
;
85 int GetTotalSpacingWhileAnimating() const;
88 LocationBarView
* parent_
; // Weak, owns us.
89 scoped_ptr
<ContentSettingImageModel
> content_setting_image_model_
;
90 scoped_ptr
<views::Painter
> background_painter_
;
91 views::ImageView
* icon_
;
92 views::Label
* text_label_
;
93 gfx::SlideAnimation slide_animator_
;
94 bool pause_animation_
;
95 double pause_animation_state_
;
96 views::Widget
* bubble_widget_
;
98 DISALLOW_COPY_AND_ASSIGN(ContentSettingImageView
);
101 #endif // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_