1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qcustom3dlabel_p.h"
5#include "utils_p.h"
6
7QT_BEGIN_NAMESPACE
8
9/*!
10 * \class QCustom3DLabel
11 * \inmodule QtGraphs
12 * \ingroup graphs_3D
13 * \brief The QCustom3DLabel class adds a custom label to a graph.
14 *
15 * The text, font, position, scaling, rotation, and colors of a custom label can
16 * be set. In addition, the visibility of the borders and background of the
17 * label can be toggled. Colors, borders, and background are determined by the
18 * active theme unless set explicitly.
19 *
20 * \note In scaling, the z-coordinate has no effect. Setting the same x- and
21 * y-coordinates retains the original font dimensions.
22 *
23 * \sa Q3DGraphsWidgetItem::addCustomItem()
24 */
25
26/*!
27 * \qmltype Custom3DLabel
28 * \inqmlmodule QtGraphs
29 * \ingroup graphs_qml_3D
30 * \nativetype QCustom3DLabel
31 * \inherits Custom3DItem
32 * \brief Adds a custom label to a graph.
33 *
34 * The text, font, position, scaling, rotation, and colors of a custom label can
35 * be set. In addition, the visibility of the borders and background of the
36 * label can be toggled. Colors, borders, and background are determined by the
37 * active theme unless set explicitly.
38 *
39 * \note In scaling, the z-coordinate has no effect. Setting the same x- and
40 * y-coordinates retains the original font dimensions.
41 */
42
43/*! \qmlproperty string Custom3DLabel::text
44 *
45 * The text for the label. Rich text is not supported.
46 */
47
48/*! \qmlproperty font Custom3DLabel::font
49 *
50 * The font to be used for the label. Defaults to \c{Font {family: "Arial";
51 * pointSize: 20}}. Special formatting (for example, outlined) is not supported.
52 */
53
54/*! \qmlproperty color Custom3DLabel::textColor
55 *
56 * The color for the label text. Also affects label border, if enabled. Defaults
57 * to \c{"white"}.
58 *
59 * \sa borderVisible
60 */
61
62/*! \qmlproperty color Custom3DLabel::backgroundColor
63 *
64 * The color for the label background, if enabled. Defaults to \c{"gray"}.
65 *
66 * \sa backgroundVisible
67 */
68
69/*! \qmlproperty bool Custom3DLabel::backgroundVisible
70 *
71 * Defines whether the label background is visible. If set to \c{false},
72 * backgroundColor has no effect. Defaults to \c{true}.
73 */
74
75/*! \qmlproperty bool Custom3DLabel::borderVisible
76 *
77 * Defines whether label borders are visible. Defaults to \c{true}.
78 */
79
80/*! \qmlproperty bool Custom3DLabel::facingCamera
81 *
82 * Defines whether the label will always face the camera. Defaults to \c{false}.
83 * If set to \c{true}, \l {QCustom3DItem::}{rotation} has no effect.
84 */
85
86/*!
87 \qmlsignal Custom3DLabel::textChanged(string text)
88
89 This signal is emitted when \l text changes to \a text.
90*/
91
92/*!
93 \qmlsignal Custom3DLabel::fontChanged(font font)
94
95 This signal is emitted when \l font changes to \a font.
96*/
97
98/*!
99 \qmlsignal Custom3DLabel::textColorChanged(color color)
100
101 This signal is emitted when textColor changes to \a color.
102*/
103
104/*!
105 \qmlsignal Custom3DLabel::backgroundColorChanged(color color)
106
107 This signal is emitted when backgroundColor changes to \a color.
108*/
109
110/*!
111 \qmlsignal Custom3DLabel::borderEnabledChanged(bool enabled)
112
113 This signal is emitted when borderEnabled changes to \a enabled.
114*/
115
116/*!
117 \qmlsignal Custom3DLabel::backgroundEnabledChanged(bool enabled)
118
119 This signal is emitted when backgroundEnabled changes to \a enabled.
120*/
121
122/*!
123 \qmlsignal Custom3DLabel::facingCameraChanged(bool enabled)
124
125 This signal is emitted when facingCamera changes to \a enabled.
126*/
127
128/*!
129 * Constructs a custom 3D label with the given \a parent.
130 */
131QCustom3DLabel::QCustom3DLabel(QObject *parent)
132 : QCustom3DItem(*(new QCustom3DLabelPrivate()), parent)
133{}
134
135/*!
136 * Constructs a custom 3D label with the given \a text, \a font, \a position, \a
137 * scaling, \a rotation, and optional \a parent.
138 *
139 * \note Setting the same x- and y-coordinates for \a scaling retains the
140 * original font dimensions.
141 */
142QCustom3DLabel::QCustom3DLabel(const QString &text,
143 const QFont &font,
144 QVector3D position,
145 QVector3D scaling,
146 const QQuaternion &rotation,
147 QObject *parent)
148 : QCustom3DItem(*(new QCustom3DLabelPrivate(text, font, position, scaling, rotation)), parent)
149{}
150
151/*!
152 * Deletes the custom 3D label.
153 */
154QCustom3DLabel::~QCustom3DLabel() {}
155
156/*! \property QCustom3DLabel::text
157 *
158 * \brief The text for the label.
159 *
160 * Rich text is not supported.
161 */
162void QCustom3DLabel::setText(const QString &text)
163{
164 Q_D(QCustom3DLabel);
165 if (d->m_text != text) {
166 d->m_text = text;
167 emit textChanged(text);
168 emit needUpdate();
169 }
170}
171
172QString QCustom3DLabel::text() const
173{
174 Q_D(const QCustom3DLabel);
175 return d->m_text;
176}
177
178/*! \property QCustom3DLabel::font
179 *
180 * \brief The font to be used for the label.
181 *
182 * Defaults to \c{QFont("Arial", 20)}. Special formatting
183 * (for example, outlined) is not supported.
184 */
185void QCustom3DLabel::setFont(const QFont &font)
186{
187 Q_D(QCustom3DLabel);
188 if (d->m_font != font) {
189 d->m_font = font;
190 emit fontChanged(font);
191 emit needUpdate();
192 }
193}
194
195QFont QCustom3DLabel::font() const
196{
197 Q_D(const QCustom3DLabel);
198 return d->m_font;
199}
200
201/*! \property QCustom3DLabel::textColor
202 *
203 * \brief The color for the label text.
204 *
205 * Also affects the label border, if enabled. Defaults to \c{Qt::white}.
206 *
207 * \sa borderVisible
208 */
209void QCustom3DLabel::setTextColor(QColor color)
210{
211 Q_D(QCustom3DLabel);
212 if (d->m_txtColor != color) {
213 d->m_txtColor = color;
214 d->m_customVisuals = true;
215 emit textColorChanged(color);
216 emit needUpdate();
217 }
218}
219
220QColor QCustom3DLabel::textColor() const
221{
222 Q_D(const QCustom3DLabel);
223 return d->m_txtColor;
224}
225
226/*! \property QCustom3DLabel::backgroundColor
227 *
228 * \brief The color for the label background, if enabled.
229 *
230 * Defaults to \c{Qt::gray}.
231 *
232 * \sa backgroundVisible
233 */
234void QCustom3DLabel::setBackgroundColor(QColor color)
235{
236 Q_D(QCustom3DLabel);
237 if (d->m_bgrColor != color) {
238 d->m_bgrColor = color;
239 d->m_customVisuals = true;
240 emit backgroundColorChanged(color);
241 emit needUpdate();
242 }
243}
244
245QColor QCustom3DLabel::backgroundColor() const
246{
247 Q_D(const QCustom3DLabel);
248 return d->m_bgrColor;
249}
250
251/*! \property QCustom3DLabel::borderVisible
252 *
253 * \brief Whether label borders are visible.
254 *
255 * Defaults to \c{true}.
256 */
257void QCustom3DLabel::setBorderVisible(bool visible)
258{
259 Q_D(QCustom3DLabel);
260 if (d->m_borders != visible) {
261 d->m_borders = visible;
262 d->m_customVisuals = true;
263 emit borderVisibleChanged(visible);
264 emit needUpdate();
265 }
266}
267
268bool QCustom3DLabel::isBorderVisible() const
269{
270 Q_D(const QCustom3DLabel);
271 return d->m_borders;
272}
273
274/*! \property QCustom3DLabel::backgroundVisible
275 *
276 * \brief Whether the label background is visible.
277 *
278 * If set to \c{false}, backgroundColor() has no effect. Defaults
279 * to \c{true}.
280 */
281void QCustom3DLabel::setBackgroundVisible(bool visible)
282{
283 Q_D(QCustom3DLabel);
284 if (d->m_background != visible) {
285 d->m_background = visible;
286 d->m_customVisuals = true;
287 emit backgroundVisibleChanged(visible);
288 emit needUpdate();
289 }
290}
291
292bool QCustom3DLabel::isBackgroundVisible() const
293{
294 Q_D(const QCustom3DLabel);
295 return d->m_background;
296}
297
298/*! \property QCustom3DLabel::facingCamera
299 *
300 * \brief Whether the label will always face the camera.
301 *
302 * Defaults to \c{false}. If set to \c{true}, rotation()
303 * has no effect.
304 */
305void QCustom3DLabel::setFacingCamera(bool enabled)
306{
307 Q_D(QCustom3DLabel);
308 if (d->m_facingCamera != enabled) {
309 d->m_facingCamera = enabled;
310 d->m_facingCameraDirty = true;
311 emit facingCameraChanged(enabled);
312 emit needUpdate();
313 }
314}
315
316bool QCustom3DLabel::isFacingCamera() const
317{
318 Q_D(const QCustom3DLabel);
319 return d->m_facingCamera;
320}
321
322QCustom3DLabelPrivate::QCustom3DLabelPrivate()
323 : m_font(QFont(QStringLiteral("Arial"), 20))
324 , m_bgrColor(Qt::gray)
325 , m_txtColor(Qt::white)
326 , m_background(true)
327 , m_borders(true)
328 , m_facingCamera(false)
329 , m_customVisuals(false)
330 , m_facingCameraDirty(false)
331{
332 m_isLabelItem = true;
333 m_shadowCasting = false;
334 m_meshFile = QStringLiteral(":/defaultMeshes/plane");
335}
336
337QCustom3DLabelPrivate::QCustom3DLabelPrivate(const QString &text,
338 const QFont &font,
339 QVector3D position,
340 QVector3D scaling,
341 const QQuaternion &rotation)
342 : QCustom3DItemPrivate(QStringLiteral(":/defaultMeshes/plane"), position, scaling, rotation)
343 , m_text(text)
344 , m_font(font)
345 , m_bgrColor(Qt::gray)
346 , m_txtColor(Qt::white)
347 , m_background(true)
348 , m_borders(true)
349 , m_facingCamera(false)
350 , m_customVisuals(false)
351 , m_facingCameraDirty(false)
352{
353 m_isLabelItem = true;
354 m_shadowCasting = false;
355}
356
357QCustom3DLabelPrivate::~QCustom3DLabelPrivate() {}
358
359void QCustom3DLabelPrivate::resetDirtyBits()
360{
361 QCustom3DItemPrivate::resetDirtyBits();
362 m_facingCameraDirty = false;
363}
364
365QT_END_NAMESPACE
366

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtgraphs/src/graphs3d/data/qcustom3dlabel.cpp