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 #ifndef UI_GFX_GEOMETRY_SIZE_H_ 6 #define UI_GFX_GEOMETRY_SIZE_H_ 7 8 #include <iosfwd> 9 #include <string> 10 11 #include "base/compiler_specific.h" 12 #include "ui/gfx/geometry/size_base.h" 13 #include "ui/gfx/geometry/size_f.h" 14 #include "ui/gfx/gfx_export.h" 15 16 #if defined(OS_WIN) 17 typedef struct tagSIZE SIZE; 18 #elif defined(OS_IOS) 19 #include <CoreGraphics/CoreGraphics.h> 20 #elif defined(OS_MACOSX) 21 #include <ApplicationServices/ApplicationServices.h> 22 #endif 23 24 namespace gfx { 25 26 // A size has width and height values. 27 class GFX_EXPORT Size : public SizeBase<Size, int> { 28 public: Size()29 Size() : SizeBase<Size, int>(0, 0) {} Size(int width,int height)30 Size(int width, int height) : SizeBase<Size, int>(width, height) {} 31 #if defined(OS_MACOSX) 32 explicit Size(const CGSize& s); 33 #endif 34 ~Size()35 ~Size() {} 36 37 #if defined(OS_MACOSX) 38 Size& operator=(const CGSize& s); 39 #endif 40 41 #if defined(OS_WIN) 42 SIZE ToSIZE() const; 43 #elif defined(OS_MACOSX) 44 CGSize ToCGSize() const; 45 #endif 46 SizeF()47 operator SizeF() const { 48 return SizeF(width(), height()); 49 } 50 51 std::string ToString() const; 52 }; 53 54 inline bool operator==(const Size& lhs, const Size& rhs) { 55 return lhs.width() == rhs.width() && lhs.height() == rhs.height(); 56 } 57 58 inline bool operator!=(const Size& lhs, const Size& rhs) { 59 return !(lhs == rhs); 60 } 61 62 #if !defined(COMPILER_MSVC) && !defined(__native_client__) 63 extern template class SizeBase<Size, int>; 64 #endif 65 66 // This is declared here for use in gtest-based unit tests but is defined in 67 // the gfx_test_support target. Depend on that to use this in your unit test. 68 // This should not be used in production code - call ToString() instead. 69 void PrintTo(const Size& size, ::std::ostream* os); 70 71 } // namespace gfx 72 73 #endif // UI_GFX_GEOMETRY_SIZE_H_ 74