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 ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ 6 #define ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ 7 8 #include "ash/ash_export.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/views/window/non_client_view.h" 11 12 namespace ash { 13 class FrameBorderHitTestController; 14 class FrameCaptionButtonContainerView; 15 class ImmersiveFullscreenController; 16 } 17 namespace views { 18 class Widget; 19 } 20 21 namespace ash { 22 23 // A NonClientFrameView used for packaged apps, dialogs and other non-browser 24 // windows. It supports immersive fullscreen. When in immersive fullscreen, the 25 // client view takes up the entire widget and the window header is an overlay. 26 // The window header overlay slides onscreen when the user hovers the mouse at 27 // the top of the screen. See also views::CustomFrameView and 28 // BrowserNonClientFrameViewAsh. 29 class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView { 30 public: 31 // Internal class name. 32 static const char kViewClassName[]; 33 34 explicit CustomFrameViewAsh(views::Widget* frame); 35 virtual ~CustomFrameViewAsh(); 36 37 // Inits |immersive_fullscreen_controller| so that the controller reveals 38 // and hides |header_view_| in immersive fullscreen. 39 // CustomFrameViewAsh does not take ownership of 40 // |immersive_fullscreen_controller|. 41 void InitImmersiveFullscreenControllerForView( 42 ImmersiveFullscreenController* immersive_fullscreen_controller); 43 44 // views::NonClientFrameView: 45 virtual gfx::Rect GetBoundsForClientView() const OVERRIDE; 46 virtual gfx::Rect GetWindowBoundsForClientBounds( 47 const gfx::Rect& client_bounds) const OVERRIDE; 48 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; 49 virtual void GetWindowMask(const gfx::Size& size, 50 gfx::Path* window_mask) OVERRIDE; 51 virtual void ResetWindowControls() OVERRIDE; 52 virtual void UpdateWindowIcon() OVERRIDE; 53 virtual void UpdateWindowTitle() OVERRIDE; 54 virtual void SizeConstraintsChanged() OVERRIDE; 55 56 // views::View: 57 virtual gfx::Size GetPreferredSize() const OVERRIDE; 58 virtual const char* GetClassName() const OVERRIDE; 59 virtual gfx::Size GetMinimumSize() const OVERRIDE; 60 virtual gfx::Size GetMaximumSize() const OVERRIDE; 61 virtual void SchedulePaintInRect(const gfx::Rect& r) OVERRIDE; 62 virtual void VisibilityChanged(views::View* starting_from, 63 bool is_visible) OVERRIDE; 64 65 // Get the view of the header. 66 views::View* GetHeaderView(); 67 68 const views::View* GetAvatarIconViewForTest() const; 69 70 private: 71 class OverlayView; 72 friend class TestWidgetConstraintsDelegate; 73 74 // views::NonClientFrameView: 75 virtual bool DoesIntersectRect(const views::View* target, 76 const gfx::Rect& rect) const OVERRIDE; 77 78 // Returns the container for the minimize/maximize/close buttons that is held 79 // by the HeaderView. Used in testing. 80 FrameCaptionButtonContainerView* GetFrameCaptionButtonContainerViewForTest(); 81 82 // Height from top of window to top of client area. 83 int NonClientTopBorderHeight() const; 84 85 // Not owned. 86 views::Widget* frame_; 87 88 // View which contains the title and window controls. 89 class HeaderView; 90 HeaderView* header_view_; 91 92 // Updates the hittest bounds overrides based on the window state type. 93 scoped_ptr<FrameBorderHitTestController> frame_border_hit_test_controller_; 94 95 DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAsh); 96 }; 97 98 } // namespace ash 99 100 #endif // ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ 101