Reviewed by Eric. Landed by rwlbuis.
[WebKit-https.git] / WebCore / platform / IntPoint.h
1 /*
2  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef INTPOINT_H_
27 #define INTPOINT_H_
28
29 #include "IntSize.h"
30 #include <wtf/Platform.h>
31
32 #if __APPLE__
33
34 typedef struct CGPoint CGPoint;
35
36 #ifdef NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
37 typedef struct CGPoint NSPoint;
38 #else
39 typedef struct _NSPoint NSPoint;
40 #endif
41
42 #endif // __APPLE__
43
44 #if PLATFORM(WIN)
45 typedef struct tagPOINT POINT;
46 #elif PLATFORM(QT)
47 class QPoint;
48 #endif
49
50 namespace WebCore {
51
52 class IntPoint {
53 public:
54     IntPoint() : m_x(0), m_y(0) { }
55     IntPoint(int x, int y) : m_x(x), m_y(y) { }
56
57     int x() const { return m_x; }
58     int y() const { return m_y; }
59
60     void setX(int x) { m_x = x; }
61     void setY(int y) { m_y = y; }
62
63     void move(int dx, int dy) { m_x += dx; m_y += dy; }
64     
65 #if __APPLE__
66
67     explicit IntPoint(const CGPoint&); // don't do this implicitly since it's lossy
68     operator CGPoint() const;
69
70 #ifndef NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
71     explicit IntPoint(const NSPoint&); // don't do this implicitly since it's lossy
72     operator NSPoint() const;
73 #endif
74
75 #endif
76
77 #if PLATFORM(WIN)
78     IntPoint(const POINT&);
79     operator POINT() const;
80 #elif PLATFORM(QT)
81     IntPoint(const QPoint&);
82     operator QPoint() const;
83 #endif
84
85 private:
86     int m_x, m_y;
87 };
88
89 inline IntPoint& operator+=(IntPoint& a, const IntSize& b)
90 {
91     a.move(b.width(), b.height());
92     return a;
93 }
94
95 inline IntPoint& operator-=(IntPoint& a, const IntSize& b)
96 {
97     a.move(-b.width(), -b.height());
98     return a;
99 }
100
101 inline IntPoint operator+(const IntPoint& a, const IntSize& b)
102 {
103     return IntPoint(a.x() + b.width(), a.y() + b.height());
104 }
105
106 inline IntSize operator-(const IntPoint& a, const IntPoint& b)
107 {
108     return IntSize(a.x() - b.x(), a.y() - b.y());
109 }
110
111 inline IntPoint operator-(const IntPoint& a, const IntSize& b)
112 {
113     return IntPoint(a.x() - b.width(), a.y() - b.height());
114 }
115
116 inline bool operator==(const IntPoint& a, const IntPoint& b)
117 {
118     return a.x() == b.x() && a.y() == b.y();
119 }
120
121 inline bool operator!=(const IntPoint& a, const IntPoint& b)
122 {
123     return a.x() != b.x() || a.y() != b.y();
124 }
125
126 } // namespace WebCore
127
128 #endif // INTPOINT_H_