278c7793ce591efb8eb1a2520a972fe136f35fe0
[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 #endif
47
48 namespace WebCore {
49
50 class IntPoint {
51 public:
52     IntPoint() : m_x(0), m_y(0) { }
53     IntPoint(int x, int y) : m_x(x), m_y(y) { }
54
55     int x() const { return m_x; }
56     int y() const { return m_y; }
57
58     void setX(int x) { m_x = x; }
59     void setY(int y) { m_y = y; }
60
61     void move(int dx, int dy) { m_x += dx; m_y += dy; }
62     
63 #if __APPLE__
64
65     explicit IntPoint(const CGPoint&); // don't do this implicitly since it's lossy
66     operator CGPoint() const;
67
68 #ifndef NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
69     explicit IntPoint(const NSPoint&); // don't do this implicitly since it's lossy
70     operator NSPoint() const;
71 #endif
72
73 #endif
74
75 #if PLATFORM(WIN)
76     IntPoint(const POINT&);
77     operator POINT() const;
78 #endif
79
80 private:
81     int m_x, m_y;
82 };
83
84 inline IntPoint& operator+=(IntPoint& a, const IntSize& b)
85 {
86     a.move(b.width(), b.height());
87     return a;
88 }
89
90 inline IntPoint& operator-=(IntPoint& a, const IntSize& b)
91 {
92     a.move(-b.width(), -b.height());
93     return a;
94 }
95
96 inline IntPoint operator+(const IntPoint& a, const IntSize& b)
97 {
98     return IntPoint(a.x() + b.width(), a.y() + b.height());
99 }
100
101 inline IntSize operator-(const IntPoint& a, const IntPoint& b)
102 {
103     return IntSize(a.x() - b.x(), a.y() - b.y());
104 }
105
106 inline IntPoint operator-(const IntPoint& a, const IntSize& b)
107 {
108     return IntPoint(a.x() - b.width(), a.y() - b.height());
109 }
110
111 inline bool operator==(const IntPoint& a, const IntPoint& b)
112 {
113     return a.x() == b.x() && a.y() == b.y();
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 } // namespace WebCore
122
123 #endif // INTPOINT_H_