Qt 4.8
qstatictext_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 test suite 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 #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 
62 
64 {
65 public:
66  enum Type {
69  };
70 
71  QStaticTextUserData(Type t) : type(t) { ref = 0; }
72  virtual ~QStaticTextUserData() {}
73 
76 };
77 
79 {
80 public:
81  QStaticTextItem() : chars(0), numChars(0), useBackendOptimizations(false),
82  userDataNeedsUpdate(0), m_fontEngine(0), m_userData(0) {}
83 
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
129  };
130  union {
131  glyph_t *glyphs; // 4 bytes per glyph
133  };
134  union {
135  QChar *chars; // 2 bytes per glyph
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;
159 {
160 public:
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 
202 
203 #endif // QSTATICTEXT_P_H
The QPainter class performs low-level painting on widgets and other paint devices.
Definition: qpainter.h:86
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition: qcolor.h:67
void setUserData(QStaticTextUserData *newUserData)
double qreal
Definition: qglobal.h:1193
The QStaticText class enables optimized drawing of text when the text and its layout is updated rarel...
Definition: qstatictext.h:60
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
QFontEngine * fontEngine() const
The QAtomicInt class provides platform-independent atomic operations on integers. ...
Definition: qatomic.h:55
QFixedPoint * positionPool
QFixedPoint * glyphPositions
#define Q_GUI_EXPORT
Definition: qglobal.h:1450
unsigned char untransformedCoordinates
The QPointF class defines a point in the plane using floating point precision.
Definition: qpoint.h:214
QStaticTextItem * items
void operator=(const QStaticTextItem &other)
Definition: qstatictext_p.h:89
bool ref()
Atomically increments the value of this QAtomicInt.
The QString class provides a Unicode character string.
Definition: qstring.h:83
The QSizeF class defines the size of a two-dimensional object using floating point precision...
Definition: qsize.h:202
The QChar class provides a 16-bit Unicode character.
Definition: qchar.h:72
QTextOption textOption
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
char useBackendOptimizations
static bool init
QStaticTextUserData * m_userData
QStaticTextUserData(Type t)
Definition: qstatictext_p.h:71
QFontEngine * m_fontEngine
virtual ~QStaticTextUserData()
Definition: qstatictext_p.h:72
QStaticTextItem(const QStaticTextItem &other)
Definition: qstatictext_p.h:84
unsigned char textFormat
The QFont class specifies a font used for drawing text.
Definition: qfont.h:64
#define Q_AUTOTEST_EXPORT
Definition: qglobal.h:1510
The QTextOption class provides a description of general rich text properties.
Definition: qtextoption.h:59
unsigned char useBackendOptimizations
QStaticTextUserData * userData() const
unsigned char needsRelayout
unsigned int glyph_t
The QTransform class specifies 2D transformations of a coordinate system.
Definition: qtransform.h:65
glyph_t * glyphs