Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquicktext_p_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QQUICKTEXT_P_P_H
6#define QQUICKTEXT_P_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include "qquicktext_p.h"
21
22#include <QtQml/qqml.h>
23#include <QtGui/qabstracttextdocumentlayout.h>
24#include <QtGui/qtextlayout.h>
25#include <private/qquickstyledtext_p.h>
26#include <private/qlazilyallocated_p.h>
27#include <private/qquicktextdocument_p.h>
28
30
31class QTextLayout;
32
33class Q_QUICK_EXPORT QQuickTextPrivate : public QQuickImplicitSizeItemPrivate
34{
35 Q_DECLARE_PUBLIC(QQuickText)
36public:
37 QQuickTextPrivate();
38 ~QQuickTextPrivate();
39 void init();
40
41 void updateBaseline(qreal baseline, qreal dy);
42 void updateSize();
43 void signalSizeChange(const QSizeF &previousSize);
44 void updateLayout();
45 void scheduleUpdatePaintNode();
46 bool determineHorizontalAlignment();
47 bool setHAlign(QQuickText::HAlignment, bool forceAlign = false);
48 void mirrorChange() override;
49 bool isLineLaidOutConnected();
50 void setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height);
51 void positionInlineImages(const QTextLine &line, const QList<QTextLayout::FormatRange> &formats);
52
53 int lineHeightOffset() const;
54 QString elidedText(qreal lineWidth, const QTextLine &line) const;
55 void elideFormats(int start, int length, int offset, QList<QTextLayout::FormatRange> *elidedFormats);
56 void clearFormats();
57
58 void processHoverEvent(QHoverEvent *event);
59 bool transformChanged(QQuickItem *transformedItem) override;
60
61 QRectF layedOutTextRect;
62 QSizeF advance;
63
64 struct ExtraData {
65 ExtraData();
66
67 qreal padding;
68 qreal topPadding;
69 qreal leftPadding;
70 qreal rightPadding;
71 qreal bottomPadding;
72 bool explicitTopPadding : 1;
73 bool explicitLeftPadding : 1;
74 bool explicitRightPadding : 1;
75 bool explicitBottomPadding : 1;
76 qreal lineHeight;
77 QTextDocument *doc;
78 QQuickTextImageHandler *imageHandler = nullptr;
79 QString activeLink;
80 QString hoveredLink;
81 QString hoveredToolTip;
82 int minimumPixelSize;
83 int minimumPointSize;
84 int maximumLineCount;
85 int renderTypeQuality;
86 bool lineHeightValid : 1;
87 QQuickText::LineHeightMode lineHeightMode;
88 QQuickText::FontSizeMode fontSizeMode;
89 QList<QQuickStyledTextImgTag*> imgTags;
90 QList<QQuickStyledTextImgTag*> visibleImgTags;
91 QList<QQuickPixmap *> pixmapsInProgress;
92 QUrl baseUrl;
93 };
94 QLazilyAllocated<ExtraData> extra;
95
96 QString text;
97 QFont font;
98 QFont sourceFont;
99 QFontInfo fontInfo;
100
101 QTextLayout layout;
102 QScopedPointer<QTextLayout> elideLayout;
103 QScopedPointer<QQuickTextLine> textLine;
104
105 qreal lineWidth;
106
107 QRgb color;
108 QRgb linkColor;
109 QRgb styleColor;
110
111 int lineCount;
112 int multilengthEos;
113
114 enum UpdateType {
115 UpdateNone,
116 UpdatePreprocess,
117 UpdatePaintNode
118 };
119
120 QQuickText::TextElideMode elideMode;
121 QQuickText::HAlignment hAlign;
122 QQuickText::VAlignment vAlign;
123 QQuickText::TextFormat format;
124 QQuickText::WrapMode wrapMode;
125 QQuickText::TextStyle style;
126 QQuickText::RenderType renderType;
127 UpdateType updateType;
128
129 QString assignedFont;
130
131 bool maximumLineCountValid:1;
132 bool updateOnComponentComplete:1;
133 bool richText:1;
134 bool styledText:1;
135 bool markdownText:1;
136 bool widthExceeded:1;
137 bool heightExceeded:1;
138 bool internalWidthUpdate:1;
139 bool requireImplicitSize:1;
140 bool implicitWidthValid:1;
141 bool implicitHeightValid:1;
142 bool truncated:1;
143 bool hAlignImplicit:1;
144 bool rightToLeftText:1;
145 bool layoutTextElided:1;
146 bool textHasChanged:1;
147 bool needToUpdateLayout:1;
148 bool formatModifiesFontSize:1;
149 bool polishSize:1; // Workaround for problem with polish called after updateSize (QTBUG-42636)
150 bool updateSizeRecursionGuard:1;
151 bool containsUnscalableGlyphs:1;
152
153 static const QChar elideChar;
154 static const int largeTextSizeThreshold;
155
156 qreal getImplicitWidth() const override;
157 qreal getImplicitHeight() const override;
158
159 qreal availableWidth() const;
160 qreal availableHeight() const;
161
162 inline qreal padding() const { return extra.isAllocated() ? extra->padding : 0.0; }
163 void setTopPadding(qreal value, bool reset = false);
164 void setLeftPadding(qreal value, bool reset = false);
165 void setRightPadding(qreal value, bool reset = false);
166 void setBottomPadding(qreal value, bool reset = false);
167
168 void ensureDoc();
169 void updateDocumentText();
170
171 QRectF setupTextLayout(qreal * const baseline);
172 void setupCustomLineGeometry(QTextLine &line, qreal &height, int fullLayoutTextLength, int lineOffset = 0);
173 bool isLinkActivatedConnected();
174 bool isLinkHoveredConnected();
175 bool isHoveredToolTipChangedConnected();
176 QStringList links() const;
177
178 struct LinkDesc {
179 QString m_anchor;
180 QString m_anchorTarget;
181 int m_startIndex;
182 int m_endIndex;
183 QRect rect;
184 };
185
186 QList<LinkDesc> getLinks() const;
187
188 static QString anchorAt(const QTextLayout *layout, const QPointF &mousePos);
189 QString anchorAt(const QPointF &pos) const;
190 static QString toolTipAt(const QTextLayout *layout, const QPointF &mousePos);
191 QString toolTipAt(const QPointF &pos) const;
192
193 inline qreal lineHeight() const { return extra.isAllocated() ? extra->lineHeight : 1.0; }
194 inline int maximumLineCount() const { return extra.isAllocated() ? extra->maximumLineCount : INT_MAX; }
195 inline int renderTypeQuality() const { return extra.isAllocated() ? extra->renderTypeQuality : QQuickText::DefaultRenderTypeQuality; }
196 inline QQuickText::LineHeightMode lineHeightMode() const { return extra.isAllocated() ? extra->lineHeightMode : QQuickText::ProportionalHeight; }
197 inline QQuickText::FontSizeMode fontSizeMode() const { return extra.isAllocated() ? extra->fontSizeMode : QQuickText::FixedSize; }
198 inline int minimumPixelSize() const { return extra.isAllocated() ? extra->minimumPixelSize : 12; }
199 inline int minimumPointSize() const { return extra.isAllocated() ? extra->minimumPointSize : 12; }
200 static inline QQuickTextPrivate *get(QQuickText *t) { return t->d_func(); }
201};
202
203QT_END_NAMESPACE
204
205#endif // QQUICKTEXT_P_P_H
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
#define QQUICKTEXT_LARGETEXT_THRESHOLD
static void positionInlineImage(QQuickStyledTextImgTag *image, int textPos, const QTextLine &line)
static void getLinks_helper(const QTextLayout *layout, QList< QQuickTextPrivate::LinkDesc > *links)