size_constraints.cc 2.6 KB

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