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
+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.
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);
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
#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;
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.
#ifdef _KWQ_IOSTREAM_
friend std::ostream &operator<<(std::ostream &, const QPoint &);
#endif
-
+
};
#endif
#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 )
{