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) 17typedef 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 24namespace gfx { 25 26// A size has width and height values. 27class GFX_EXPORT Size : public SizeBase<Size, int> { 28 public: 29 Size() : SizeBase<Size, int>(0, 0) {} 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 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 47 operator SizeF() const { 48 return SizeF(width(), height()); 49 } 50 51 std::string ToString() const; 52}; 53 54inline bool operator==(const Size& lhs, const Size& rhs) { 55 return lhs.width() == rhs.width() && lhs.height() == rhs.height(); 56} 57 58inline bool operator!=(const Size& lhs, const Size& rhs) { 59 return !(lhs == rhs); 60} 61 62#if !defined(COMPILER_MSVC) && !defined(__native_client__) 63extern 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. 69void PrintTo(const Size& size, ::std::ostream* os); 70 71} // namespace gfx 72 73#endif // UI_GFX_GEOMETRY_SIZE_H_ 74