Index: chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h |
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h |
index 163baf736c5b17edbd84b5a10c4ae06382d86cb4..74f100c687fdf4fd65b9b2ee43cc1c9586c8fae7 100644 |
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h |
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h |
@@ -21,6 +21,12 @@ class Label; |
// dependencies with Browser and classes that depend on Browser. |
class OpaqueBrowserFrameViewLayout : public views::LayoutManager { |
public: |
+ enum ButtonID { |
+ BUTTON_MINIMIZE, |
+ BUTTON_MAXIMIZE, |
+ BUTTON_CLOSE |
+ }; |
+ |
explicit OpaqueBrowserFrameViewLayout( |
OpaqueBrowserFrameViewLayoutDelegate* delegate); |
virtual ~OpaqueBrowserFrameViewLayout(); |
@@ -32,9 +38,6 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { |
gfx::Rect GetBoundsForTabStrip( |
const gfx::Size& tabstrip_preferred_size, |
int available_width) const; |
- gfx::Rect GetBoundsForTabStripAndAvatarArea( |
- const gfx::Size& tabstrip_preferred_size, |
- int available_width) const; |
gfx::Size GetMinimumSize(int available_width) const; |
@@ -78,11 +81,32 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { |
const gfx::Rect& client_view_bounds() const { return client_view_bounds_; } |
private: |
+ // Whether a specific button should be inserted on the leading or trailing |
+ // side. |
+ enum ButtonAlignment { |
+ ALIGN_LEADING, |
+ ALIGN_TRAILING |
+ }; |
+ |
// Layout various sub-components of this view. |
void LayoutWindowControls(views::View* host); |
- void LayoutTitleBar(); |
+ void LayoutTitleBar(views::View* host); |
void LayoutAvatar(); |
+ void ConfigureButton(views::View* host, |
+ ButtonID button_id, |
+ ButtonAlignment align, |
+ int caption_y); |
+ |
+ // Sets the visibility of all buttons associated with |button_id| to false. |
+ void HideButton(ButtonID button_id); |
+ |
+ // Adds a window caption button to either the leading or trailing side. |
+ void SetBoundsForButton(views::View* host, |
+ views::ImageButton* button, |
+ ButtonAlignment align, |
+ int caption_y); |
+ |
// Internal implementation of ViewAdded() and ViewRemoved(). |
void SetView(int id, views::View* view); |
@@ -100,6 +124,23 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { |
// The bounds of the ClientView. |
gfx::Rect client_view_bounds_; |
+ // The layout of the window icon, if visible. |
+ gfx::Rect window_icon_bounds_; |
+ |
+ // How far from the leading/trailing edge of the view the next window control |
+ // should be placed. |
+ int leading_button_start_; |
+ int trailing_button_start_; |
+ |
+ // The size of the window buttons, and the avatar menu item (if any). This |
+ // does not count labels or other elements that should be counted in a |
+ // minimal frame. |
+ int minimum_size_for_buttons_; |
+ |
+ // Whether any of the window control buttons were packed on the leading. |
+ bool has_leading_buttons_; |
+ bool has_trailing_buttons_; |
+ |
// Window controls. |
views::ImageButton* minimize_button_; |
views::ImageButton* maximize_button_; |
@@ -112,6 +153,9 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { |
views::View* avatar_label_; |
views::View* avatar_button_; |
+ std::vector<ButtonID> leading_buttons_; |
+ std::vector<ButtonID> trailing_buttons_; |
+ |
DISALLOW_COPY_AND_ASSIGN(OpaqueBrowserFrameViewLayout); |
}; |