[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

kocienda kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:45:44 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 829aa7d540605779b8a93cd0b7b756a77c9ae9d3
Author: kocienda <kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 20 16:16:45 2001 +0000

    Added QRegion support
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@154 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/kwq/KWQRegion.h b/WebCore/kwq/KWQRegion.h
index f064442..497025e 100644
--- a/WebCore/kwq/KWQRegion.h
+++ b/WebCore/kwq/KWQRegion.h
@@ -30,6 +30,12 @@
 #include <config.h>
 #endif
 
+// _KWQ_COMPLETE_ ==============================================================
+
+#ifdef _KWQ_COMPLETE_
+#include <_qregion.h>
+#else
+
 #include "qpoint.h"
 #include "qimage.h"
 #include "qrect.h"
@@ -72,4 +78,6 @@ public:
 
 }; // class QRegion ============================================================
 
+#endif // _KWQ_COMPLETE_
+
 #endif
diff --git a/WebCore/kwq/qt/_qregion.cpp b/WebCore/kwq/qt/_qregion.cpp
new file mode 100644
index 0000000..3f1f92c
--- /dev/null
+++ b/WebCore/kwq/qt/_qregion.cpp
@@ -0,0 +1,339 @@
+/****************************************************************************
+** $Id$
+**
+** Implementation of QRegion class
+**
+** Created : 950726
+**
+** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales at trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info at trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qregion.h"
+#include "qpoint.h"
+#include "qbuffer.h"
+
+#ifndef QT_NO_DATASTREAM
+#include "qdatastream.h"
+#endif
+
+// BEING REVISED: paul
+/*!
+  \class QRegion qregion.h
+  \brief The QRegion class specifies a clip region for a painter.
+
+  \ingroup drawing
+
+  QRegion is used with QPainter::setClipRegion() to limit the paint area to what
+  needs to be painted. There is also a QWidget::repaint() that takes a QRegion parameter.
+  QRegion is the best tool for reducing flicker.
+
+  
+  
+  A region can be created from a rectangle, an ellipse, a polygon or a
+  bitmap. Complex regions may be created by combining simple regions,
+  using unite(), intersect(), subtract() or eor() (exclusive or). Use
+  translate() to move a region.
+  
+  You can test if a region isNull(), isEmpty() or if it contains() 
+  a QPoint or QRect. The bounding rectangle is given by boundingRect().
+  
+  The function rects() gives a decomposition of the region into rectangles.
+
+  Example of using complex regions:
+  \code
+    void MyWidget::paintEvent( QPaintEvent * )
+    {
+	QPainter p;				// our painter
+	QRegion r1( QRect(100,100,200,80),	// r1 = elliptic region
+		    QRegion::Ellipse );
+	QRegion r2( QRect(100,120,90,30) );	// r2 = rectangular region
+	QRegion r3 = r1.intersect( r2 );	// r3 = intersection
+	p.begin( this );			// start painting widget
+	p.setClipRegion( r3 );			// set clip region
+	...					// paint clipped graphics
+	p.end();				// painting done
+    }
+  \endcode
+
+  QRegion is an \link shclass.html implicitely shared\endlink class.
+    
+  Due to window system limitations, the width and height of a region
+  is limited to 65535 on Unix/X11.
+
+  \sa QPainter::setClipRegion(), QPainter::setClipRect()
+*/
+
+
+/*! \enum QRegion::RegionType
+  Determines the shape of the region to be created.
+  <ul>
+  <li>\c Rectangle - the region covers the entire rectangle
+  <li>\c Ellipse - the region is an ellipse inside the rectangle
+  </ul> 
+ */
+
+
+/*****************************************************************************
+  QRegion member functions
+ *****************************************************************************/
+
+/*!
+  Constructs a rectangular or elliptic region.
+
+  If \a t is \c Rectangle, the region is the filled rectangle (\a x,
+  \a y, \a w, \a h). If \a t is \c Ellipse, the region is the filled
+  ellipse ellipse with center at (\a x + \a w / 2, \a y + \a h / 2) and 
+  size (\a w ,\a h ).
+
+*/
+QRegion::QRegion( int x, int y, int w, int h, RegionType t )
+{
+    QRegion tmp(QRect(x,y,w,h),t);
+    tmp.data->ref();
+    data = tmp.data;
+}
+
+/*!
+  Detaches from shared region data to makes sure that this region is the
+  only one referring the data.
+
+  \sa copy(), \link shclass.html shared classes\endlink
+*/
+
+void QRegion::detach()
+{
+    if ( data->count != 1 )
+	*this = copy();
+}
+
+#ifndef QT_NO_DATASTREAM
+/*!
+  Executes region commands in the internal buffer and rebuild the original
+  region.
+
+  We do this when we read a region from the data stream.
+
+  If \a ver is non-0, uses the format version \a ver on reading the
+  byte array.
+
+*/
+
+void QRegion::exec( const QByteArray &buffer, int ver )
+{
+    QBuffer buf( buffer );
+    QDataStream s( &buf );
+    if ( ver )
+	s.setVersion( ver );
+    buf.open( IO_ReadOnly );
+    QRegion rgn;
+#if defined(CHECK_STATE)
+    int test_cnt = 0;
+#endif
+    while ( !s.eof() ) {
+	Q_INT32 id;
+	if ( s.version() == 1 ) {
+	    int id_int;
+	    s >> id_int;
+	    id = id_int;
+	} else {
+	    s >> id;
+	}
+#if defined(CHECK_STATE)
+	if ( test_cnt > 0 && id != QRGN_TRANSLATE )
+	    qWarning( "QRegion::exec: Internal error" );
+	test_cnt++;
+#endif
+	if ( id == QRGN_SETRECT || id == QRGN_SETELLIPSE ) {
+	    QRect r;
+	    s >> r;
+	    rgn = QRegion( r, id == QRGN_SETRECT ? Rectangle : Ellipse );
+	} else if ( id == QRGN_SETPTARRAY_ALT || id == QRGN_SETPTARRAY_WIND ) {
+	    QPointArray a;
+	    s >> a;
+	    rgn = QRegion( a, id == QRGN_SETPTARRAY_WIND );
+	} else if ( id == QRGN_TRANSLATE ) {
+	    QPoint p;
+	    s >> p;
+	    rgn.translate( p.x(), p.y() );
+	} else if ( id >= QRGN_OR && id <= QRGN_XOR ) {
+	    QByteArray bop1, bop2;
+	    QRegion r1, r2;
+	    s >> bop1;	r1.exec( bop1 );
+	    s >> bop2;	r2.exec( bop2 );
+	    switch ( id ) {
+		case QRGN_OR:
+		    rgn = r1.unite( r2 );
+		    break;
+		case QRGN_AND:
+		    rgn = r1.intersect( r2 );
+		    break;
+		case QRGN_SUB:
+		    rgn = r1.subtract( r2 );
+		    break;
+		case QRGN_XOR:
+		    rgn = r1.eor( r2 );
+		    break;
+	    }
+	} else if ( id == QRGN_RECTS ) {
+	    // (This is the only form used in Qt 2.0)
+	    Q_UINT32 n;
+	    s >> n;
+	    QRect r;
+	    for ( int i=0; i<(int)n; i++ ) {
+		s >> r;
+		rgn = rgn.unite( QRegion(r) );
+	    }
+	}
+    }
+    buf.close();
+    *this = rgn;
+}
+
+
+/*****************************************************************************
+  QRegion stream functions
+ *****************************************************************************/
+
+/*!
+  \relates QRegion
+  Writes the region \a r to the stream \a s and returns a reference to 
+  the stream.
+
+  \sa \link datastreamformat.html Format of the QDataStream operators \endlink
+*/
+
+QDataStream &operator<<( QDataStream &s, const QRegion &r )
+{
+    QArray<QRect> a = r.rects();
+    if ( a.isEmpty() ) {
+	s << (Q_UINT32)0;
+    } else {
+	if ( s.version() == 1 ) {
+	    int i;
+	    for ( i=(int)a.size()-1; i>0; i-- ) {
+		s << (Q_UINT32)(12+i*24);
+		s << (int)QRGN_OR;
+	    }
+	    for ( i=0; i<(int)a.size(); i++ ) {
+		s << (Q_UINT32)(4+8) << (int)QRGN_SETRECT << a[i];
+	    }
+	}
+	else {
+	    s << (Q_UINT32)(4+4+16*a.size()); // 16: storage size of QRect
+	    s << (Q_INT32)QRGN_RECTS;
+	    s << (Q_UINT32)a.size();
+	    for ( int i=0; i<(int)a.size(); i++ )
+		s << a[i];
+	}
+    }
+    return s;
+}
+
+/*!
+  \relates QRegion
+  Reads a region from the stream \a s into \a r and returns a 
+  reference to the stream.
+
+  \sa \link datastreamformat.html Format of the QDataStream operators \endlink
+*/
+
+QDataStream &operator>>( QDataStream &s, QRegion &r )
+{
+    QByteArray b;
+    s >> b;
+    r.exec( b, s.version() );
+    return s;
+}
+#endif //QT_NO_DATASTREAM
+
+// These are not inline - they can be implemented better on some platforms
+//  (eg. Windows at least provides 3-variable operations).  For now, simple.
+
+
+/*! \c r1|r2 is equivalent to \c r1.unite(r2) 
+ \sa unite(), operator+()
+ */
+QRegion QRegion::operator|( const QRegion &r ) const
+    { return unite(r); }
+
+/*! \c r1+r2 is equivalent to \c r1.unite(r2) 
+ \sa unite(), operator|() 
+ */
+QRegion QRegion::operator+( const QRegion &r ) const
+    { return unite(r); }
+
+/*! \c r1&r2 is equivalent to \c r1.intersect(r2) 
+ \sa intersect()
+*/
+QRegion QRegion::operator&( const QRegion &r ) const
+    { return intersect(r); }
+
+/*! \c r1-r2 is equivalent to \c r1.subtract(r2) 
+ \sa subtract()
+*/
+QRegion QRegion::operator-( const QRegion &r ) const
+    { return subtract(r); }
+
+/*! \c r1^r2 is equivalent to \c r1.eor(r2) 
+ \sa eor()
+*/
+QRegion QRegion::operator^( const QRegion &r ) const
+    { return eor(r); }
+
+/*! \c r1|=r2 is equivalent to \c r1=r1.unite(r2) 
+ \sa unite()
+*/
+QRegion& QRegion::operator|=( const QRegion &r )
+    { return *this = *this | r; }
+
+/*! \c r1+=r2 is equivalent to \c r1=r1.unite(r2) 
+ \sa intersect()
+*/
+QRegion& QRegion::operator+=( const QRegion &r )
+    { return *this = *this + r; }
+
+/*! \c r1&=r2 is equivalent to \c r1=r1.intersect(r2) 
+ \sa intersect()
+*/
+QRegion& QRegion::operator&=( const QRegion &r )
+    { return *this = *this & r; }
+
+/*! \c r1-=r2 is equivalent to \c r1=r1.subtract(r2) 
+ \sa subtract()
+*/
+QRegion& QRegion::operator-=( const QRegion &r )
+    { return *this = *this - r; }
+
+/*! \c r1^=r2 is equivalent to \c r1=r1.eor(r2) 
+ \sa eor()
+*/
+QRegion& QRegion::operator^=( const QRegion &r )
+    { return *this = *this ^ r; }
+
diff --git a/WebCore/kwq/qt/_qregion.h b/WebCore/kwq/qt/_qregion.h
new file mode 100644
index 0000000..cb8aa18
--- /dev/null
+++ b/WebCore/kwq/qt/_qregion.h
@@ -0,0 +1,157 @@
+/****************************************************************************
+** $Id$
+**
+** Definition of QRegion class
+**
+** Created : 940514
+**
+** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales at trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info at trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QREGION_H
+#define QREGION_H
+
+#ifndef QT_H
+#include "_qshared.h"
+#include "qrect.h"
+#include "qstring.h"
+#endif // QT_H
+
+
+class Q_EXPORT QRegion
+{
+public:
+    enum RegionType { Rectangle, Ellipse };
+
+    QRegion();
+    QRegion( int x, int y, int w, int h, RegionType = Rectangle );
+    QRegion( const QRect &, RegionType = Rectangle );
+    QRegion( const QPointArray &, bool winding=FALSE );
+    QRegion( const QRegion & );
+// FIXME: Take this out until such time as bitmaps are implemented
+#ifndef _KWQ_COMPLETE_    
+    QRegion( const QBitmap & );
+#endif
+   ~QRegion();
+    QRegion &operator=( const QRegion & );
+
+    bool    isNull()   const;
+    bool    isEmpty()  const;
+
+    bool    contains( const QPoint &p ) const;
+    bool    contains( const QRect &r )	const;
+
+    void    translate( int dx, int dy );
+
+    QRegion unite( const QRegion & )	const;
+    QRegion intersect( const QRegion &) const;
+    QRegion subtract( const QRegion & ) const;
+    QRegion eor( const QRegion & )	const;
+
+    QRect   boundingRect() const;
+    QArray<QRect> rects() const;
+    void setRects( const QRect *, int );
+
+    QRegion operator|( const QRegion & ) const;
+    QRegion operator+( const QRegion & ) const;
+    QRegion operator&( const QRegion & ) const;
+    QRegion operator-( const QRegion & ) const;
+    QRegion operator^( const QRegion & ) const;
+    QRegion& operator|=( const QRegion & );
+    QRegion& operator+=( const QRegion & );
+    QRegion& operator&=( const QRegion & );
+    QRegion& operator-=( const QRegion & );
+    QRegion& operator^=( const QRegion & );
+
+    bool    operator==( const QRegion & )  const;
+    bool    operator!=( const QRegion &r ) const
+			{ return !(operator==(r)); }
+
+#if defined(_WS_WIN_)
+    HRGN    handle() const { return data->rgn; }
+#elif defined(_WS_X11_)
+    Region  handle() const { return data->rgn; }
+#elif defined(_WS_MAC_)
+    void *  handle() const { return data->rgn; }
+#elif defined(_WS_QWS_)
+    // QGfx_QWS needs this for region drawing
+    void * handle() const { return data->rgn; }
+#endif
+
+#ifndef QT_NO_DATASTREAM
+    friend Q_EXPORT QDataStream &operator<<( QDataStream &, const QRegion & );
+    friend Q_EXPORT QDataStream &operator>>( QDataStream &, QRegion & );
+#endif
+private:
+    QRegion( bool );
+    QRegion copy() const;
+    void    detach();
+#if defined(_WS_WIN_)
+    QRegion winCombine( const QRegion &, int ) const;
+#endif
+    void    exec( const QByteArray &, int ver = 0 );
+    struct QRegionData : public QShared {
+#if defined(_WS_WIN_)
+	HRGN   rgn;
+#elif defined(_WS_X11_)
+	Region rgn;
+#elif defined(_WS_MAC_)
+        void * rgn;
+#elif defined(_WS_QWS_)
+        void * rgn;
+#endif
+	bool   is_null;
+    } *data;
+};
+
+
+#define QRGN_SETRECT		1		// region stream commands
+#define QRGN_SETELLIPSE		2		//  (these are internal)
+#define QRGN_SETPTARRAY_ALT	3
+#define QRGN_SETPTARRAY_WIND	4
+#define QRGN_TRANSLATE		5
+#define QRGN_OR			6
+#define QRGN_AND		7
+#define QRGN_SUB		8
+#define QRGN_XOR		9
+#define QRGN_RECTS	       10
+
+
+/*****************************************************************************
+  QRegion stream functions
+ *****************************************************************************/
+
+#ifndef QT_NO_DATASTREAM
+Q_EXPORT QDataStream &operator<<( QDataStream &, const QRegion & );
+Q_EXPORT QDataStream &operator>>( QDataStream &, QRegion & );
+#endif
+
+
+#endif // QREGION_H
diff --git a/WebCore/kwq/qt/qregion.h b/WebCore/kwq/qt/qregion.h
index f064442..497025e 100644
--- a/WebCore/kwq/qt/qregion.h
+++ b/WebCore/kwq/qt/qregion.h
@@ -30,6 +30,12 @@
 #include <config.h>
 #endif
 
