]>
git.saurik.com Git - iphone-api.git/blob - WebCore/FloatPoint.h
2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
3 * Copyright (C) 2005 Nokia. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include "FloatSize.h"
32 #include <wtf/MathExtras.h>
33 #include <wtf/Platform.h>
36 typedef struct CGPoint CGPoint
;
57 class TransformationMatrix
;
62 FloatPoint() : m_x(0), m_y(0) { }
63 FloatPoint(float x
, float y
) : m_x(x
), m_y(y
) { }
64 FloatPoint(const IntPoint
&);
66 static FloatPoint
narrowPrecision(double x
, double y
);
68 float x() const { return m_x
; }
69 float y() const { return m_y
; }
71 void setX(float x
) { m_x
= x
; }
72 void setY(float y
) { m_y
= y
; }
73 void move(float dx
, float dy
) { m_x
+= dx
; m_y
+= dy
; }
76 FloatPoint(const CGPoint
&);
77 operator CGPoint() const;
82 FloatPoint(const QPointF
&);
83 operator QPointF() const;
87 operator TPoint() const;
88 FloatPoint(const TPoint
&);
92 operator SkPoint() const;
93 FloatPoint(const SkPoint
&);
96 FloatPoint
matrixTransform(const TransformationMatrix
&) const;
103 inline FloatPoint
& operator+=(FloatPoint
& a
, const FloatSize
& b
)
105 a
.move(b
.width(), b
.height());
109 inline FloatPoint
& operator-=(FloatPoint
& a
, const FloatSize
& b
)
111 a
.move(-b
.width(), -b
.height());
115 inline FloatPoint
operator+(const FloatPoint
& a
, const FloatSize
& b
)
117 return FloatPoint(a
.x() + b
.width(), a
.y() + b
.height());
120 inline FloatSize
operator-(const FloatPoint
& a
, const FloatPoint
& b
)
122 return FloatSize(a
.x() - b
.x(), a
.y() - b
.y());
125 inline FloatPoint
operator-(const FloatPoint
& a
, const FloatSize
& b
)
127 return FloatPoint(a
.x() - b
.width(), a
.y() - b
.height());
130 inline bool operator==(const FloatPoint
& a
, const FloatPoint
& b
)
132 return a
.x() == b
.x() && a
.y() == b
.y();
135 inline bool operator!=(const FloatPoint
& a
, const FloatPoint
& b
)
137 return a
.x() != b
.x() || a
.y() != b
.y();
140 inline IntPoint
roundedIntPoint(const FloatPoint
& p
)
142 return IntPoint(static_cast<int>(roundf(p
.x())), static_cast<int>(roundf(p
.y())));