1 // Copyright (c) 2011 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 #include "chrome/browser/chromeos/frame/dom_browser_view_layout.h"
6
7 #include <algorithm>
8
9 #include "chrome/browser/chromeos/status/status_area_view.h"
10 #include "chrome/browser/chromeos/view_ids.h"
11 #include "views/window/hit_test.h"
12
13 namespace chromeos {
14
15 // DOMBrowserViewLayout public: ------------------------------------------------
16
DOMBrowserViewLayout()17 DOMBrowserViewLayout::DOMBrowserViewLayout() : ::BrowserViewLayout() {}
18
~DOMBrowserViewLayout()19 DOMBrowserViewLayout::~DOMBrowserViewLayout() {}
20
21 // DOMBrowserViewLayout, ::DOMBrowserViewLayout overrides: ---------------------
22
Installed(views::View * host)23 void DOMBrowserViewLayout::Installed(views::View* host) {
24 status_area_ = NULL;
25 ::BrowserViewLayout::Installed(host);
26 }
27
ViewAdded(views::View * host,views::View * view)28 void DOMBrowserViewLayout::ViewAdded(views::View* host,
29 views::View* view) {
30 ::BrowserViewLayout::ViewAdded(host, view);
31 switch (view->GetID()) {
32 case VIEW_ID_STATUS_AREA:
33 status_area_ = static_cast<chromeos::StatusAreaView*>(view);
34 break;
35 }
36 }
37
LayoutTabStrip()38 int DOMBrowserViewLayout::LayoutTabStrip() {
39 status_area_->SetVisible(true);
40 gfx::Size status_size = status_area_->GetPreferredSize();
41 status_area_->SetBounds(vertical_layout_rect_.width() - status_size.width(),
42 0,
43 vertical_layout_rect_.width(),
44 status_size.height());
45
46 return status_size.height();
47 }
48
LayoutToolbar(int top)49 int DOMBrowserViewLayout::LayoutToolbar(int top) {
50 return top;
51 }
52
LayoutBookmarkAndInfoBars(int top)53 int DOMBrowserViewLayout::LayoutBookmarkAndInfoBars(int top) {
54 return top;
55 }
56
IsPositionInWindowCaption(const gfx::Point & point)57 bool DOMBrowserViewLayout::IsPositionInWindowCaption(const gfx::Point& point) {
58 return false;
59 }
60
NonClientHitTest(const gfx::Point & point)61 int DOMBrowserViewLayout::NonClientHitTest(const gfx::Point& point) {
62 views::View* parent = browser_view_->parent();
63 gfx::Point point_in_browser_view_coords(point);
64 views::View::ConvertPointToView(
65 parent, browser_view_, &point_in_browser_view_coords);
66 gfx::Rect bv_bounds = browser_view_->bounds();
67 if (bv_bounds.Contains(point))
68 return HTCLIENT;
69 // If the point is somewhere else, delegate to the default implementation.
70 return browser_view_->views::ClientView::NonClientHitTest(point);
71 }
72
73 // DOMBrowserViewLayout private: -----------------------------------------------
74
IsPointInViewsInTitleArea(const gfx::Point & point) const75 bool DOMBrowserViewLayout::IsPointInViewsInTitleArea(const gfx::Point& point)
76 const {
77 gfx::Point point_in_status_area_coords(point);
78 views::View::ConvertPointToView(browser_view_, status_area_,
79 &point_in_status_area_coords);
80 return status_area_->HitTest(point_in_status_area_coords);
81 }
82
LayoutTitlebarComponents(const gfx::Rect & bounds)83 int DOMBrowserViewLayout::LayoutTitlebarComponents(const gfx::Rect& bounds) {
84 status_area_->SetVisible(true);
85 gfx::Size status_size = status_area_->GetPreferredSize();
86 status_area_->SetBounds(bounds.right() - status_size.width(),
87 bounds.y(),
88 status_size.width(),
89 status_size.height());
90 return status_size.height();
91 }
92
GetDOMBrowserView()93 const DOMBrowserView* DOMBrowserViewLayout::GetDOMBrowserView() {
94 return static_cast<DOMBrowserView*>(browser_view_);
95 }
96
97 } // namespace chromeos
98