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