// Copyright 2013 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. #include "chrome/browser/ui/views/frame/contents_layout_manager.h" #include "ui/views/view.h" ContentsLayoutManager::ContentsLayoutManager( views::View* devtools_view, views::View* contents_view) : devtools_view_(devtools_view), contents_view_(contents_view), host_(nullptr), active_top_margin_(0) { } ContentsLayoutManager::~ContentsLayoutManager() { } void ContentsLayoutManager::SetContentsResizingStrategy( const DevToolsContentsResizingStrategy& strategy) { if (strategy_.Equals(strategy)) return; strategy_.CopyFrom(strategy); if (host_) host_->InvalidateLayout(); } void ContentsLayoutManager::SetActiveTopMargin(int margin) { if (active_top_margin_ == margin) return; active_top_margin_ = margin; if (host_) host_->InvalidateLayout(); } void ContentsLayoutManager::Layout(views::View* contents_container) { DCHECK(host_ == contents_container); int top = active_top_margin_; int height = std::max(0, contents_container->height() - top); int width = contents_container->width(); gfx::Size container_size(width, height); gfx::Rect new_devtools_bounds; gfx::Rect new_contents_bounds; ApplyDevToolsContentsResizingStrategy(strategy_, container_size, &new_devtools_bounds, &new_contents_bounds); new_devtools_bounds.Offset(0, top); new_contents_bounds.Offset(0, top); // DevTools cares about the specific position, so we have to compensate RTL // layout here. new_devtools_bounds.set_x(host_->GetMirroredXForRect(new_devtools_bounds)); new_contents_bounds.set_x(host_->GetMirroredXForRect(new_contents_bounds)); devtools_view_->SetBoundsRect(new_devtools_bounds); contents_view_->SetBoundsRect(new_contents_bounds); } gfx::Size ContentsLayoutManager::GetPreferredSize( const views::View* host) const { return gfx::Size(); } void ContentsLayoutManager::Installed(views::View* host) { DCHECK(!host_); host_ = host; } void ContentsLayoutManager::Uninstalled(views::View* host) { DCHECK(host_ == host); host_ = nullptr; }