Bug #: 3674
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jul 2005 06:25:02 +0000 (06:25 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jul 2005 06:25:02 +0000 (06:25 +0000)
Submitted by: eseidel
Reviewed by: mjs
        * kwq/KWQPoint.mm:
        (QPoint::operator CGPoint): Added.
        (operator*): Added.
        (operator<<): Added.
        * kwq/KWQPointArray.h: Added.
        (QPoint::setX): Added.
        (QPoint::setY): Added.
        (QPoint::isNull): Added.
        (QPoint::operator -=): Added.
        * kwq/KWQPointArray.mm: Added.
        (QPointArray::QPointArray): Added.
        (QPointArray::copy): Added.
        (QPointArray::boundingRect): Added.
        (QPointArray::point): Added.
        Necessary additions for KDOM/KSVG/KCanvas
        http://bugzilla.opendarwin.org/show_bug.cgi?id=3674

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9606 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQPoint.mm
WebCore/kwq/KWQPointArray.h
WebCore/kwq/KWQPointArray.mm

index a0c14b8306a5c6e710e18646c25f565b1e893de3..013e7458b979d30de6836ddc9df58c05cde8f2fa 100644 (file)
@@ -1,3 +1,24 @@
+2005-07-06  Eric Seidel  <eseidel@apple.com>
+
+        Reviewed by mjs.
+
+        * kwq/KWQPoint.mm:
+        (QPoint::operator CGPoint): Added.
+        (operator*): Added.
+        (operator<<): Added.
+        * kwq/KWQPointArray.h: Added.
+        (QPoint::setX): Added.
+        (QPoint::setY): Added.
+        (QPoint::isNull): Added.
+        (QPoint::operator -=): Added.
+        * kwq/KWQPointArray.mm: Added.
+        (QPointArray::QPointArray): Added.
+        (QPointArray::copy): Added.
+        (QPointArray::boundingRect): Added.
+        (QPointArray::point): Added.
+        Necessary additions for KDOM/KSVG/KCanvas
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=3674
+
 2005-07-06  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by hyatt.
index 8b84b5d52536c48234661f267ed903501d8b7223..e4a6f3277afdae7d7da46129c9c9798baa32780d 100644 (file)
@@ -42,6 +42,11 @@ QPoint::operator NSPoint() const
     return NSMakePoint(xCoord, yCoord);
 }
 
+QPoint::operator CGPoint() const
+{
+    return CGPointMake(xCoord, yCoord);
+}
+
 QPoint operator+(const QPoint &a, const QPoint &b)
 {
     return QPoint(a.xCoord + b.xCoord, a.yCoord + b.yCoord);
@@ -52,9 +57,14 @@ QPoint operator-(const QPoint &a, const QPoint &b)
     return QPoint(a.xCoord - b.xCoord, a.yCoord - b.yCoord);
 }
 
+const QPoint operator*(const QPoint &p, double s)
+{
+    return QPoint((int)(p.xCoord * s), (int)(p.yCoord * s));
+}
+
 #ifdef _KWQ_IOSTREAM_
 std::ostream &operator<<(std::ostream &o, const QPoint &p)
 {
-       return o << "QPoint: [x: " << p.x() << "; h: " << p.y() << "]";
+    return o << "QPoint: [x: " << p.x() << "; h: " << p.y() << "]";
 }
 #endif
index a086a564e2fa7ff7df028ed2dc31c01cdef69e21..e95d7d0260ded5b8e47a975dcf1e47bbbe4d8a16 100644 (file)
 #include "KWQMemArray.h"
 
 typedef struct _NSPoint NSPoint;
+typedef struct CGPoint CGPoint;
+
+class QRect;
 
 class QPoint {
 public:
     QPoint();
     QPoint(int, int);
     explicit QPoint(const NSPoint &); // don't do this implicitly since it's lossy
-
+    
     int x() const { return xCoord; }
     int y() const { return yCoord; }
-
+    
+    void setX(int x) { xCoord = x; }
+    void setY(int y) { yCoord = y; }
+    
+    bool isNull() const { return xCoord == 0 && yCoord == 0; }
+    
+    QPoint &operator -=(const QPoint &two) { xCoord -= two.xCoord; yCoord -= two.yCoord; return *this; }
+    friend const QPoint operator*(const QPoint &p, double s);
     friend QPoint operator+(const QPoint &, const QPoint &);
     friend QPoint operator-(const QPoint &, const QPoint &);
     
     operator NSPoint() const;
-
+    operator CGPoint() const;
+    
 private:
     int xCoord;
     int yCoord;
@@ -59,9 +70,14 @@ class QPointArray : public QMemArray<QPoint> {
 public:
     QPointArray() { }
     QPointArray(int size) : QMemArray<QPoint>(size) { }
-
+    QPointArray(const QRect &rect);
     QPointArray(int, const int *);
-
+    
+    QRect boundingRect() const;
+    
+    QPointArray copy() const;
+    
+    void point(uint, int *, int *);
     void setPoint(uint, int, int);
 #if 0
     // FIXME: Workaround for Radar 2921061.
@@ -74,7 +90,7 @@ public:
 #ifdef _KWQ_IOSTREAM_
     friend std::ostream &operator<<(std::ostream &, const QPoint &);
 #endif
-
+    
 };
 
 #endif
index bb396877e765147737e5edd66d80762f0cf71b0d..e1b42f5bfbaeba8b481c52c994583c2d6cf53354 100644 (file)
 #import "KWQPointArray.h"
 #import <stdarg.h>
 
+#import "KWQRect.h"
+
 QPointArray::QPointArray(int nPoints, const int *points)
 {
-    setPoints( nPoints, points );
+    setPoints(nPoints, points);
+}
+
+QPointArray::QPointArray(const QRect &rect)
+{
+    setPoints(4, rect.topLeft().x(), rect.topLeft().y(),
+              rect.topRight().x(), rect.topRight().y(),
+              rect.bottomRight().x(), rect.bottomRight().y(),
+              rect.bottomLeft().x(), rect.bottomLeft().y());
+}
+
+QPointArray QPointArray::copy() const
+{
+    QPointArray copy;
+    copy.duplicate(*this);
+    return copy;
 }
 
+QRect QPointArray::boundingRect() const
+{
+    int nPoints = count();
+    
+    if (nPoints < 1) return QRect(0,0,0,0);
+    
+    int minX = INT_MAX, maxX = 0;
+    int minY = INT_MAX, maxY = 0;
+    
+    while (nPoints > 0) {
+        QPoint p = at(nPoints);
+        int x = p.x(), y = p.y();
+        
+        if (x < minX) minX = x;
+        if (x > maxX) maxX = x;
+        if (y < minY) minY = y;
+        if (y > maxY) maxY = y;
+        
+        nPoints--;
+    }
+    
+    return QRect(minX, minY, maxX - minX + 1, maxY - minY + 1);
+}
+
+void QPointArray::point(uint index, int *x, int *y)
+{
+    QPoint p = at(index);
+    *x = p.x();
+    *y = p.y();
+}
 
 void QPointArray::setPoint( uint index, int x, int y )
 {