Export QTextImageHandler and add accessor for image
[profile/ivi/qtbase.git] / src / gui / text / qstatictext_p.h
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 test suite of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QSTATICTEXT_P_H
43 #define QSTATICTEXT_P_H
44
45 //
46 //  W A R N I N G
47 //  -------------
48 //
49 // This file is not part of the Qt API.  It exists for the convenience
50 // of internal files.  This header file may change from version to version
51 // without notice, or even be removed.
52 //
53 // We mean it.
54 //
55
56 #include "qstatictext.h"
57
58 #include <private/qtextureglyphcache_p.h>
59 #include <QtGui/qcolor.h>
60
61 QT_BEGIN_NAMESPACE
62
63 class QStaticTextUserData
64 {
65 public:
66     enum Type {
67         NoUserData,
68         OpenGLUserData
69     };
70
71     QStaticTextUserData(Type t) : type(t) { ref = 0; }
72     virtual ~QStaticTextUserData() {}
73
74     QAtomicInt ref;
75     Type type;
76 };
77
78 class Q_GUI_EXPORT QStaticTextItem
79 {
80 public:    
81     QStaticTextItem() : chars(0), numChars(0), useBackendOptimizations(false),
82                         userDataNeedsUpdate(0), m_fontEngine(0), m_userData(0) {}
83
84     QStaticTextItem(const QStaticTextItem &other)
85     {
86         operator=(other);
87     }
88
89     void operator=(const QStaticTextItem &other)
90     {
91         glyphPositions = other.glyphPositions;
92         glyphs = other.glyphs;
93         chars = other.chars;
94         numGlyphs = other.numGlyphs;
95         numChars = other.numChars;
96         font = other.font;
97         color = other.color;
98         useBackendOptimizations = other.useBackendOptimizations;
99         userDataNeedsUpdate = other.userDataNeedsUpdate;
100
101         m_fontEngine = 0;
102         m_userData = 0;
103         setUserData(other.userData());
104         setFontEngine(other.fontEngine());
105     }
106
107     ~QStaticTextItem();
108
109     void setUserData(QStaticTextUserData *newUserData)
110     {
111         if (m_userData == newUserData)
112             return;
113
114         if (m_userData != 0 && !m_userData->ref.deref())
115             delete m_userData;
116
117         m_userData = newUserData;
118         if (m_userData != 0)
119             m_userData->ref.ref();
120     }
121     QStaticTextUserData *userData() const { return m_userData; }
122
123     void setFontEngine(QFontEngine *fe);
124     QFontEngine *fontEngine() const { return m_fontEngine; }
125
126     union {
127         QFixedPoint *glyphPositions;             // 8 bytes per glyph
128         int positionOffset;
129     };
130     union {
131         glyph_t *glyphs;                         // 4 bytes per glyph
132         int glyphOffset;
133     };
134     union {
135         QChar *chars;                            // 2 bytes per glyph
136         int charOffset;
137     };
138                                                  // =================
139                                                  // 14 bytes per glyph
140
141                                                  // 12 bytes for pointers
142     int numGlyphs;                               // 4 bytes per item
143     int numChars;                                // 4 bytes per item
144     QFont font;                                  // 8 bytes per item
145     QColor color;                                // 10 bytes per item
146     char useBackendOptimizations : 1;            // 1 byte per item
147     char userDataNeedsUpdate : 1;                //
148                                                  // ================
149                                                  // 51 bytes per item
150
151 private: // Needs special handling in setters, so private to avoid abuse
152     QFontEngine *m_fontEngine;                     // 4 bytes per item
153     QStaticTextUserData *m_userData;               // 8 bytes per item
154
155 };
156
157 class QStaticText;
158 class Q_AUTOTEST_EXPORT QStaticTextPrivate
159 {
160 public:
161     QStaticTextPrivate();
162     QStaticTextPrivate(const QStaticTextPrivate &other);
163     ~QStaticTextPrivate();
164
165     void init();
166     void paintText(const QPointF &pos, QPainter *p);
167
168     void invalidate()
169     {
170         needsRelayout = true;
171     }
172
173     QAtomicInt ref;                      // 4 bytes per text
174
175     QString text;                        // 4 bytes per text
176     QFont font;                          // 8 bytes per text
177     qreal textWidth;                     // 8 bytes per text
178     QSizeF actualSize;                   // 16 bytes per text
179     QPointF position;                    // 16 bytes per text
180
181     QTransform matrix;                   // 80 bytes per text
182     QStaticTextItem *items;              // 4 bytes per text
183     int itemCount;                       // 4 bytes per text
184
185     glyph_t *glyphPool;                  // 4 bytes per text
186     QFixedPoint *positionPool;           // 4 bytes per text
187     QChar *charPool;                     // 4 bytes per text
188
189     QTextOption textOption;              // 28 bytes per text
190
191     unsigned char needsRelayout            : 1; // 1 byte per text
192     unsigned char useBackendOptimizations  : 1;
193     unsigned char textFormat               : 2;
194     unsigned char untransformedCoordinates : 1;
195                                          // ================
196                                          // 195 bytes per text
197
198     static QStaticTextPrivate *get(const QStaticText *q);
199 };
200
201 QT_END_NAMESPACE
202
203 #endif // QSTATICTEXT_P_H