15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/widget/widget_observer.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BrowserView; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace gfx { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SlideAnimation; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FullscreenExitBubbleViews is responsible for showing a bubble atop the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// screen in fullscreen mode, telling users how to exit and providing a click 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// target. The bubble auto-hides, and re-shows when the user moves to the 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// screen top. 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FullscreenExitBubbleViews : public FullscreenExitBubble, 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public content::NotificationObserver, 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public views::WidgetObserver { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FullscreenExitBubbleViews(BrowserView* browser, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FullscreenExitBubbleType bubble_type); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FullscreenExitBubbleViews(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateContent(const GURL& url, FullscreenExitBubbleType bubble_type); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Repositions |popup_| if it is visible. 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RepositionIfVisible(); 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class FullscreenExitView; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum AnimatedAttribute { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ANIMATED_ATTRIBUTE_BOUNDS, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ANIMATED_ATTRIBUTE_OPACITY 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Starts or stops polling the mouse location based on |popup_| and 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |bubble_type_|. 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateMouseWatcher(); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Updates any state which depends on whether the user is in immersive 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // fullscreen. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateForImmersiveState(); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Updates |popup|'s bounds given |animation_| and |animated_attribute_|. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateBounds(); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the root view containing |browser_view_|. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) views::View* GetBrowserRootView() const; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // FullScreenExitBubble overrides: 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetPopupRect(bool ignore_animation_state) const OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Point GetCursorScreenPoint() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool WindowContainsPoint(gfx::Point pos) OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsWindowActive() OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Hide() OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsAnimating() OVERRIDE; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool CanMouseTriggerSlideIn() const OVERRIDE; 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // content::NotificationObserver override: 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Observe(int type, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationSource& source, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // views::WidgetObserver override: 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnWidgetVisibilityChanged(views::Widget* widget, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool visible) OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserView* browser_view_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* popup_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Animation controlling showing/hiding of the exit bubble. 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<gfx::SlideAnimation> animation_; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Attribute animated by |animation_|. 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AnimatedAttribute animated_attribute_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The contents of the popup. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FullscreenExitView* view_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationRegistrar registrar_; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FullscreenExitBubbleViews); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_ 105