browser_non_client_frame_view_ash.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_ASH_H_ 6#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_ASH_H_ 7 8#include "base/gtest_prod_util.h" 9#include "base/memory/scoped_ptr.h" 10#include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" 11#include "chrome/browser/ui/views/tab_icon_view_model.h" 12 13class TabIconView; 14 15namespace ash { 16class FrameBorderHitTestController; 17class FrameCaptionButtonContainerView; 18class HeaderPainter; 19} 20namespace views { 21class ImageButton; 22class ToggleImageButton; 23} 24 25class BrowserNonClientFrameViewAsh 26 : public BrowserNonClientFrameView, 27 public chrome::TabIconViewModel { 28 public: 29 static const char kViewClassName[]; 30 31 BrowserNonClientFrameViewAsh(BrowserFrame* frame, BrowserView* browser_view); 32 virtual ~BrowserNonClientFrameViewAsh(); 33 34 void Init(); 35 36 // BrowserNonClientFrameView overrides: 37 virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const OVERRIDE; 38 virtual int GetTopInset() const OVERRIDE; 39 virtual int GetThemeBackgroundXInset() const OVERRIDE; 40 virtual void UpdateThrobber(bool running) OVERRIDE; 41 42 // views::NonClientFrameView overrides: 43 virtual gfx::Rect GetBoundsForClientView() const OVERRIDE; 44 virtual gfx::Rect GetWindowBoundsForClientBounds( 45 const gfx::Rect& client_bounds) const OVERRIDE; 46 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; 47 virtual void GetWindowMask(const gfx::Size& size, 48 gfx::Path* window_mask) OVERRIDE; 49 virtual void ResetWindowControls() OVERRIDE; 50 virtual void UpdateWindowIcon() OVERRIDE; 51 virtual void UpdateWindowTitle() OVERRIDE; 52 53 // views::View overrides: 54 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 55 virtual void Layout() OVERRIDE; 56 virtual const char* GetClassName() const OVERRIDE; 57 virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE; 58 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 59 virtual gfx::Size GetMinimumSize() OVERRIDE; 60 virtual void OnThemeChanged() OVERRIDE; 61 62 // Overridden from chrome::TabIconViewModel: 63 virtual bool ShouldTabIconViewAnimate() const OVERRIDE; 64 virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE; 65 66 private: 67 FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest, WindowHeader); 68 FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest, 69 NonImmersiveFullscreen); 70 FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest, 71 ImmersiveFullscreen); 72 73 // Distance between the left edge of the NonClientFrameView and the tab strip. 74 int GetTabStripLeftInset() const; 75 76 // Distance between the right edge of the NonClientFrameView and the tab 77 // strip. 78 int GetTabStripRightInset() const; 79 80 // Returns true if we should use a short header, such as for popup windows. 81 bool UseShortHeader() const; 82 83 // Returns true if we should use a super short header with light bars instead 84 // of regular tabs. This header is used in immersive fullscreen when the 85 // top-of-window views are not revealed. 86 bool UseImmersiveLightbarHeaderStyle() const; 87 88 // Layout the incognito icon. 89 void LayoutAvatar(); 90 91 // Returns true if there is anything to paint. Some fullscreen windows do not 92 // need their frames painted. 93 bool ShouldPaint() const; 94 95 // Paints the header background when the frame is in immersive fullscreen and 96 // tab light bar is visible. 97 void PaintImmersiveLightbarStyleHeader(gfx::Canvas* canvas); 98 99 void PaintToolbarBackground(gfx::Canvas* canvas); 100 101 // Windows without a toolbar need to draw their own line under the header, 102 // above the content area. 103 void PaintContentEdge(gfx::Canvas* canvas); 104 105 // Returns the id of the header frame image based on the browser type, 106 // activation state and incognito mode. 107 int GetThemeFrameImageId() const; 108 109 // Returns the id of the header frame overlay image based on the activation 110 // state and incognito mode. 111 // Returns 0 if no overlay image should be used. 112 int GetThemeFrameOverlayImageId() const; 113 114 // View which contains the window controls. 115 ash::FrameCaptionButtonContainerView* caption_button_container_; 116 117 // For popups, the window icon. 118 TabIconView* window_icon_; 119 120 // Helper class for painting the header. 121 scoped_ptr<ash::HeaderPainter> header_painter_; 122 123 // Updates the hittest bounds overrides based on the window show type. 124 scoped_ptr<ash::FrameBorderHitTestController> 125 frame_border_hit_test_controller_; 126 127 DISALLOW_COPY_AND_ASSIGN(BrowserNonClientFrameViewAsh); 128}; 129 130#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_ASH_H_ 131