// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ #pragma once #include "base/basictypes.h" #include "ui/gfx/rect.h" #include "views/layout/layout_manager.h" class AbstractTabStripView; class BookmarkBarView; class Browser; class BrowserView; class ContentsContainer; class DownloadShelfView; class TabContentsContainer; class ToolbarView; namespace gfx { class Point; class Size; } namespace views { class SingleSplitView; } // The layout manager used in chrome browser. class BrowserViewLayout : public views::LayoutManager { public: BrowserViewLayout(); virtual ~BrowserViewLayout(); // Returns the minimum size of the browser view. virtual gfx::Size GetMinimumSize(); // Returns the bounding box for the find bar. virtual gfx::Rect GetFindBarBoundingBox() const; // Returns true if the specified point(BrowserView coordinates) is in // in the window caption area of the browser window. virtual bool IsPositionInWindowCaption(const gfx::Point& point); // Tests to see if the specified |point| (in nonclient view's coordinates) // is within the views managed by the laymanager. Returns one of // HitTestCompat enum defined in views/window/hit_test.h. // See also ClientView::NonClientHitTest. virtual int NonClientHitTest(const gfx::Point& point); // views::LayoutManager overrides: virtual void Installed(views::View* host); virtual void Uninstalled(views::View* host); virtual void ViewAdded(views::View* host, views::View* view); virtual void ViewRemoved(views::View* host, views::View* view); virtual void Layout(views::View* host); virtual gfx::Size GetPreferredSize(views::View* host); protected: Browser* browser(); const Browser* browser() const; // Layout the TabStrip, returns the coordinate of the bottom of the TabStrip, // for laying out subsequent controls. virtual int LayoutTabStrip(); // Layout the following controls, starting at |top|, returns the coordinate // of the bottom of the control, for laying out the next control. virtual int LayoutToolbar(int top); virtual int LayoutBookmarkAndInfoBars(int top); int LayoutBookmarkBar(int top); int LayoutInfoBar(int top); // Updates |source|'s reserved contents rect by mapping BrowserView's // |browser_reserved_rect| into |future_source_bounds| taking into // account |source|'s |future_parent_offset| (offset is relative to // browser_view_). void UpdateReservedContentsRect(const gfx::Rect& browser_reserved_rect, TabContentsContainer* source, const gfx::Rect& future_source_bounds, const gfx::Point& future_parent_offset); // Layout the TabContents container, between the coordinates |top| and // |bottom|. void LayoutTabContents(int top, int bottom); // Returns the top margin to adjust the contents_container_ by. This is used // to make the bookmark bar and contents_container_ overlap so that the // preview contents hides the bookmark bar. int GetTopMarginForActiveContent(); // Layout the Download Shelf, returns the coordinate of the top of the // control, for laying out the previous control. int LayoutDownloadShelf(int bottom); // Returns true if an infobar is showing. bool InfobarVisible() const; // See description above vertical_layout_rect_ for details. void set_vertical_layout_rect(const gfx::Rect& bounds) { vertical_layout_rect_ = bounds; } const gfx::Rect& vertical_layout_rect() const { return vertical_layout_rect_; } // Child views that the layout manager manages. AbstractTabStripView* tabstrip_; ToolbarView* toolbar_; views::SingleSplitView* contents_split_; ContentsContainer* contents_container_; views::View* infobar_container_; DownloadShelfView* download_shelf_; BookmarkBarView* active_bookmark_bar_; BrowserView* browser_view_; // The bounds within which the vertically-stacked contents of the BrowserView // should be laid out within. When the SideTabstrip is not visible, this is // just the local bounds of the BrowserView, otherwise it's the local bounds // of the BrowserView less the width of the SideTabstrip. gfx::Rect vertical_layout_rect_; // The distance the FindBar is from the top of the window, in pixels. int find_bar_y_; DISALLOW_COPY_AND_ASSIGN(BrowserViewLayout); }; #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_