Qt 4.8
qgl2pexvertexarray_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtOpenGL module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 //
43 // W A R N I N G
44 // -------------
45 //
46 // This file is not part of the Qt API. It exists purely as an
47 // implementation detail. This header file may change from version to
48 // version without notice, or even be removed.
49 //
50 // We mean it.
51 //
52 
53 #ifndef QGL2PEXVERTEXARRAY_P_H
54 #define QGL2PEXVERTEXARRAY_P_H
55 
56 #include <QRectF>
57 
58 #include <private/qdatabuffer_p.h>
59 #include <private/qvectorpath_p.h>
60 #include <private/qgl_p.h>
61 
63 
64 class QGLPoint
65 {
66 public:
67  QGLPoint(GLfloat new_x, GLfloat new_y) :
68  x(new_x), y(new_y) {};
69 
70  QGLPoint(const QPointF &p) :
71  x(p.x()), y(p.y()) {};
72 
73  QGLPoint(const QPointF* p) :
74  x(p->x()), y(p->y()) {};
75 
76  GLfloat x;
77  GLfloat y;
78 
79  operator QPointF() {return QPointF(x,y);}
80  operator QPointF() const {return QPointF(x,y);}
81 };
82 
83 struct QGLRect
84 {
85  QGLRect(const QRectF &r)
86  : left(r.left()), top(r.top()), right(r.right()), bottom(r.bottom()) {}
87 
88  QGLRect(GLfloat l, GLfloat t, GLfloat r, GLfloat b)
89  : left(l), top(t), right(r), bottom(b) {}
90 
91  GLfloat left;
92  GLfloat top;
93  GLfloat right;
94  GLfloat bottom;
95 
96  operator QRectF() const {return QRectF(left, top, right-left, bottom-top);}
97 };
98 
100 {
101 public:
103  vertexArray(0), vertexArrayStops(0),
104  maxX(-2e10), maxY(-2e10), minX(2e10), minY(2e10),
105  boundingRectDirty(true)
106  { }
107 
108  inline void addRect(const QRectF &rect)
109  {
110  qreal top = rect.top();
111  qreal left = rect.left();
112  qreal bottom = rect.bottom();
113  qreal right = rect.right();
114 
115  vertexArray << QGLPoint(left, top)
116  << QGLPoint(right, top)
117  << QGLPoint(right, bottom)
118  << QGLPoint(right, bottom)
119  << QGLPoint(left, bottom)
120  << QGLPoint(left, top);
121  }
122 
123  inline void addQuad(const QRectF &rect)
124  {
125  qreal top = rect.top();
126  qreal left = rect.left();
127  qreal bottom = rect.bottom();
128  qreal right = rect.right();
129 
130  vertexArray << QGLPoint(left, top)
131  << QGLPoint(right, top)
132  << QGLPoint(left, bottom)
133  << QGLPoint(right, bottom);
134 
135  }
136 
137  inline void addVertex(const GLfloat x, const GLfloat y)
138  {
139  vertexArray.add(QGLPoint(x, y));
140  }
141 
142  void addPath(const QVectorPath &path, GLfloat curveInverseScale, bool outline = true);
143  void clear();
144 
145  QGLPoint* data() {return vertexArray.data();}
146  int *stops() const { return vertexArrayStops.data(); }
147  int stopCount() const { return vertexArrayStops.size(); }
148  QGLRect boundingRect() const;
149 
150  int vertexCount() const { return vertexArray.size(); }
151 
152  void lineToArray(const GLfloat x, const GLfloat y);
153 
154 private:
157 
158  GLfloat maxX;
159  GLfloat maxY;
160  GLfloat minX;
161  GLfloat minY;
163  void addClosingLine(int index);
164  void addCentroid(const QVectorPath &path, int subPathIndex);
165 };
166 
168 
169 #endif
void addVertex(const GLfloat x, const GLfloat y)
qreal right() const
Returns the x-coordinate of the rectangle&#39;s right edge.
Definition: qrect.h:527
double qreal
Definition: qglobal.h:1193
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
QGLRect(GLfloat l, GLfloat t, GLfloat r, GLfloat b)
QGLPoint(GLfloat new_x, GLfloat new_y)
The QPointF class defines a point in the plane using floating point precision.
Definition: qpoint.h:214
void addRect(const QRectF &rect)
qreal left() const
Returns the x-coordinate of the rectangle&#39;s left edge.
Definition: qrect.h:525
static void clear(QVariant::Private *d)
Definition: qvariant.cpp:197
Q_CORE_EXPORT QTextStream & right(QTextStream &s)
static const QRectF boundingRect(const QPointF *points, int pointCount)
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
The QRectF class defines a rectangle in the plane using floating point precision. ...
Definition: qrect.h:511
QGLRect(const QRectF &r)
QGLPoint(const QPointF *p)
QGLPoint(const QPointF &p)
QFactoryLoader * l
quint16 index
QDataBuffer< QGLPoint > vertexArray
qreal top() const
Returns the y-coordinate of the rectangle&#39;s top edge.
Definition: qrect.h:526
qreal bottom() const
Returns the y-coordinate of the rectangle&#39;s bottom edge.
Definition: qrect.h:528
QDataBuffer< int > vertexArrayStops
Q_CORE_EXPORT QTextStream & left(QTextStream &s)
void addQuad(const QRectF &rect)