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 9 ContentsLayoutManager::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 18 ContentsLayoutManager::~ContentsLayoutManager() { 19 } 20 21 void 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 31 void 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 40 void 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 65 gfx::Size ContentsLayoutManager::GetPreferredSize( 66 const views::View* host) const { 67 return gfx::Size(); 68 } 69 70 void ContentsLayoutManager::Installed(views::View* host) { 71 DCHECK(!host_); 72 host_ = host; 73 } 74 75 void ContentsLayoutManager::Uninstalled(views::View* host) { 76 DCHECK(host_ == host); 77 host_ = NULL; 78 } 79