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 bool determineHorizontalAlignment();
46 bool setHAlign(QQuickText::HAlignment, bool forceAlign = false);
47 void mirrorChange() override;
48 bool isLineLaidOutConnected();
49 void setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height);
50 void positionInlineImages(const QTextLine &line, const QList<QTextLayout::FormatRange> &formats);
51
52 int lineHeightOffset() const;
53 QString elidedText(qreal lineWidth, const QTextLine &line) const;
54 void elideFormats(int start, int length, int offset, QList<QTextLayout::FormatRange> *elidedFormats);
55 void clearFormats();
56
57 void processHoverEvent(QHoverEvent *event);
58 bool transformChanged(QQuickItem *transformedItem) override;
59
60 QRectF layedOutTextRect;
61 QSizeF advance;
62
63 struct ExtraData {
64 ExtraData();
65
66 qreal padding;
67 qreal topPadding;
68 qreal leftPadding;
69 qreal rightPadding;
70 qreal bottomPadding;
71 bool explicitTopPadding : 1;
72 bool explicitLeftPadding : 1;
73 bool explicitRightPadding : 1;
74 bool explicitBottomPadding : 1;
75 qreal lineHeight;
76 QTextDocument *doc;
77 QQuickTextImageHandler *imageHandler = nullptr;
78 QString activeLink;
79 QString hoveredLink;
80 QString hoveredToolTip;
81 int minimumPixelSize;
82 int minimumPointSize;
83 int maximumLineCount;
84 int renderTypeQuality;
85 bool lineHeightValid : 1;
86 QQuickText::LineHeightMode lineHeightMode;
87 QQuickText::FontSizeMode fontSizeMode;
88 QList<QQuickStyledTextImgTag*> imgTags;
89 QList<QQuickStyledTextImgTag*> visibleImgTags;
90 QList<QQuickPixmap *> pixmapsInProgress;
91 QUrl baseUrl;
92 };
93 QLazilyAllocated<ExtraData> extra;
94
95 QString text;
96 QFont font;
97 QFont sourceFont;
98 QFontInfo fontInfo;
99
100 QTextLayout layout;
101 QScopedPointer<QTextLayout> elideLayout;
102 QScopedPointer<QQuickTextLine> textLine;
103
104 qreal lineWidth;
105
106 QRgb color;
107 QRgb linkColor;
108 QRgb styleColor;
109
110 int lineCount;
111 int multilengthEos;
112
113 enum UpdateType {
114 UpdateNone,
115 UpdatePreprocess,
116 UpdatePaintNode
117 };
118
119 QQuickText::TextElideMode elideMode;
120 QQuickText::HAlignment hAlign;
121 QQuickText::VAlignment vAlign;
122 QQuickText::TextFormat format;
123 QQuickText::WrapMode wrapMode;
124 QQuickText::TextStyle style;
125 QQuickText::RenderType renderType;
126 UpdateType updateType;
127
128 QString assignedFont;
129
130 bool maximumLineCountValid:1;
131 bool updateOnComponentComplete:1;
132 bool richText:1;
133 bool styledText:1;
134 bool markdownText:1;
135 bool widthExceeded:1;
136 bool heightExceeded:1;
137 bool internalWidthUpdate:1;
138 bool requireImplicitSize:1;
139 bool implicitWidthValid:1;
140 bool implicitHeightValid:1;
141 bool truncated:1;
142 bool hAlignImplicit:1;
143 bool rightToLeftText:1;
144 bool layoutTextElided:1;
145 bool textHasChanged:1;
146 bool needToUpdateLayout:1;
147 bool formatModifiesFontSize:1;
148 bool polishSize:1; // Workaround for problem with polish called after updateSize (QTBUG-42636)
149 bool updateSizeRecursionGuard:1;
150 bool containsUnscalableGlyphs:1;
151
152 static const QChar elideChar;
153 static const int largeTextSizeThreshold;
154
155 qreal getImplicitWidth() const override;
156 qreal getImplicitHeight() const override;
157
158 qreal availableWidth() const;
159 qreal availableHeight() const;
160
161 inline qreal padding() const { return extra.isAllocated() ? extra->padding : 0.0; }
162 void setTopPadding(qreal value, bool reset = false);
163 void setLeftPadding(qreal value, bool reset = false);
164 void setRightPadding(qreal value, bool reset = false);
165 void setBottomPadding(qreal value, bool reset = false);
166
167 void ensureDoc();
168 void updateDocumentText();
169
170 QRectF setupTextLayout(qreal * const baseline);
171 void setupCustomLineGeometry(QTextLine &line, qreal &height, int fullLayoutTextLength, int lineOffset = 0);
172 bool isLinkActivatedConnected();
173 bool isLinkHoveredConnected();
174 bool isHoveredToolTipChangedConnected();
175 QStringList links() const;
176
177 struct LinkDesc {
178 QString m_anchor;
179 QString m_anchorTarget;
180 int m_startIndex;
181 int m_endIndex;
182 QRect rect;
183 };
184
185 QList<LinkDesc> getLinks() const;
186
187 static QString anchorAt(const QTextLayout *layout, const QPointF &mousePos);
188 QString anchorAt(const QPointF &pos) const;
189 static QString toolTipAt(const QTextLayout *layout, const QPointF &mousePos);
190 QString toolTipAt(const QPointF &pos) const;
191
192 inline qreal lineHeight() const { return extra.isAllocated() ? extra->lineHeight : 1.0; }
193 inline int maximumLineCount() const { return extra.isAllocated() ? extra->maximumLineCount : INT_MAX; }
194 inline int renderTypeQuality() const { return extra.isAllocated() ? extra->renderTypeQuality : QQuickText::DefaultRenderTypeQuality; }
195 inline QQuickText::LineHeightMode lineHeightMode() const { return extra.isAllocated() ? extra->lineHeightMode : QQuickText::ProportionalHeight; }
196 inline QQuickText::FontSizeMode fontSizeMode() const { return extra.isAllocated() ? extra->fontSizeMode : QQuickText::FixedSize; }
197 inline int minimumPixelSize() const { return extra.isAllocated() ? extra->minimumPixelSize : 12; }
198 inline int minimumPointSize() const { return extra.isAllocated() ? extra->minimumPointSize : 12; }
199 static inline QQuickTextPrivate *get(QQuickText *t) { return t->d_func(); }
200};
201
202QT_END_NAMESPACE
203
204#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)