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 13namespace chromeos { 14 15// DOMBrowserViewLayout public: ------------------------------------------------ 16 17DOMBrowserViewLayout::DOMBrowserViewLayout() : ::BrowserViewLayout() {} 18 19DOMBrowserViewLayout::~DOMBrowserViewLayout() {} 20 21// DOMBrowserViewLayout, ::DOMBrowserViewLayout overrides: --------------------- 22 23void DOMBrowserViewLayout::Installed(views::View* host) { 24 status_area_ = NULL; 25 ::BrowserViewLayout::Installed(host); 26} 27 28void 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 38int 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 49int DOMBrowserViewLayout::LayoutToolbar(int top) { 50 return top; 51} 52 53int DOMBrowserViewLayout::LayoutBookmarkAndInfoBars(int top) { 54 return top; 55} 56 57bool DOMBrowserViewLayout::IsPositionInWindowCaption(const gfx::Point& point) { 58 return false; 59} 60 61int 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 75bool 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 83int 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 93const DOMBrowserView* DOMBrowserViewLayout::GetDOMBrowserView() { 94 return static_cast<DOMBrowserView*>(browser_view_); 95} 96 97} // namespace chromeos 98