source: trunk/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 5.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the QtOpenGL module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
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
62QT_BEGIN_NAMESPACE
63
64class QGLPoint
65{
66public:
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
83struct 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
99class QGL2PEXVertexArray
100{
101public:
102 QGL2PEXVertexArray() :
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
154private:
155 QDataBuffer<QGLPoint> vertexArray;
156 QDataBuffer<int> vertexArrayStops;
157
158 GLfloat maxX;
159 GLfloat maxY;
160 GLfloat minX;
161 GLfloat minY;
162 bool boundingRectDirty;
163 void addClosingLine(int index);
164 void addCentroid(const QVectorPath &path, int subPathIndex);
165};
166
167QT_END_NAMESPACE
168
169#endif
Note: See TracBrowser for help on using the repository browser.