diff options
author | tmdiep@chromium.org <tmdiep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-28 15:16:15 +0000 |
---|---|---|
committer | tmdiep@chromium.org <tmdiep@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-28 15:16:15 +0000 |
commit | 32fd0af521283f55de5266e383e76edbf97ecbc8 (patch) | |
tree | b7c91e6677aa2aaf67998b627be726e8e50da9c6 /apps/size_constraints.cc | |
parent | 77490642a380e1fbdd63da7ef24c3cc490cafe40 (diff) | |
download | chromium_src-32fd0af521283f55de5266e383e76edbf97ecbc8.zip chromium_src-32fd0af521283f55de5266e383e76edbf97ecbc8.tar.gz chromium_src-32fd0af521283f55de5266e383e76edbf97ecbc8.tar.bz2 |
Refactored app window size constraints
The NativeAppWindow subclasses all depend on the minimum and maximum
size constraints state stored in AppWindow. This is problematic when
creating a window for the new bounds API. This patch moves the
constraints state into the NativeAppWindow.
BUG=315471
TEST=browser_tests (AppWindowAPITest.TestSizeConstraints)
Review URL: https://codereview.chromium.org/181383012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254119 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'apps/size_constraints.cc')
-rw-r--r-- | apps/size_constraints.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/apps/size_constraints.cc b/apps/size_constraints.cc new file mode 100644 index 0000000..05d4175 --- /dev/null +++ b/apps/size_constraints.cc @@ -0,0 +1,65 @@ +// 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" + +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() {} + +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(), GetMaximumSize().width())); + if (max_size.height() != kUnboundedSize) + size.set_height(std::min(size.height(), GetMaximumSize().height())); + size.SetToMax(GetMinimumSize()); + return size; +} + +bool SizeConstraints::HasMinimumSize() const { + return GetMinimumSize().width() != kUnboundedSize || + GetMinimumSize().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 |