From 3a31df9d76aac19e66b5eeed6b2a405c0b52b8f9 Mon Sep 17 00:00:00 2001 From: eseidel Date: Thu, 7 Jul 2005 06:25:02 +0000 Subject: [PATCH] Bug #: 3674 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 | 21 ++++++++++++++++ WebCore/kwq/KWQPoint.mm | 12 ++++++++- WebCore/kwq/KWQPointArray.h | 28 ++++++++++++++++----- WebCore/kwq/KWQPointArray.mm | 49 +++++++++++++++++++++++++++++++++++- 4 files changed, 102 insertions(+), 8 deletions(-) diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23 index a0c14b8306a5..013e7458b979 100644 --- a/WebCore/ChangeLog-2005-08-23 +++ b/WebCore/ChangeLog-2005-08-23 @@ -1,3 +1,24 @@ +2005-07-06 Eric Seidel + + 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 Reviewed by hyatt. diff --git a/WebCore/kwq/KWQPoint.mm b/WebCore/kwq/KWQPoint.mm index 8b84b5d52536..e4a6f3277afd 100644 --- a/WebCore/kwq/KWQPoint.mm +++ b/WebCore/kwq/KWQPoint.mm @@ -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 diff --git a/WebCore/kwq/KWQPointArray.h b/WebCore/kwq/KWQPointArray.h index a086a564e2fa..e95d7d0260de 100644 --- a/WebCore/kwq/KWQPointArray.h +++ b/WebCore/kwq/KWQPointArray.h @@ -35,21 +35,32 @@ #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 { public: QPointArray() { } QPointArray(int size) : QMemArray(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 diff --git a/WebCore/kwq/KWQPointArray.mm b/WebCore/kwq/KWQPointArray.mm index bb396877e765..e1b42f5bfbae 100644 --- a/WebCore/kwq/KWQPointArray.mm +++ b/WebCore/kwq/KWQPointArray.mm @@ -26,11 +26,58 @@ #import "KWQPointArray.h" #import +#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 ) { -- 2.36.0