fullscreen_exit_bubble_views.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 6#define CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 7 8#include "base/compiler_specific.h" 9#include "base/memory/scoped_ptr.h" 10#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble.h" 11#include "content/public/browser/notification_observer.h" 12#include "content/public/browser/notification_registrar.h" 13#include "ui/views/widget/widget_observer.h" 14 15class BrowserView; 16class GURL; 17namespace ui { 18class SlideAnimation; 19} 20namespace views { 21class View; 22class Widget; 23} 24 25// FullscreenExitBubbleViews is responsible for showing a bubble atop the 26// screen in fullscreen mode, telling users how to exit and providing a click 27// target. The bubble auto-hides, and re-shows when the user moves to the 28// screen top. 29class FullscreenExitBubbleViews : public FullscreenExitBubble, 30 public content::NotificationObserver, 31 public views::WidgetObserver { 32 public: 33 FullscreenExitBubbleViews(BrowserView* browser, 34 const GURL& url, 35 FullscreenExitBubbleType bubble_type); 36 virtual ~FullscreenExitBubbleViews(); 37 38 void UpdateContent(const GURL& url, FullscreenExitBubbleType bubble_type); 39 40 // Repositions |popup_| if it is visible. 41 void RepositionIfVisible(); 42 43 private: 44 class FullscreenExitView; 45 46 enum AnimatedAttribute { 47 ANIMATED_ATTRIBUTE_BOUNDS, 48 ANIMATED_ATTRIBUTE_OPACITY 49 }; 50 51 // Starts or stops polling the mouse location based on |popup_| and 52 // |bubble_type_|. 53 void UpdateMouseWatcher(); 54 55 // Updates any state which depends on whether the user is in immersive 56 // fullscreen. 57 void UpdateForImmersiveState(); 58 59 // Updates |popup|'s bounds given |animation_| and |animated_attribute_|. 60 void UpdateBounds(); 61 62 // Returns the root view containing |browser_view_|. 63 views::View* GetBrowserRootView() const; 64 65 // FullScreenExitBubble overrides: 66 virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE; 67 virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE; 68 virtual gfx::Rect GetPopupRect(bool ignore_animation_state) const OVERRIDE; 69 virtual gfx::Point GetCursorScreenPoint() OVERRIDE; 70 virtual bool WindowContainsPoint(gfx::Point pos) OVERRIDE; 71 virtual bool IsWindowActive() OVERRIDE; 72 virtual void Hide() OVERRIDE; 73 virtual void Show() OVERRIDE; 74 virtual bool IsAnimating() OVERRIDE; 75 virtual bool CanMouseTriggerSlideIn() const OVERRIDE; 76 77 // content::NotificationObserver override: 78 virtual void Observe(int type, 79 const content::NotificationSource& source, 80 const content::NotificationDetails& details) OVERRIDE; 81 82 // views::WidgetObserver override: 83 virtual void OnWidgetVisibilityChanged(views::Widget* widget, 84 bool visible) OVERRIDE; 85 86 BrowserView* browser_view_; 87 88 views::Widget* popup_; 89 90 // Animation controlling showing/hiding of the exit bubble. 91 scoped_ptr<ui::SlideAnimation> animation_; 92 93 // Attribute animated by |animation_|. 94 AnimatedAttribute animated_attribute_; 95 96 // The contents of the popup. 97 FullscreenExitView* view_; 98 99 content::NotificationRegistrar registrar_; 100 101 DISALLOW_COPY_AND_ASSIGN(FullscreenExitBubbleViews); 102}; 103 104#endif // CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 105