1 // Copyright 2014 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.
5 #include "chrome/browser/devtools/devtools_contents_resizing_strategy.h"
9 DevToolsContentsResizingStrategy::DevToolsContentsResizingStrategy() {
12 DevToolsContentsResizingStrategy::DevToolsContentsResizingStrategy(
13 const gfx::Insets
& insets
, const gfx::Size
& min_size
)
18 DevToolsContentsResizingStrategy::DevToolsContentsResizingStrategy(
19 const gfx::Rect
& bounds
)
24 void DevToolsContentsResizingStrategy::CopyFrom(
25 const DevToolsContentsResizingStrategy
& strategy
) {
26 insets_
= strategy
.insets();
27 min_size_
= strategy
.min_size();
28 bounds_
= strategy
.bounds();
31 bool DevToolsContentsResizingStrategy::Equals(
32 const DevToolsContentsResizingStrategy
& strategy
) {
33 return insets_
== strategy
.insets() && min_size_
== strategy
.min_size() &&
34 bounds_
== strategy
.bounds();
37 void ApplyDevToolsContentsResizingStrategy(
38 const DevToolsContentsResizingStrategy
& strategy
,
39 const gfx::Size
& container_size
,
40 const gfx::Rect
& old_devtools_bounds
,
41 const gfx::Rect
& old_contents_bounds
,
42 gfx::Rect
* new_devtools_bounds
,
43 gfx::Rect
* new_contents_bounds
) {
44 new_devtools_bounds
->SetRect(
45 0, 0, container_size
.width(), container_size
.height());
47 const gfx::Insets
& insets
= strategy
.insets();
48 const gfx::Size
& min_size
= strategy
.min_size();
49 const gfx::Rect
& bounds
= strategy
.bounds();
51 if (!bounds
.size().IsEmpty()) {
52 int left
= std::min(bounds
.x(), container_size
.width());
53 int top
= std::min(bounds
.y(), container_size
.height());
54 int width
= std::min(bounds
.width(), container_size
.width() - left
);
55 int height
= std::min(bounds
.height(), container_size
.height() - top
);
56 new_contents_bounds
->SetRect(left
, top
, width
, height
);
60 int width
= std::max(0, container_size
.width() - insets
.width());
61 int left
= insets
.left();
62 if (width
< min_size
.width() && insets
.width() > 0) {
63 int min_width
= std::min(min_size
.width(), container_size
.width());
64 int insets_width
= container_size
.width() - min_width
;
65 int insets_decrease
= insets
.width() - insets_width
;
66 // Decrease both left and right insets proportionally.
67 left
-= insets_decrease
* insets
.left() / insets
.width();
70 left
= std::max(0, std::min(container_size
.width(), left
));
72 int height
= std::max(0, container_size
.height() - insets
.height());
73 int top
= insets
.top();
74 if (height
< min_size
.height() && insets
.height() > 0) {
75 int min_height
= std::min(min_size
.height(), container_size
.height());
76 int insets_height
= container_size
.height() - min_height
;
77 int insets_decrease
= insets
.height() - insets_height
;
78 // Decrease both top and bottom insets proportionally.
79 top
-= insets_decrease
* insets
.top() / insets
.height();
82 top
= std::max(0, std::min(container_size
.height(), top
));
84 new_contents_bounds
->SetRect(left
, top
, width
, height
);