+// _KWQ_COMPLETE_ ==============================================================
+
+#ifdef _KWQ_COMPLETE_
+#include <_qregion.h>
+#else
+
 #include "qpoint.h"
 #include "qimage.h"
 #include "qrect.h"
@@ -72,4 +78,6 @@ public:
 
 }; // class QRegion ============================================================
 
+#endif // _KWQ_COMPLETE_
+
 #endif
diff --git a/WebCore/src/kwq/qt/_qregion.cpp b/WebCore/src/kwq/qt/_qregion.cpp
new file mode 100644
index 0000000..3f1f92c
--- /dev/null
+++ b/WebCore/src/kwq/qt/_qregion.cpp
@@ -0,0 +1,339 @@
+/****************************************************************************
+** $Id$
+**
+** Implementation of QRegion class
+**
+** Created : 950726
+**
+** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales at trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info at trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qregion.h"
+#include "qpoint.h"
+#include "qbuffer.h"
+
+#ifndef QT_NO_DATASTREAM
+#include "qdatastream.h"
+#endif
+
+// BEING REVISED: paul
+/*!
+  \class QRegion qregion.h
+  \brief The QRegion class specifies a clip region for a painter.
+
+  \ingroup drawing
+
+  QRegion is used with QPainter::setClipRegion() to limit the paint area to what
+  needs to be painted. There is also a QWidget::repaint() that takes a QRegion parameter.
+  QRegion is the best tool for reducing flicker.
+
+  
+  
+  A region can be created from a rectangle, an ellipse, a polygon or a
+  bitmap. Complex regions may be created by combining simple regions,
+  using unite(), intersect(), subtract() or eor() (exclusive or). Use
+  translate() to move a region.
+  
+  You can test if a region isNull(), isEmpty() or if it contains() 
+  a QPoint or QRect. The bounding rectangle is given by boundingRect().
+  
+  The function rects() gives a decomposition of the region into rectangles.
+
+  Example of using complex regions:
+  \code
+    void MyWidget::paintEvent( QPaintEvent * )
+    {
+	QPainter p;				// our painter
+	QRegion r1( QRect(100,100,200,80),	// r1 = elliptic region
+		    QRegion::Ellipse );
+	QRegion r2( QRect(100,120,90,30) );	// r2 = rectangular region
+	QRegion r3 = r1.intersect( r2 );	// r3 = intersection
+	p.begin( this );			// start painting widget
+	p.setClipRegion( r3 );			// set clip region
+	...					// paint clipped graphics
+	p.end();				// painting done
+    }
+  \endcode
+
+  QRegion is an \link shclass.html implicitely shared\endlink class.
+    
+  Due to window system limitations, the width and height of a region
+  is limited to 65535 on Unix/X11.
+
+  \sa QPainter::setClipRegion(), QPainter::setClipRect()
+*/
+
+
+/*! \enum QRegion::RegionType
+  Determines the shape of the region to be created.
+  <ul>
+  <li>\c Rectangle - the region covers the entire rectangle
+  <li>\c Ellipse - the region is an ellipse inside the rectangle
+  </ul> 
+ */
+
+
+/*****************************************************************************
+  QRegion member functions
+ *****************************************************************************/
+
+/*!
+  Constructs a rectangular or elliptic region.
+
+  If \a t is \c Rectangle, the region is the filled rectangle (\a x,
+  \a y, \a w, \a h). If \a t is \c Ellipse, the region is the filled
+  ellipse ellipse with center at (\a x + \a w / 2, \a y + \a h / 2) and 
+  size (\a w ,\a h ).
+
+*/
+QRegion::QRegion( int x, int y, int w, int h, RegionType t )
+{
+    QRegion tmp(QRect(x,y,w,h),t);
+    tmp.data->ref();
+    data = tmp.data;
+}
+
+/*!
+  Detaches from shared region data to makes sure that this region is the
+  only one referring the data.
+
+  \sa copy(), \link shclass.html shared classes\endlink
+*/
+
+void QRegion::detach()
+{
+    if ( data->count != 1 )
+	*this = copy();
+}
+
+#ifndef QT_NO_DATASTREAM
+/*!
+  Executes region commands in the internal buffer and rebuild the original
+  region.
+
+  We do this when we read a region from the data stream.
+
+  If \a ver is non-0, uses the format version \a ver on reading the
+  byte array.
+
+*/
+
+void QRegion::exec( const QByteArray &buffer, int ver )
+{
+    QBuffer buf( buffer );
+    QDataStream s( &buf );
+    if ( ver )
+	s.setVersion( ver );
+    buf.open( IO_ReadOnly );
+    QRegion rgn;
+#if defined(CHECK_STATE)
+    int test_cnt = 0;
+#endif
+    while ( !s.eof() ) {
+	Q_INT32 id;
+	if ( s.version() == 1 ) {
+	    int id_int;
+	    s >> id_int;
+	    id = id_int;
+	} else {
+	    s >> id;
+	}
+#if defined(CHECK_STATE)
+	if ( test_cnt > 0 && id != QRGN_TRANSLATE )
+	    qWarning( "QRegion::exec: Internal error" );
+	test_cnt++;
+#endif
+	if ( id == QRGN_SETRECT || id == QRGN_SETELLIPSE ) {
+	    QRect r;
+	    s >> r;
+	    rgn = QRegion( r, id == QRGN_SETRECT ? Rectangle : Ellipse );
+	} else if ( id == QRGN_SETPTARRAY_ALT || id == QRGN_SETPTARRAY_WIND ) {
+	    QPointArray a;
+	    s >> a;
+	    rgn = QRegion( a, id == QRGN_SETPTARRAY_WIND );
+	} else if ( id == QRGN_TRANSLATE ) {
+	    QPoint p;
+	    s >> p;
+	    rgn.translate( p.x(), p.y() );
+	} else if ( id >= QRGN_OR && id <= QRGN_XOR ) {
+	    QByteArray bop1, bop2;
+	    QRegion r1, r2;
+	    s >> bop1;	r1.exec( bop1 );
+	    s >> bop2;	r2.exec( bop2 );
+	    switch ( id ) {
+		case QRGN_OR:
+		    rgn = r1.unite( r2 );
+		    break;
+		case QRGN_AND:
+		    rgn = r1.intersect( r2 );
+		    break;
+		case QRGN_SUB:
+		    rgn = r1.subtract( r2 );
+		    break;
+		case QRGN_XOR:
+		    rgn = r1.eor( r2 );
+		    break;
+	    }
+	} else if ( id == QRGN_RECTS ) {
+	    // (This is the only form used in Qt 2.0)
+	    Q_UINT32 n;
+	    s >> n;
+	    QRect r;
+	    for ( int i=0; i<(int)n; i++ ) {
+		s >> r;
+		rgn = rgn.unite( QRegion(r) );
+	    }
+	}
+    }
+    buf.close();
+    *this = rgn;
+}
+
+
+/*****************************************************************************
+  QRegion stream functions
+ *****************************************************************************/
+
+/*!
+  \relates QRegion
+  Writes the region \a r to the stream \a s and returns a reference to 
+  the stream.
+
+  \sa \link datastreamformat.html Format of the QDataStream operators \endlink
+*/
+
+QDataStream &operator<<( QDataStream &s, const QRegion &r )
+{
+    QArray<QRect> a = r.rects();
+    if ( a.isEmpty() ) {
+	s << (Q_UINT32)0;
+    } else {
+	if ( s.version() == 1 ) {
+	    int i;
+	    for ( i=(int)a.size()-1; i>0; i-- ) {
+		s << (Q_UINT32)(12+i*24);
+		s << (int)QRGN_OR;
+	    }
+	    for ( i=0; i<(int)a.size(); i++ ) {
+		s << (Q_UINT32)(4+8) << (int)QRGN_SETRECT << a[i];
+	    }
+	}
+	else {
+	    s << (Q_UINT32)(4+4+16*a.size()); // 16: storage size of QRect
+	    s << (Q_INT32)QRGN_RECTS;
+	    s << (Q_UINT32)a.size();
+	    for ( int i=0; i<(int)a.size(); i++ )
+		s << a[i];
+	}
+    }
+    return s;
+}
+
+/*!
+  \relates QRegion
+  Reads a region from the stream \a s into \a r and returns a 
+  reference to the stream.
+
+  \sa \link datastreamformat.html Format of the QDataStream operators \endlink
+*/
+
+QDataStream &operator>>( QDataStream &s, QRegion &r )
+{
+    QByteArray b;
+    s >> b;
+    r.exec( b, s.version() );
+    return s;
+}
+#endif //QT_NO_DATASTREAM
+
+// These are not inline - they can be implemented better on some platforms
+//  (eg. Windows at least provides 3-variable operations).  For now, simple.
+
+
+/*! \c r1|r2 is equivalent to \c r1.unite(r2) 
+ \sa unite(), operator+()
+ */
+QRegion QRegion::operator|( const QRegion &r ) const
+    { return unite(r); }
+
+/*! \c r1+r2 is equivalent to \c r1.unite(r2) 
+ \sa unite(), operator|() 
+ */
+QRegion QRegion::operator+( const QRegion &r ) const
+    { return unite(r); }
+
+/*! \c r1&r2 is equivalent to \c r1.intersect(r2) 
+ \sa intersect()
+*/
+QRegion QRegion::operator&( const QRegion &r ) const
+    { return intersect(r); }
+
+/*! \c r1-r2 is equivalent to \c r1.subtract(r2) 
+ \sa subtract()
+*/
+QRegion QRegion::operator-( const QRegion &r ) const
+    { return subtract(r); }
+
+/*! \c r1^r2 is equivalent to \c r1.eor(r2) 
+ \sa eor()
+*/
+QRegion QRegion::operator^( const QRegion &r ) const
+    { return eor(r); }
+
+/*! \c r1|=r2 is equivalent to \c r1=r1.unite(r2) 
+ \sa unite()
+*/
+QRegion& QRegion::operator|=( const QRegion &r )
+    { return *this = *this | r; }
+
+/*! \c r1+=r2 is equivalent to \c r1=r1.unite(r2) 
+ \sa intersect()
+*/
+QRegion& QRegion::operator+=( const QRegion &r )
+    { return *this = *this + r; }
+
+/*! \c r1&=r2 is equivalent to \c r1=r1.intersect(r2) 
+ \sa intersect()
+*/
+QRegion& QRegion::operator&=( const QRegion &r )
+    { return *this = *this & r; }
+
+/*! \c r1-=r2 is equivalent to \c r1=r1.subtract(r2) 
+ \sa subtract()
+*/
+QRegion& QRegion::operator-=( const QRegion &r )
+    { return *this = *this - r; }
+
+/*! \c r1^=r2 is equivalent to \c r1=r1.eor(r2) 
+ \sa eor()
+*/
+QRegion& QRegion::operator^=( const QRegion &r )
+    { return *this = *this ^ r; }
+
diff --git a/WebCore/src/kwq/qt/_qregion.h b/WebCore/src/kwq/qt/_qregion.h
new file mode 100644
index 0000000..cb8aa18
--- /dev/null
+++ b/WebCore/src/kwq/qt/_qregion.h
@@ -0,0 +1,157 @@
+/****************************************************************************
+** $Id$
+**
+** Definition of QRegion class
+**
+** Created : 940514
+**
+** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales at trolltech.com for
+**   information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info at trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QREGION_H
+#define QREGION_H
+
+#ifndef QT_H
+#include "_qshared.h"
+#include "qrect.h"
+#include "qstring.h"
+#endif // QT_H
+
+
+class Q_EXPORT QRegion
+{
+public:
+    enum RegionType { Rectangle, Ellipse };
+
+    QRegion();
+    QRegion( int x, int y, int w, int h, RegionType = Rectangle );
+    QRegion( const QRect &, RegionType = Rectangle );
+    QRegion( const QPointArray &, bool winding=FALSE );
+    QRegion( const QRegion & );
+// FIXME: Take this out until such time as bitmaps are implemented
+#ifndef _KWQ_COMPLETE_    
+    QRegion( const QBitmap & );
+#endif
+   ~QRegion();
+    QRegion &operator=( const QRegion & );
+
+    bool    isNull()   const;
+    bool    isEmpty()  const;
+
+    bool    contains( const QPoint &p ) const;
+    bool    contains( const QRect &r )	const;
+
+    void    translate( int dx, int dy );
+
+    QRegion unite( const QRegion & )	const;
+    QRegion intersect( const QRegion &) const;
+    QRegion subtract( const QRegion & ) const;
+    QRegion eor( const QRegion & )	const;
+
+    QRect   boundingRect() const;
+    QArray<QRect> rects() const;
+    void setRects( const QRect *, int );
+
+    QRegion operator|( const QRegion & ) const;
+    QRegion operator+( const QRegion & ) const;
+    QRegion operator&( const QRegion & ) const;
+    QRegion operator-( const QRegion & ) const;
+    QRegion operator^( const QRegion & ) const;
+    QRegion& operator|=( const QRegion & );
+    QRegion& operator+=( const QRegion & );
+    QRegion& operator&=( const QRegion & );
+    QRegion& operator-=( const QRegion & );
+    QRegion& operator^=( const QRegion & );
+
+    bool    operator==( const QRegion & )  const;
+    bool    operator!=( const QRegion &r ) const
+			{ return !(operator==(r)); }
+
+#if defined(_WS_WIN_)
+    HRGN    handle() const { return data->rgn; }
+#elif defined(_WS_X11_)
+    Region  handle() const { return data->rgn; }
+#elif defined(_WS_MAC_)
+    void *  handle() const { return data->rgn; }
+#elif defined(_WS_QWS_)
+    // QGfx_QWS needs this for region drawing
+    void * handle() const { return data->rgn; }
+#endif
+
+#ifndef QT_NO_DATASTREAM
+    friend Q_EXPORT QDataStream &operator<<( QDataStream &, const QRegion & );
+    friend Q_EXPORT QDataStream &operator>>( QDataStream &, QRegion & );
+#endif
+private:
+    QRegion( bool );
+    QRegion copy() const;
+    void    detach();
+#if defined(_WS_WIN_)
+    QRegion winCombine( const QRegion &, int ) const;
+#endif
+    void    exec( const QByteArray &, int ver = 0 );
+    struct QRegionData : public QShared {
+#if defined(_WS_WIN_)
+	HRGN   rgn;
+#elif defined(_WS_X11_)
+	Region rgn;
+#elif defined(_WS_MAC_)
+        void * rgn;
+#elif defined(_WS_QWS_)
+        void * rgn;
+#endif
+	bool   is_null;
+    } *data;
+};
+
+
+#define QRGN_SETRECT		1		// region stream commands
+#define QRGN_SETELLIPSE		2		//  (these are internal)
+#define QRGN_SETPTARRAY_ALT	3
+#define QRGN_SETPTARRAY_WIND	4
+#define QRGN_TRANSLATE		5
+#define QRGN_OR			6
+#define QRGN_AND		7
+#define QRGN_SUB		8
+#define QRGN_XOR		9
+#define QRGN_RECTS	       10
+
+
+/*****************************************************************************
+  QRegion stream functions
+ *****************************************************************************/
+
+#ifndef QT_NO_DATASTREAM
+Q_EXPORT QDataStream &operator<<( QDataStream &, const QRegion & );
+Q_EXPORT QDataStream &operator>>( QDataStream &, QRegion & );
+#endif
+
+
+#endif // QREGION_H
diff --git a/WebCore/src/kwq/qt/qregion.h b/WebCore/src/kwq/qt/qregion.h
index f064442..497025e 100644
--- a/WebCore/src/kwq/qt/qregion.h
+++ b/WebCore/src/kwq/qt/qregion.h
@@ -30,6 +30,12 @@
 #include <config.h>
 #endif
 
+// _KWQ_COMPLETE_ ==============================================================
+
+#ifdef _KWQ_COMPLETE_
+#include <_qregion.h>
+#else
+
 #include "qpoint.h"
 #include "qimage.h"
 #include "qrect.h"
@@ -72,4 +78,6 @@ public:
 
 }; // class QRegion ============================================================
 
+#endif // _KWQ_COMPLETE_
+
 #endif

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list