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