blob: bd59a930c3931c1fe3a4f3fd099f441b97cd93b5 [file] [log] [blame]
// 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;
}