• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
ContentsLayoutManager(views::View * devtools_view,views::View * contents_view)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 
~ContentsLayoutManager()18 ContentsLayoutManager::~ContentsLayoutManager() {
19 }
20 
SetContentsResizingStrategy(const DevToolsContentsResizingStrategy & strategy)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 
SetActiveTopMargin(int margin)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 
Layout(views::View * contents_container)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 
GetPreferredSize(const views::View * host) const65 gfx::Size ContentsLayoutManager::GetPreferredSize(
66     const views::View* host) const {
67   return gfx::Size();
68 }
69 
Installed(views::View * host)70 void ContentsLayoutManager::Installed(views::View* host) {
71   DCHECK(!host_);
72   host_ = host;
73 }
74 
Uninstalled(views::View * host)75 void ContentsLayoutManager::Uninstalled(views::View* host) {
76   DCHECK(host_ == host);
77   host_ = NULL;
78 }
79