content_setting_image_view.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Use of this source code is governed by a BSD-style license that can be 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// found in the LICENSE file. 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_ 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_ 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "base/memory/scoped_ptr.h" 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "chrome/common/content_settings_types.h" 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "ui/gfx/animation/animation_delegate.h" 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "ui/gfx/animation/slide_animation.h" 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "ui/views/painter.h" 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "ui/views/view.h" 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "ui/views/widget/widget_observer.h" 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass ContentSettingImageModel; 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass LocationBarView; 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace content { 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass WebContents; 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace gfx { 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass FontList; 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace views { 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass ImageView; 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass Label; 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// The ContentSettingImageView displays an icon and optional text label for 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// various content settings affordances in the location bar (i.e. plugin 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// blocking, geolocation). 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass ContentSettingImageView : public gfx::AnimationDelegate, 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public views::View, 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public views::WidgetObserver { 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public: 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen ContentSettingImageView(ContentSettingsType content_type, 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen LocationBarView* parent, 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen const gfx::FontList& font_list, 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen SkColor text_color, 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen SkColor parent_background_color); 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual ~ContentSettingImageView(); 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Updates the decoration from the shown WebContents. 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void Update(content::WebContents* web_contents); 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen private: 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Number of milliseconds spent animating open; also the time spent animating 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // closed. 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen static const int kOpenTimeMS; 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // The total animation time, including open and close as well as an 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // intervening "stay open" period. 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen static const int kAnimationDurationMS; 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // Amount of padding at the edges of the bubble. If |by_icon| is true, this 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // is the padding next to the icon; otherwise it's the padding next to the 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // label. (We increase padding next to the label by the amount of padding 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // "built in" to the icon in order to make the bubble appear to have 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // symmetrical padding.) 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen static int GetBubbleOuterPadding(bool by_icon); 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // gfx::AnimationDelegate: 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void AnimationCanceled(const gfx::Animation* animation) OVERRIDE; 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // views::View: 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual gfx::Size GetPreferredSize() const OVERRIDE; 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void Layout() OVERRIDE; 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE; 77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen // views::WidgetObserver: 79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE; 80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen bool background_showing() const { 82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return slide_animator_.is_animating() || pause_animation_; 83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int GetTotalSpacingWhileAnimating() const; 86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen void OnClick(); 87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen LocationBarView* parent_; // Weak, owns us. 89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen scoped_ptr<ContentSettingImageModel> content_setting_image_model_; 90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen scoped_ptr<views::Painter> background_painter_; 91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen views::ImageView* icon_; 92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen views::Label* text_label_; 93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen gfx::SlideAnimation slide_animator_; 94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen bool pause_animation_; 95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen double pause_animation_state_; 96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen views::Widget* bubble_widget_; 97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen DISALLOW_COPY_AND_ASSIGN(ContentSettingImageView); 99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen}; 100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#endif // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_CONTENT_SETTING_IMAGE_VIEW_H_ 102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen