Move locale information into FontDescription
[WebKit-https.git] / Source / WebCore / platform / graphics / IntRect.h
index 80363c3..54392ac 100644 (file)
 #define IntRect_h
 
 #include "IntPoint.h"
-#include <wtf/Vector.h>
+#include "LayoutUnit.h"
 
-#if USE(CG) || USE(SKIA_ON_MAC_CHROME)
+#if USE(CG)
 typedef struct CGRect CGRect;
 #endif
 
-#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
+#if PLATFORM(MAC)
 #ifdef NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES
 typedef struct CGRect NSRect;
 #else
@@ -41,39 +41,28 @@ typedef struct _NSRect NSRect;
 #endif
 #endif
 
-#if PLATFORM(WIN)
-typedef struct tagRECT RECT;
-#elif PLATFORM(QT)
-QT_BEGIN_NAMESPACE
-class QRect;
-QT_END_NAMESPACE
-#elif PLATFORM(GTK)
-#ifdef GTK_API_VERSION_2
-typedef struct _GdkRectangle GdkRectangle;
-#else
-typedef struct _cairo_rectangle_int cairo_rectangle_int_t;
-typedef cairo_rectangle_int_t GdkRectangle;
+#if PLATFORM(IOS)
+#ifndef NSRect
+#define NSRect CGRect
 #endif
-#elif PLATFORM(HAIKU)
-class BRect;
-#elif PLATFORM(EFL)
-typedef struct _Eina_Rectangle Eina_Rectangle;
 #endif
 
-#if PLATFORM(WX)
-class wxRect;
+#if PLATFORM(WIN)
+typedef struct tagRECT RECT;
 #endif
 
