| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "apps/size_constraints.h" |
| |
| #include <algorithm> |
| |
| #include "ui/gfx/insets.h" |
| |
| namespace apps { |
| |
| SizeConstraints::SizeConstraints() |
| : maximum_size_(kUnboundedSize, kUnboundedSize) {} |
| |
| SizeConstraints::SizeConstraints(const gfx::Size& min_size, |
| const gfx::Size& max_size) |
| : minimum_size_(min_size), maximum_size_(max_size) {} |
| |
| SizeConstraints::~SizeConstraints() {} |
| |
| // static |
| gfx::Size SizeConstraints::AddFrameToConstraints( |
| const gfx::Size& size_constraints, |
| const gfx::Insets& frame_insets) { |
| return gfx::Size( |
| size_constraints.width() == kUnboundedSize |
| ? kUnboundedSize |
| : size_constraints.width() + frame_insets.width(), |
| size_constraints.height() == kUnboundedSize |
| ? kUnboundedSize |
| : size_constraints.height() + frame_insets.height()); |
| } |
| |
| gfx::Size SizeConstraints::ClampSize(gfx::Size size) const { |
| const gfx::Size max_size = GetMaximumSize(); |
| if (max_size.width() != kUnboundedSize) |
| size.set_width(std::min(size.width(), max_size.width())); |
| if (max_size.height() != kUnboundedSize) |
| size.set_height(std::min(size.height(), max_size.height())); |
| size.SetToMax(GetMinimumSize()); |
| return size; |
| } |
| |
| bool SizeConstraints::HasMinimumSize() const { |
| const gfx::Size min_size = GetMinimumSize(); |
| return min_size.width() != kUnboundedSize || |
| min_size.height() != kUnboundedSize; |
| } |
| |
| bool SizeConstraints::HasMaximumSize() const { |
| const gfx::Size max_size = GetMaximumSize(); |
| return max_size.width() != kUnboundedSize || |
| max_size.height() != kUnboundedSize; |
| } |
| |
| bool SizeConstraints::HasFixedSize() const { |
| return !GetMinimumSize().IsEmpty() && GetMinimumSize() == GetMaximumSize(); |
| } |
| |
| gfx::Size SizeConstraints::GetMinimumSize() const { |
| return minimum_size_; |
| } |
| |
| gfx::Size SizeConstraints::GetMaximumSize() const { |
| return gfx::Size( |
| maximum_size_.width() == kUnboundedSize |
| ? kUnboundedSize |
| : std::max(maximum_size_.width(), minimum_size_.width()), |
| maximum_size_.height() == kUnboundedSize |
| ? kUnboundedSize |
| : std::max(maximum_size_.height(), minimum_size_.height())); |
| } |
| |
| void SizeConstraints::set_minimum_size(const gfx::Size& min_size) { |
| minimum_size_ = min_size; |
| } |
| |
| void SizeConstraints::set_maximum_size(const gfx::Size& max_size) { |
| maximum_size_ = max_size; |
| } |
| |
| } // namespace apps |