Home | History | Annotate | Download | only in location_bar
      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 CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_
      6 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_
      7 
      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"
     15 
     16 class ContentSettingImageModel;
     17 class LocationBarView;
     18 
     19 namespace content {
     20 class WebContents;
     21 }
     22 
     23 namespace gfx {
     24 class FontList;
     25 }
     26 
     27 namespace views {
     28 class ImageView;
     29 class Label;
     30 }
     31 
     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,
     36                                 public views::View,
     37                                 public views::WidgetObserver {
     38  public:
     39   ContentSettingImageView(ContentSettingsType content_type,
     40                           LocationBarView* parent,
     41                           const gfx::FontList& font_list,
     42                           SkColor text_color,
     43                           SkColor parent_background_color);
     44   virtual ~ContentSettingImageView();
     45 
     46   // Updates the decoration from the shown WebContents.
     47   void Update(content::WebContents* web_contents);
     48 
     49  private:
     50   // Number of milliseconds spent animating open; also the time spent animating
     51   // closed.
     52   static const int kOpenTimeMS;
     53 
     54   // The total animation time, including open and close as well as an
     55   // intervening "stay open" period.
     56   static const int kAnimationDurationMS;
     57 
     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);
     64 
     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;
     69 
     70   // views::View:
     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;
     77 
     78   // views::WidgetObserver:
     79   virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
     80 
     81   bool background_showing() const {
     82     return slide_animator_.is_animating() || pause_animation_;
     83   }
     84 
     85   int GetTotalSpacingWhileAnimating() const;
     86   void OnClick();
     87 
     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_;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(ContentSettingImageView);
     99 };
    100 
    101 #endif  // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_
    102