1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/browser/app_window/size_constraints.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <algorithm>
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/insets.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace extensions {
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SizeConstraints::SizeConstraints()
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : maximum_size_(kUnboundedSize, kUnboundedSize) {}
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SizeConstraints::SizeConstraints(const gfx::Size& min_size,
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                 const gfx::Size& max_size)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : minimum_size_(min_size), maximum_size_(max_size) {}
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SizeConstraints::~SizeConstraints() {}
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Size SizeConstraints::AddFrameToConstraints(
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const gfx::Size& size_constraints,
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const gfx::Insets& frame_insets) {
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return gfx::Size(
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      size_constraints.width() == kUnboundedSize
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          ? kUnboundedSize
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          : size_constraints.width() + frame_insets.width(),
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      size_constraints.height() == kUnboundedSize
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          ? kUnboundedSize
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          : size_constraints.height() + frame_insets.height());
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Size SizeConstraints::ClampSize(gfx::Size size) const {
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const gfx::Size max_size = GetMaximumSize();
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (max_size.width() != kUnboundedSize)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    size.set_width(std::min(size.width(), max_size.width()));
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (max_size.height() != kUnboundedSize)
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    size.set_height(std::min(size.height(), max_size.height()));
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  size.SetToMax(GetMinimumSize());
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return size;
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool SizeConstraints::HasMinimumSize() const {
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const gfx::Size min_size = GetMinimumSize();
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return min_size.width() != kUnboundedSize ||
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         min_size.height() != kUnboundedSize;
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool SizeConstraints::HasMaximumSize() const {
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const gfx::Size max_size = GetMaximumSize();
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return max_size.width() != kUnboundedSize ||
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         max_size.height() != kUnboundedSize;
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool SizeConstraints::HasFixedSize() const {
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return !GetMinimumSize().IsEmpty() && GetMinimumSize() == GetMaximumSize();
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Size SizeConstraints::GetMinimumSize() const {
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return minimum_size_;
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Size SizeConstraints::GetMaximumSize() const {
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return gfx::Size(
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      maximum_size_.width() == kUnboundedSize
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          ? kUnboundedSize
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          : std::max(maximum_size_.width(), minimum_size_.width()),
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      maximum_size_.height() == kUnboundedSize
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          ? kUnboundedSize
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          : std::max(maximum_size_.height(), minimum_size_.height()));
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SizeConstraints::set_minimum_size(const gfx::Size& min_size) {
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  minimum_size_ = min_size;
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SizeConstraints::set_maximum_size(const gfx::Size& max_size) {
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  maximum_size_ = max_size;
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace extensions
84