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
4#include "qquickfontmetrics_p.h"
5
6#include <QFont>
7
8QT_BEGIN_NAMESPACE
9
10/*!
11 \qmltype FontMetrics
12 \instantiates QQuickFontMetrics
13 \inqmlmodule QtQuick
14 \since 5.4
15 \ingroup qtquick-text-utility
16 \brief Provides metrics for a given font.
17
18 FontMetrics calculates the size of characters and strings for a given font.
19
20 It provides a subset of the C++ \l QFontMetricsF API, with the added
21 ability to change the font that is used for calculations via the \l font
22 property.
23
24 \code
25 FontMetrics {
26 id: fontMetrics
27 font.family: "Arial"
28 }
29
30 Rectangle {
31 width: fontMetrics.height * 4
32 height: fontMetrics.height * 2
33 }
34 \endcode
35
36 \sa QFontMetricsF, TextMetrics
37*/
38QQuickFontMetrics::QQuickFontMetrics(QObject *parent) :
39 QObject(parent),
40 m_metrics(m_font)
41{
42}
43
44/*!
45 \qmlproperty font QtQuick::FontMetrics::font
46
47 This property holds the font used for the metrics calculations.
48*/
49QFont QQuickFontMetrics::font() const
50{
51 return m_font;
52}
53
54void QQuickFontMetrics::setFont(const QFont &font)
55{
56 if (m_font != font) {
57 m_font = font;
58 m_metrics = QFontMetricsF(m_font);
59 emit fontChanged(font: m_font);
60 }
61}
62
63/*!
64 \qmlproperty real QtQuick::FontMetrics::ascent
65
66 This property holds the ascent of the font.
67
68 \sa {QFontMetricsF::ascent()}, descent, height
69*/
70qreal QQuickFontMetrics::ascent() const
71{
72 return m_metrics.ascent();
73}
74
75/*!
76 \qmlproperty real QtQuick::FontMetrics::descent
77
78 This property holds the descent of the font.
79
80 \sa {QFontMetricsF::descent()}, ascent, height
81*/
82qreal QQuickFontMetrics::descent() const
83{
84 return m_metrics.descent();
85}
86
87/*!
88 \qmlproperty real QtQuick::FontMetrics::height
89
90 This property holds the height of the font.
91
92 \sa {QFontMetricsF::height()}
93*/
94qreal QQuickFontMetrics::height() const
95{
96 return m_metrics.height();
97}
98
99/*!
100 \qmlproperty real QtQuick::FontMetrics::leading
101
102 This property holds the leading of the font.
103
104 \sa {QFontMetricsF::leading()}
105*/
106qreal QQuickFontMetrics::leading() const
107{
108 return m_metrics.leading();
109}
110
111/*!
112 \qmlproperty real QtQuick::FontMetrics::lineSpacing
113
114 This property holds the distance from one base line to the next.
115
116 \sa {QFontMetricsF::lineSpacing()}
117*/
118qreal QQuickFontMetrics::lineSpacing() const
119{
120 return m_metrics.lineSpacing();
121}
122
123/*!
124 \qmlproperty real QtQuick::FontMetrics::minimumLeftBearing
125
126 This property holds the minimum left bearing of the font.
127
128 \sa {QFontMetricsF::minLeftBearing()}
129*/
130qreal QQuickFontMetrics::minimumLeftBearing() const
131{
132 return m_metrics.minLeftBearing();
133}
134
135/*!
136 \qmlproperty real QtQuick::FontMetrics::minimumRightBearing
137
138 This property holds the minimum right bearing of the font.
139
140 \sa {QFontMetricsF::minRightBearing()}
141*/
142qreal QQuickFontMetrics::minimumRightBearing() const
143{
144 return m_metrics.minRightBearing();
145}
146
147/*!
148 \qmlproperty real QtQuick::FontMetrics::maximumCharacterWidth
149
150 This property holds the width of the widest character in the font.
151
152 \sa {QFontMetricsF::maxWidth()}
153*/
154qreal QQuickFontMetrics::maximumCharacterWidth() const
155{
156 return m_metrics.maxWidth();
157}
158
159/*!
160 \qmlproperty real QtQuick::FontMetrics::xHeight
161
162 This property holds the 'x' height of the font.
163
164 \sa {QFontMetricsF::xHeight()}
165*/
166qreal QQuickFontMetrics::xHeight() const
167{
168 return m_metrics.xHeight();
169}
170
171/*!
172 \qmlproperty real QtQuick::FontMetrics::averageCharacterWidth
173
174 This property holds the average width of glyphs in the font.
175
176 \sa {QFontMetricsF::averageCharWidth()}
177*/
178qreal QQuickFontMetrics::averageCharacterWidth() const
179{
180 return m_metrics.averageCharWidth();
181}
182
183/*!
184 \qmlproperty real QtQuick::FontMetrics::underlinePosition
185
186 This property holds the distance from the base line to where an underscore
187 should be drawn.
188
189 \sa {QFontMetricsF::underlinePos()}, overlinePosition, strikeOutPosition
190*/
191qreal QQuickFontMetrics::underlinePosition() const
192{
193 return m_metrics.underlinePos();
194}
195
196/*!
197 \qmlproperty real QtQuick::FontMetrics::overlinePosition
198
199 This property holds the distance from the base line to where an overline
200 should be drawn.
201
202 \sa {QFontMetricsF::overlinePos()}, underlinePosition, strikeOutPosition
203*/
204qreal QQuickFontMetrics::overlinePosition() const
205{
206 return m_metrics.overlinePos();
207}
208
209/*!
210 \qmlproperty real QtQuick::FontMetrics::strikeOutPosition
211
212 This property holds the distance from the base line to where the strikeout
213 line should be drawn.
214
215 \sa {QFontMetricsF::strikeOutPos()}, overlinePosition, underlinePosition
216*/
217qreal QQuickFontMetrics::strikeOutPosition() const
218{
219 return m_metrics.strikeOutPos();
220}
221
222/*!
223 \qmlproperty real QtQuick::FontMetrics::lineWidth
224
225 This property holds the width of the underline and strikeout lines,
226 adjusted for the point size of the font.
227
228 \sa {QFontMetricsF::lineWidth()}
229*/
230qreal QQuickFontMetrics::lineWidth() const
231{
232 return m_metrics.lineWidth();
233}
234
235/*!
236 \qmlmethod qreal QtQuick::FontMetrics::advanceWidth(string text)
237
238 This method returns the advance in pixels of the characters in \a text.
239 This is the distance from the position of the string to where the next
240 string should be drawn.
241
242 This method is offered as an imperative alternative to the
243 \l {QtQuick::TextMetrics::advanceWidth}{advanceWidth} property of
244 TextMetrics.
245
246 \sa {QFontMetricsF::horizontalAdvance()}, {QFontMetricsF::height()}
247*/
248qreal QQuickFontMetrics::advanceWidth(const QString &text) const
249{
250 return m_metrics.horizontalAdvance(string: text);
251}
252
253/*!
254 \qmlmethod rect QtQuick::FontMetrics::boundingRect(string text)
255
256 This method returns the bounding rectangle of the characters in the string
257 specified by \a text.
258
259 This method is offered as an imperative alternative to the
260 \l {QtQuick::TextMetrics::boundingRect}{boundingRect} property of
261 TextMetrics.
262
263 \sa {QFontMetricsF::boundingRect()}, tightBoundingRect()
264*/
265QRectF QQuickFontMetrics::boundingRect(const QString &text) const
266{
267 return m_metrics.boundingRect(string: text);
268}
269
270/*!
271 \qmlmethod rect QtQuick::FontMetrics::tightBoundingRect(string text)
272
273 This method returns a tight bounding rectangle around the characters in the
274 string specified by \a text.
275
276 This method is offered as an imperative alternative to the
277 \l {QtQuick::TextMetrics::tightBoundingRect}{tightBoundingRect} property of
278 TextMetrics.
279
280 \sa {QFontMetricsF::tightBoundingRect()}, boundingRect()
281*/
282QRectF QQuickFontMetrics::tightBoundingRect(const QString &text) const
283{
284 return m_metrics.tightBoundingRect(text);
285}
286
287/*!
288 \qmlmethod string QtQuick::FontMetrics::elidedText(string text, enumeration mode, real width, int flags)
289
290 This method returns an elided version of the string (i.e., a
291 string with "..." in it) if the string \a text is wider than \a width.
292 Otherwise, returns the original string.
293
294 The \a mode argument specifies the text elide mode; that is, where
295 the ellipsis should appear when displaying text that doesn't fit.
296
297 The \a flags argument is optional and currently only supports
298 \l {Qt::TextShowMnemonic}.
299
300 This method is offered as an imperative alternative to the
301 \l {QtQuick::TextMetrics::elidedText}{elidedText} property of
302 TextMetrics.
303
304 \sa Qt::TextElideMode, QFontMetricsF::elidedText()
305*/
306QString QQuickFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags) const
307{
308 return m_metrics.elidedText(text, mode, width, flags);
309}
310
311QT_END_NAMESPACE
312
313#include "moc_qquickfontmetrics_p.cpp"
314

source code of qtdeclarative/src/quick/util/qquickfontmetrics.cpp