Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Side by Side Diff: chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h

Issue 23724019: Rework OpaqueBrowserFrameViewLayout. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sky fixes Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_ 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_
6 #define CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_ 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_
7 7
8 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" 8 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
9 #include "ui/views/layout/layout_manager.h" 9 #include "ui/views/layout/layout_manager.h"
10 10
11 class OpaqueBrowserFrameViewLayoutDelegate; 11 class OpaqueBrowserFrameViewLayoutDelegate;
12 12
13 namespace views { 13 namespace views {
14 class ImageButton; 14 class ImageButton;
15 class Label; 15 class Label;
16 } 16 }
17 17
18 // Calculates the position of the widgets in the opaque browser frame view. 18 // Calculates the position of the widgets in the opaque browser frame view.
19 // 19 //
20 // This is separated out for testing reasons. OpaqueBrowserFrameView has tight 20 // This is separated out for testing reasons. OpaqueBrowserFrameView has tight
21 // dependencies with Browser and classes that depend on Browser. 21 // dependencies with Browser and classes that depend on Browser.
22 class OpaqueBrowserFrameViewLayout : public views::LayoutManager { 22 class OpaqueBrowserFrameViewLayout : public views::LayoutManager {
23 public: 23 public:
24 enum ButtonID {
25 BUTTON_MINIMIZE,
26 BUTTON_MAXIMIZE,
27 BUTTON_CLOSE
28 };
29
24 explicit OpaqueBrowserFrameViewLayout( 30 explicit OpaqueBrowserFrameViewLayout(
25 OpaqueBrowserFrameViewLayoutDelegate* delegate); 31 OpaqueBrowserFrameViewLayoutDelegate* delegate);
26 virtual ~OpaqueBrowserFrameViewLayout(); 32 virtual ~OpaqueBrowserFrameViewLayout();
27 33
28 // Whether we should add the (minimize,maximize,close) buttons. Can be false 34 // Whether we should add the (minimize,maximize,close) buttons. Can be false
29 // on Windows 8 in metro mode. 35 // on Windows 8 in metro mode.
30 static bool ShouldAddDefaultCaptionButtons(); 36 static bool ShouldAddDefaultCaptionButtons();
31 37
32 gfx::Rect GetBoundsForTabStrip( 38 gfx::Rect GetBoundsForTabStrip(
33 const gfx::Size& tabstrip_preferred_size, 39 const gfx::Size& tabstrip_preferred_size,
34 int available_width) const; 40 int available_width) const;
35 gfx::Rect GetBoundsForTabStripAndAvatarArea(
36 const gfx::Size& tabstrip_preferred_size,
37 int available_width) const;
38 41
39 gfx::Size GetMinimumSize(int available_width) const; 42 gfx::Size GetMinimumSize(int available_width) const;
40 43
41 // Returns the bounds of the window required to display the content area at 44 // Returns the bounds of the window required to display the content area at
42 // the specified bounds. 45 // the specified bounds.
43 gfx::Rect GetWindowBoundsForClientBounds( 46 gfx::Rect GetWindowBoundsForClientBounds(
44 const gfx::Rect& client_bounds) const; 47 const gfx::Rect& client_bounds) const;
45 48
46 // Returns the thickness of the border that makes up the window frame edges. 49 // Returns the thickness of the border that makes up the window frame edges.
47 // This does not include any client edge. If |restored| is true, acts as if 50 // This does not include any client edge. If |restored| is true, acts as if
(...skipping 23 matching lines...) Expand all
71 // Returns the bounds of the titlebar icon (or where the icon would be if 74 // Returns the bounds of the titlebar icon (or where the icon would be if
72 // there was one). 75 // there was one).
73 gfx::Rect IconBounds() const; 76 gfx::Rect IconBounds() const;
74 77
75 // Returns the bounds of the client area for the specified view size. 78 // Returns the bounds of the client area for the specified view size.
76 gfx::Rect CalculateClientAreaBounds(int width, int height) const; 79 gfx::Rect CalculateClientAreaBounds(int width, int height) const;
77 80
78 const gfx::Rect& client_view_bounds() const { return client_view_bounds_; } 81 const gfx::Rect& client_view_bounds() const { return client_view_bounds_; }
79 82
80 private: 83 private:
84 // Whether a specific button should be inserted on the leading or trailing
85 // side.
86 enum ButtonAlignment {
87 ALIGN_LEADING,
88 ALIGN_TRAILING
89 };
90
81 // Layout various sub-components of this view. 91 // Layout various sub-components of this view.
82 void LayoutWindowControls(views::View* host); 92 void LayoutWindowControls(views::View* host);
83 void LayoutTitleBar(); 93 void LayoutTitleBar(views::View* host);
84 void LayoutAvatar(); 94 void LayoutAvatar();
85 95
96 void ConfigureButton(views::View* host,
97 ButtonID button_id,
98 ButtonAlignment align,
99 int caption_y);
100
101 // Sets the visibility of all buttons associated with |button_id| to false.
102 void HideButton(ButtonID button_id);
103
104 // Adds a window caption button to either the leading or trailing side.
105 void SetBoundsForButton(views::View* host,
106 views::ImageButton* button,
107 ButtonAlignment align,
108 int caption_y);
109
86 // Internal implementation of ViewAdded() and ViewRemoved(). 110 // Internal implementation of ViewAdded() and ViewRemoved().
87 void SetView(int id, views::View* view); 111 void SetView(int id, views::View* view);
88 112
89 // Overriden from views::LayoutManager: 113 // Overriden from views::LayoutManager:
90 virtual void Layout(views::View* host) OVERRIDE; 114 virtual void Layout(views::View* host) OVERRIDE;
91 virtual gfx::Size GetPreferredSize(views::View* host) OVERRIDE; 115 virtual gfx::Size GetPreferredSize(views::View* host) OVERRIDE;
92 virtual void ViewAdded(views::View* host, views::View* view) OVERRIDE; 116 virtual void ViewAdded(views::View* host, views::View* view) OVERRIDE;
93 virtual void ViewRemoved(views::View* host, views::View* view) OVERRIDE; 117 virtual void ViewRemoved(views::View* host, views::View* view) OVERRIDE;
94 118
95 OpaqueBrowserFrameViewLayoutDelegate* delegate_; 119 OpaqueBrowserFrameViewLayoutDelegate* delegate_;
96 120
97 // The layout rect of the avatar icon, if visible. 121 // The layout rect of the avatar icon, if visible.
98 gfx::Rect avatar_bounds_; 122 gfx::Rect avatar_bounds_;
99 123
100 // The bounds of the ClientView. 124 // The bounds of the ClientView.
101 gfx::Rect client_view_bounds_; 125 gfx::Rect client_view_bounds_;
102 126
127 // The layout of the window icon, if visible.
128 gfx::Rect window_icon_bounds_;
129
130 // How far from the leading/trailing edge of the view the next window control
131 // should be placed.
132 int leading_button_start_;
133 int trailing_button_start_;
134
135 // The size of the window buttons, and the avatar menu item (if any). This
136 // does not count labels or other elements that should be counted in a
137 // minimal frame.
138 int minimum_size_for_buttons_;
139
140 // Whether any of the window control buttons were packed on the leading.
141 bool has_leading_buttons_;
142 bool has_trailing_buttons_;
143
103 // Window controls. 144 // Window controls.
104 views::ImageButton* minimize_button_; 145 views::ImageButton* minimize_button_;
105 views::ImageButton* maximize_button_; 146 views::ImageButton* maximize_button_;
106 views::ImageButton* restore_button_; 147 views::ImageButton* restore_button_;
107 views::ImageButton* close_button_; 148 views::ImageButton* close_button_;
108 149
109 views::View* window_icon_; 150 views::View* window_icon_;
110 views::Label* window_title_; 151 views::Label* window_title_;
111 152
112 views::View* avatar_label_; 153 views::View* avatar_label_;
113 views::View* avatar_button_; 154 views::View* avatar_button_;
114 155
156 std::vector<ButtonID> leading_buttons_;
157 std::vector<ButtonID> trailing_buttons_;
158
115 DISALLOW_COPY_AND_ASSIGN(OpaqueBrowserFrameViewLayout); 159 DISALLOW_COPY_AND_ASSIGN(OpaqueBrowserFrameViewLayout);
116 }; 160 };
117 161
118 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_ 162 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_OPAQUE_BROWSER_FRAME_VIEW_LAYOUT_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698