Home | History | Annotate | Download | only in gfx
      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/base/ui_export.h"
     11 #include "ui/gfx/point_base.h"
     12 #include "ui/gfx/vector2d_f.h"
     13 
     14 namespace gfx {
     15 
     16 // A floating version of gfx::Point.
     17 class UI_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 
     35 inline bool operator==(const PointF& lhs, const PointF& rhs) {
     36   return lhs.x() == rhs.x() && lhs.y() == rhs.y();
     37 }
     38 
     39 inline bool operator!=(const PointF& lhs, const PointF& rhs) {
     40   return !(lhs == rhs);
     41 }
     42 
     43 inline PointF operator+(const PointF& lhs, const Vector2dF& rhs) {
     44   PointF result(lhs);
     45   result += rhs;
     46   return result;
     47 }
     48 
     49 inline PointF operator-(const PointF& lhs, const Vector2dF& rhs) {
     50   PointF result(lhs);
     51   result -= rhs;
     52   return result;
     53 }
     54 
     55 inline Vector2dF operator-(const PointF& lhs, const PointF& rhs) {
     56   return Vector2dF(lhs.x() - rhs.x(), lhs.y() - rhs.y());
     57 }
     58 
     59 inline PointF PointAtOffsetFromOrigin(const Vector2dF& offset_from_origin) {
     60   return PointF(offset_from_origin.x(), offset_from_origin.y());
     61 }
     62 
     63 UI_EXPORT PointF ScalePoint(const PointF& p, float x_scale, float y_scale);
     64 
     65 inline PointF ScalePoint(const PointF& p, float scale) {
     66   return ScalePoint(p, scale, scale);
     67 }
     68 
     69 #if !defined(COMPILER_MSVC)
     70 extern template class PointBase<PointF, float, Vector2dF>;
     71 #endif
     72 
     73 }  // namespace gfx
     74 
     75 #endif  // UI_GFX_POINT_F_H_
     76