-#if USE(SKIA)
-struct SkRect;
-struct SkIRect;
+#if USE(CAIRO)
+typedef struct _cairo_rectangle_int cairo_rectangle_int_t;
 #endif
 
 namespace WebCore {
 
 class FloatRect;
+class LayoutRect;
+class TextStream;
 
 class IntRect {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     IntRect() { }
     IntRect(const IntPoint& location, const IntSize& size)
@@ -81,7 +70,8 @@ public:
     IntRect(int x, int y, int width, int height)
         : m_location(IntPoint(x, y)), m_size(IntSize(width, height)) { }
 
-    explicit IntRect(const FloatRect& rect); // don't do this implicitly since it's lossy
+    WEBCORE_EXPORT explicit IntRect(const FloatRect&); // don't do this implicitly since it's lossy
+    WEBCORE_EXPORT explicit IntRect(const LayoutRect&); // don't do this implicitly since it's lossy
         
     IntPoint location() const { return m_location; }
     IntSize size() const { return m_size; }
@@ -108,11 +98,13 @@ public:
     IntPoint center() const { return IntPoint(x() + width() / 2, y() + height() / 2); }
 
     void move(const IntSize& size) { m_location += size; } 
-    void move(const IntPoint& offset) { m_location.move(offset.x(), offset.y()); }
+    void moveBy(const IntPoint& offset) { m_location.move(offset.x(), offset.y()); }
     void move(int dx, int dy) { m_location.move(dx, dy); } 
 
-    void expand(const IntSize& size) { m_location += size; }
+    void expand(const IntSize& size) { m_size += size; }
     void expand(int dw, int dh) { m_size.expand(dw, dh); }
+    void contract(const IntSize& size) { m_size -= size; }
+    void contract(int dw, int dh) { m_size.expand(-dw, -dh); }
 
     void shiftXEdgeTo(int edge)
     {
@@ -142,8 +134,8 @@ public:
     IntPoint minXMaxYCorner() const { return IntPoint(m_location.x(), m_location.y() + m_size.height()); } // typically bottomLeft
     IntPoint maxXMaxYCorner() const { return IntPoint(m_location.x() + m_size.width(), m_location.y() + m_size.height()); } // typically bottomRight
     
-    bool intersects(const IntRect&) const;
-    bool contains(const IntRect&) const;
+    WEBCORE_EXPORT bool intersects(const IntRect&) const;
+    WEBCORE_EXPORT bool contains(const IntRect&) const;
 
     // This checks to see if the rect contains x,y in the traditional sense.
     // Equivalent to checking if the rect contains a 1x1 rect below and to the right of (px,py).
@@ -151,8 +143,8 @@ public:
         { return px >= x() && px < maxX() && py >= y() && py < maxY(); }
     bool contains(const IntPoint& point) const { return contains(point.x(), point.y()); }
 
-    void intersect(const IntRect&);
-    void unite(const IntRect&);
+    WEBCORE_EXPORT void intersect(const IntRect&);
+    WEBCORE_EXPORT void unite(const IntRect&);
     void uniteIfNonZero(const IntRect&);
 
     void inflateX(int dx)
@@ -166,45 +158,32 @@ public:
         m_size.setHeight(m_size.height() + dy + dy);
     }
     void inflate(int d) { inflateX(d); inflateY(d); }
-    void scale(float s);
+    WEBCORE_EXPORT void scale(float s);
 
-    IntRect transposedRect() const { return IntRect(m_location.transposedPoint(), m_size.transposedSize()); }
+    IntSize differenceToPoint(const IntPoint&) const;
+    int distanceSquaredToPoint(const IntPoint& p) const { return differenceToPoint(p).diagonalLengthSquared(); }
 
-#if PLATFORM(WX)
-    IntRect(const wxRect&);
-    operator wxRect() const;
-#endif
+    IntRect transposedRect() const { return IntRect(m_location.transposedPoint(), m_size.transposedSize()); }
 
 #if PLATFORM(WIN)
     IntRect(const RECT&);
     operator RECT() const;
-#elif PLATFORM(QT)
-    IntRect(const QRect&);
-    operator QRect() const;
-#elif PLATFORM(GTK)
-    IntRect(const GdkRectangle&);
-    operator GdkRectangle() const;
-#elif PLATFORM(HAIKU)
-    explicit IntRect(const BRect&);
-    operator BRect() const;
 #elif PLATFORM(EFL)
     explicit IntRect(const Eina_Rectangle&);
     operator Eina_Rectangle() const;
 #endif
 
-#if USE(CG) || USE(SKIA_ON_MAC_CHROME)
-    operator CGRect() const;
+#if USE(CAIRO)
+    IntRect(const cairo_rectangle_int_t&);
+    operator cairo_rectangle_int_t() const;
 #endif
 
-#if USE(SKIA)
-    IntRect(const SkIRect&);
-    operator SkRect() const;
-    operator SkIRect() const;
+#if USE(CG)
+    WEBCORE_EXPORT operator CGRect() const;
 #endif
 
-#if (PLATFORM(MAC) && !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
-        || (PLATFORM(CHROMIUM) && OS(DARWIN))
-    operator NSRect() const;
+#if PLATFORM(MAC) && !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)
+    WEBCORE_EXPORT operator NSRect() const;
 #endif
 
 private:
@@ -226,8 +205,6 @@ inline IntRect unionRect(const IntRect& a, const IntRect& b)
     return c;
 }
 
-IntRect unionRect(const Vector<IntRect>&);
-
 inline bool operator==(const IntRect& a, const IntRect& b)
 {
     return a.location() == b.location() && a.size() == b.size();
@@ -238,15 +215,28 @@ inline bool operator!=(const IntRect& a, const IntRect& b)
     return a.location() != b.location() || a.size() != b.size();
 }
 
-#if USE(CG) || USE(SKIA_ON_MAC_CHROME)
-IntRect enclosingIntRect(const CGRect&);
+inline IntRect& operator-=(IntRect& r, const IntPoint& offset)
+{
+    r.move(-offset.x(), -offset.y());
+    return r;
+}
+
+inline IntRect operator-(const IntRect& r, const IntPoint& offset)
+{
+    IntRect t = r;
+    return t -= offset;
+}
+
+#if USE(CG)
+WEBCORE_EXPORT IntRect enclosingIntRect(const CGRect&);
 #endif
 
-#if (PLATFORM(MAC) && !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
-        || (PLATFORM(CHROMIUM) && OS(DARWIN))
-IntRect enclosingIntRect(const NSRect&);
+#if PLATFORM(MAC) && !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)
+WEBCORE_EXPORT IntRect enclosingIntRect(const NSRect&);
 #endif
 
+WEBCORE_EXPORT TextStream& operator<<(TextStream&, const IntRect&);
+
 } // namespace WebCore
 
 #endif // IntRect_h