• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 "ui/gfx/geometry/size.h"
6 
7 #if defined(OS_WIN)
8 #include <windows.h>
9 #elif defined(OS_IOS)
10 #include <CoreGraphics/CoreGraphics.h>
11 #elif defined(OS_MACOSX)
12 #include <ApplicationServices/ApplicationServices.h>
13 #endif
14 
15 #include "base/numerics/clamped_math.h"
16 #include "base/numerics/safe_math.h"
17 #include "base/strings/stringprintf.h"
18 #include "build/build_config.h"
19 #include "ui/gfx/geometry/safe_integer_conversions.h"
20 #include "ui/gfx/geometry/size_conversions.h"
21 
22 namespace gfx {
23 
24 #if defined(OS_MACOSX)
Size(const CGSize & s)25 Size::Size(const CGSize& s)
26     : width_(s.width < 0 ? 0 : s.width),
27       height_(s.height < 0 ? 0 : s.height) {
28 }
29 
operator =(const CGSize & s)30 Size& Size::operator=(const CGSize& s) {
31   set_width(s.width);
32   set_height(s.height);
33   return *this;
34 }
35 #endif
36 
37 #if defined(OS_WIN)
ToSIZE() const38 SIZE Size::ToSIZE() const {
39   SIZE s;
40   s.cx = width();
41   s.cy = height();
42   return s;
43 }
44 #elif defined(OS_MACOSX)
ToCGSize() const45 CGSize Size::ToCGSize() const {
46   return CGSizeMake(width(), height());
47 }
48 #endif
49 
GetArea() const50 int Size::GetArea() const {
51   return GetCheckedArea().ValueOrDie();
52 }
53 
GetCheckedArea() const54 base::CheckedNumeric<int> Size::GetCheckedArea() const {
55   base::CheckedNumeric<int> checked_area = width();
56   checked_area *= height();
57   return checked_area;
58 }
59 
Enlarge(int grow_width,int grow_height)60 void Size::Enlarge(int grow_width, int grow_height) {
61   SetSize(base::ClampAdd(width(), grow_width),
62           base::ClampAdd(height(), grow_height));
63 }
64 
SetToMin(const Size & other)65 void Size::SetToMin(const Size& other) {
66   width_ = width() <= other.width() ? width() : other.width();
67   height_ = height() <= other.height() ? height() : other.height();
68 }
69 
SetToMax(const Size & other)70 void Size::SetToMax(const Size& other) {
71   width_ = width() >= other.width() ? width() : other.width();
72   height_ = height() >= other.height() ? height() : other.height();
73 }
74 
ToString() const75 std::string Size::ToString() const {
76   return base::StringPrintf("%dx%d", width(), height());
77 }
78 
ScaleToCeiledSize(const Size & size,float x_scale,float y_scale)79 Size ScaleToCeiledSize(const Size& size, float x_scale, float y_scale) {
80   if (x_scale == 1.f && y_scale == 1.f)
81     return size;
82   return ToCeiledSize(ScaleSize(gfx::SizeF(size), x_scale, y_scale));
83 }
84 
ScaleToCeiledSize(const Size & size,float scale)85 Size ScaleToCeiledSize(const Size& size, float scale) {
86   if (scale == 1.f)
87     return size;
88   return ToCeiledSize(ScaleSize(gfx::SizeF(size), scale, scale));
89 }
90 
ScaleToFlooredSize(const Size & size,float x_scale,float y_scale)91 Size ScaleToFlooredSize(const Size& size, float x_scale, float y_scale) {
92   if (x_scale == 1.f && y_scale == 1.f)
93     return size;
94   return ToFlooredSize(ScaleSize(gfx::SizeF(size), x_scale, y_scale));
95 }
96 
ScaleToFlooredSize(const Size & size,float scale)97 Size ScaleToFlooredSize(const Size& size, float scale) {
98   if (scale == 1.f)
99     return size;
100   return ToFlooredSize(ScaleSize(gfx::SizeF(size), scale, scale));
101 }
102 
ScaleToRoundedSize(const Size & size,float x_scale,float y_scale)103 Size ScaleToRoundedSize(const Size& size, float x_scale, float y_scale) {
104   if (x_scale == 1.f && y_scale == 1.f)
105     return size;
106   return ToRoundedSize(ScaleSize(gfx::SizeF(size), x_scale, y_scale));
107 }
108 
ScaleToRoundedSize(const Size & size,float scale)109 Size ScaleToRoundedSize(const Size& size, float scale) {
110   if (scale == 1.f)
111     return size;
112   return ToRoundedSize(ScaleSize(gfx::SizeF(size), scale, scale));
113 }
114 
115 }  // namespace gfx
116