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