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 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/views/frame/contents_layout_manager.h" 6 7#include "ui/views/view.h" 8 9ContentsLayoutManager::ContentsLayoutManager( 10 views::View* devtools_view, 11 views::View* contents_view) 12 : devtools_view_(devtools_view), 13 contents_view_(contents_view), 14 host_(NULL), 15 active_top_margin_(0) { 16} 17 18ContentsLayoutManager::~ContentsLayoutManager() { 19} 20 21void ContentsLayoutManager::SetContentsResizingStrategy( 22 const DevToolsContentsResizingStrategy& strategy) { 23 if (strategy_.Equals(strategy)) 24 return; 25 26 strategy_.CopyFrom(strategy); 27 if (host_) 28 host_->InvalidateLayout(); 29} 30 31void ContentsLayoutManager::SetActiveTopMargin(int margin) { 32 if (active_top_margin_ == margin) 33 return; 34 35 active_top_margin_ = margin; 36 if (host_) 37 host_->InvalidateLayout(); 38} 39 40void ContentsLayoutManager::Layout(views::View* contents_container) { 41 DCHECK(host_ == contents_container); 42 43 int top = active_top_margin_; 44 int height = std::max(0, contents_container->height() - top); 45 int width = contents_container->width(); 46 47 gfx::Size container_size(width, height); 48 gfx::Rect new_devtools_bounds; 49 gfx::Rect new_contents_bounds; 50 51 ApplyDevToolsContentsResizingStrategy(strategy_, container_size, 52 &new_devtools_bounds, &new_contents_bounds); 53 new_devtools_bounds.Offset(0, top); 54 new_contents_bounds.Offset(0, top); 55 56 // DevTools cares about the specific position, so we have to compensate RTL 57 // layout here. 58 new_devtools_bounds.set_x(host_->GetMirroredXForRect(new_devtools_bounds)); 59 new_contents_bounds.set_x(host_->GetMirroredXForRect(new_contents_bounds)); 60 61 devtools_view_->SetBoundsRect(new_devtools_bounds); 62 contents_view_->SetBoundsRect(new_contents_bounds); 63} 64 65gfx::Size ContentsLayoutManager::GetPreferredSize( 66 const views::View* host) const { 67 return gfx::Size(); 68} 69 70void ContentsLayoutManager::Installed(views::View* host) { 71 DCHECK(!host_); 72 host_ = host; 73} 74 75void ContentsLayoutManager::Uninstalled(views::View* host) { 76 DCHECK(host_ == host); 77 host_ = NULL; 78} 79