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_POINT_F_H_
6#define UI_GFX_POINT_F_H_
7
8#include <string>
9
10#include "ui/gfx/gfx_export.h"
11#include "ui/gfx/point_base.h"
12#include "ui/gfx/vector2d_f.h"
13
14namespace gfx {
15
16// A floating version of gfx::Point.
17class GFX_EXPORT PointF : public PointBase<PointF, float, Vector2dF> {
18 public:
19  PointF() : PointBase<PointF, float, Vector2dF>(0, 0) {}
20  PointF(float x, float y) : PointBase<PointF, float, Vector2dF>(x, y) {}
21  ~PointF() {}
22
23  void Scale(float scale) {
24    Scale(scale, scale);
25  }
26
27  void Scale(float x_scale, float y_scale) {
28    SetPoint(x() * x_scale, y() * y_scale);
29  }
30
31  // Returns a string representation of point.
32  std::string ToString() const;
33};
34
35inline bool operator==(const PointF& lhs, const PointF& rhs) {
36  return lhs.x() == rhs.x() && lhs.y() == rhs.y();
37}
38
39inline bool operator!=(const PointF& lhs, const PointF& rhs) {
40  return !(lhs == rhs);
41}
42
43inline PointF operator+(const PointF& lhs, const Vector2dF& rhs) {
44  PointF result(lhs);
45  result += rhs;
46  return result;
47}
48
49inline PointF operator-(const PointF& lhs, const Vector2dF& rhs) {
50  PointF result(lhs);
51  result -= rhs;
52  return result;
53}
54
55inline Vector2dF operator-(const PointF& lhs, const PointF& rhs) {
56  return Vector2dF(lhs.x() - rhs.x(), lhs.y() - rhs.y());
57}
58
59inline PointF PointAtOffsetFromOrigin(const Vector2dF& offset_from_origin) {
60  return PointF(offset_from_origin.x(), offset_from_origin.y());
61}
62
63GFX_EXPORT PointF ScalePoint(const PointF& p, float x_scale, float y_scale);
64
65inline PointF ScalePoint(const PointF& p, float scale) {
66  return ScalePoint(p, scale, scale);
67}
68
69#if !defined(COMPILER_MSVC)
70extern template class PointBase<PointF, float, Vector2dF>;
71#endif
72
73}  // namespace gfx
74
75#endif  // UI_GFX_POINT_F_H_
76