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. 4 5#include "extensions/browser/app_window/size_constraints.h" 6 7#include <algorithm> 8 9#include "ui/gfx/insets.h" 10 11namespace extensions { 12 13SizeConstraints::SizeConstraints() 14 : maximum_size_(kUnboundedSize, kUnboundedSize) {} 15 16SizeConstraints::SizeConstraints(const gfx::Size& min_size, 17 const gfx::Size& max_size) 18 : minimum_size_(min_size), maximum_size_(max_size) {} 19 20SizeConstraints::~SizeConstraints() {} 21 22// static 23gfx::Size SizeConstraints::AddFrameToConstraints( 24 const gfx::Size& size_constraints, 25 const gfx::Insets& frame_insets) { 26 return gfx::Size( 27 size_constraints.width() == kUnboundedSize 28 ? kUnboundedSize 29 : size_constraints.width() + frame_insets.width(), 30 size_constraints.height() == kUnboundedSize 31 ? kUnboundedSize 32 : size_constraints.height() + frame_insets.height()); 33} 34 35gfx::Size SizeConstraints::ClampSize(gfx::Size size) const { 36 const gfx::Size max_size = GetMaximumSize(); 37 if (max_size.width() != kUnboundedSize) 38 size.set_width(std::min(size.width(), max_size.width())); 39 if (max_size.height() != kUnboundedSize) 40 size.set_height(std::min(size.height(), max_size.height())); 41 size.SetToMax(GetMinimumSize()); 42 return size; 43} 44 45bool SizeConstraints::HasMinimumSize() const { 46 const gfx::Size min_size = GetMinimumSize(); 47 return min_size.width() != kUnboundedSize || 48 min_size.height() != kUnboundedSize; 49} 50 51bool SizeConstraints::HasMaximumSize() const { 52 const gfx::Size max_size = GetMaximumSize(); 53 return max_size.width() != kUnboundedSize || 54 max_size.height() != kUnboundedSize; 55} 56 57bool SizeConstraints::HasFixedSize() const { 58 return !GetMinimumSize().IsEmpty() && GetMinimumSize() == GetMaximumSize(); 59} 60 61gfx::Size SizeConstraints::GetMinimumSize() const { 62 return minimum_size_; 63} 64 65gfx::Size SizeConstraints::GetMaximumSize() const { 66 return gfx::Size( 67 maximum_size_.width() == kUnboundedSize 68 ? kUnboundedSize 69 : std::max(maximum_size_.width(), minimum_size_.width()), 70 maximum_size_.height() == kUnboundedSize 71 ? kUnboundedSize 72 : std::max(maximum_size_.height(), minimum_size_.height())); 73} 74 75void SizeConstraints::set_minimum_size(const gfx::Size& min_size) { 76 minimum_size_ = min_size; 77} 78 79void SizeConstraints::set_maximum_size(const gfx::Size& max_size) { 80 maximum_size_ = max_size; 81} 82 83} // namespace extensions 84