Source code
Revision control
Copy as Markdown
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#include "qcustom3dlabel_p.h"
#include "utils_p.h"
#include "qgraphs3dlogging_p.h"
QT_BEGIN_NAMESPACE
/*!
* \class QCustom3DLabel
* \inmodule QtGraphs
* \ingroup graphs_3D
* \brief The QCustom3DLabel class adds a custom label to a graph.
*
* The text, font, position, scaling, rotation, and colors of a custom label can
* be set. In addition, the visibility of the borders and background of the
* label can be toggled. Colors, borders, and background are determined by the
* active theme unless set explicitly.
*
* \note In scaling, the z-coordinate has no effect. Setting the same x- and
* y-coordinates retains the original font dimensions.
*
* \sa Q3DGraphsWidgetItem::addCustomItem()
*/
/*!
* \qmltype Custom3DLabel
* \inqmlmodule QtGraphs
* \ingroup graphs_qml_3D
* \nativetype QCustom3DLabel
* \inherits Custom3DItem
* \brief Adds a custom label to a graph.
*
* The text, font, position, scaling, rotation, and colors of a custom label can
* be set. In addition, the visibility of the borders and background of the
* label can be toggled. Colors, borders, and background are determined by the
* active theme unless set explicitly.
*
* \note In scaling, the z-coordinate has no effect. Setting the same x- and
* y-coordinates retains the original font dimensions.
*/
/*! \qmlproperty string Custom3DLabel::text
*
* The text for the label. Rich text is not supported.
*/
/*! \qmlproperty font Custom3DLabel::font
*
* The font to be used for the label. Defaults to \c{Font {family: "Arial";
* pointSize: 20}}. Special formatting (for example, outlined) is not supported.
*/
/*! \qmlproperty color Custom3DLabel::textColor
*
* The color for the label text. Also affects label border, if enabled. Defaults
* to \c{"white"}.
*
* \sa borderVisible
*/
/*! \qmlproperty color Custom3DLabel::backgroundColor
*
* The color for the label background, if enabled. Defaults to \c{"gray"}.
*
* \sa backgroundVisible
*/
/*! \qmlproperty bool Custom3DLabel::backgroundVisible
*
* Defines whether the label background is visible. If set to \c{false},
* backgroundColor has no effect. Defaults to \c{true}.
*/
/*! \qmlproperty bool Custom3DLabel::borderVisible
*
* Defines whether label borders are visible. Defaults to \c{true}.
*/
/*! \qmlproperty bool Custom3DLabel::facingCamera
*
* Defines whether the label will always face the camera. Defaults to \c{false}.
* If set to \c{true}, \l {QCustom3DItem::}{rotation} has no effect.
*/
/*!
\qmlsignal Custom3DLabel::textChanged(string text)
This signal is emitted when \l text changes to \a text.
*/
/*!
\qmlsignal Custom3DLabel::fontChanged(font font)
This signal is emitted when \l font changes to \a font.
*/
/*!
\qmlsignal Custom3DLabel::textColorChanged(color color)
This signal is emitted when textColor changes to \a color.
*/
/*!
\qmlsignal Custom3DLabel::backgroundColorChanged(color color)
This signal is emitted when backgroundColor changes to \a color.
*/
/*!
\qmlsignal Custom3DLabel::borderEnabledChanged(bool enabled)
This signal is emitted when borderEnabled changes to \a enabled.
*/
/*!
\qmlsignal Custom3DLabel::backgroundEnabledChanged(bool enabled)
This signal is emitted when backgroundEnabled changes to \a enabled.
*/
/*!
\qmlsignal Custom3DLabel::facingCameraChanged(bool enabled)
This signal is emitted when facingCamera changes to \a enabled.
*/
/*!
* Constructs a custom 3D label with the given \a parent.
*/
QCustom3DLabel::QCustom3DLabel(QObject *parent)
: QCustom3DItem(*(new QCustom3DLabelPrivate()), parent)
{}
/*!
* Constructs a custom 3D label with the given \a text, \a font, \a position, \a
* scaling, \a rotation, and optional \a parent.
*
* \note Setting the same x- and y-coordinates for \a scaling retains the
* original font dimensions.
*/
QCustom3DLabel::QCustom3DLabel(const QString &text,
const QFont &font,
QVector3D position,
QVector3D scaling,
const QQuaternion &rotation,
QObject *parent)
: QCustom3DItem(*(new QCustom3DLabelPrivate(text, font, position, scaling, rotation)), parent)
{}
/*!
* Deletes the custom 3D label.
*/
QCustom3DLabel::~QCustom3DLabel() {}
/*! \property QCustom3DLabel::text
*
* \brief The text for the label.
*
* Rich text is not supported.
*/
void QCustom3DLabel::setText(const QString &text)
{
Q_D(QCustom3DLabel);
if (d->m_text == text) {
qCDebug(lcProperties3D, "%s value is already set to: %s",
qUtf8Printable(QLatin1String(__FUNCTION__)), qUtf8Printable(text));
return;
}
d->m_text = text;
emit textChanged(text);
emit needUpdate();
}
QString QCustom3DLabel::text() const
{
Q_D(const QCustom3DLabel);
return d->m_text;
}
/*! \property QCustom3DLabel::font
*
* \brief The font to be used for the label.
*
* Defaults to \c{QFont("Arial", 20)}. Special formatting
* (for example, outlined) is not supported.
*/
void QCustom3DLabel::setFont(const QFont &font)
{
Q_D(QCustom3DLabel);
if (d->m_font == font) {
qCDebug(lcProperties3D) << __FUNCTION__
<< "value is already set to:" << font;
return;
}
d->m_font = font;
emit fontChanged(font);
emit needUpdate();
}
QFont QCustom3DLabel::font() const
{
Q_D(const QCustom3DLabel);
return d->m_font;
}
/*! \property QCustom3DLabel::textColor
*
* \brief The color for the label text.
*
* Also affects the label border, if enabled. Defaults to \c{Qt::white}.
*
* \sa borderVisible
*/
void QCustom3DLabel::setTextColor(QColor color)
{
Q_D(QCustom3DLabel);
if (d->m_txtColor == color) {
qCDebug(lcProperties3D, "%s value is already set to: %s",
qUtf8Printable(QLatin1String(__FUNCTION__)), qUtf8Printable(color.name()));
return;
}
d->m_txtColor = color;
d->m_customVisuals = true;
emit textColorChanged(color);
emit needUpdate();
}
QColor QCustom3DLabel::textColor() const
{
Q_D(const QCustom3DLabel);
return d->m_txtColor;
}
/*! \property QCustom3DLabel::backgroundColor
*
* \brief The color for the label background, if enabled.
*
* Defaults to \c{Qt::gray}.
*
* \sa backgroundVisible
*/
void QCustom3DLabel::setBackgroundColor(QColor color)
{
Q_D(QCustom3DLabel);
if (d->m_bgrColor == color) {
qCDebug(lcProperties3D, "%s value is already set to: %s",
qUtf8Printable(QLatin1String(__FUNCTION__)), qUtf8Printable(color.name()));
return;
}
d->m_bgrColor = color;
d->m_customVisuals = true;
emit backgroundColorChanged(color);
emit needUpdate();
}
QColor QCustom3DLabel::backgroundColor() const
{
Q_D(const QCustom3DLabel);
return d->m_bgrColor;
}
/*! \property QCustom3DLabel::borderVisible
*
* \brief Whether label borders are visible.
*
* Defaults to \c{true}.
*/
void QCustom3DLabel::setBorderVisible(bool visible)
{
Q_D(QCustom3DLabel);
if (d->m_borders == visible) {
qCDebug(lcProperties3D) << __FUNCTION__
<< "value is already set to:" << visible;
return;
}
d->m_borders = visible;
d->m_customVisuals = true;
emit borderVisibleChanged(visible);
emit needUpdate();
}
bool QCustom3DLabel::isBorderVisible() const
{
Q_D(const QCustom3DLabel);
return d->m_borders;
}
/*! \property QCustom3DLabel::backgroundVisible
*
* \brief Whether the label background is visible.
*
* If set to \c{false}, backgroundColor() has no effect. Defaults
* to \c{true}.
*/
void QCustom3DLabel::setBackgroundVisible(bool visible)
{
Q_D(QCustom3DLabel);
if (d->m_background == visible) {
qCDebug(lcProperties3D) << __FUNCTION__
<< "value is already set to:" << visible;
return;
}
d->m_background = visible;
d->m_customVisuals = true;
emit backgroundVisibleChanged(visible);
emit needUpdate();
}
bool QCustom3DLabel::isBackgroundVisible() const
{
Q_D(const QCustom3DLabel);
return d->m_background;
}
/*! \property QCustom3DLabel::facingCamera
*
* \brief Whether the label will always face the camera.
*
* Defaults to \c{false}. If set to \c{true}, rotation()
* has no effect.
*/
void QCustom3DLabel::setFacingCamera(bool enabled)
{
Q_D(QCustom3DLabel);
if (d->m_facingCamera == enabled) {
qCDebug(lcProperties3D) << __FUNCTION__
<< "value is already set to:" << enabled;
return;
}
d->m_facingCamera = enabled;
d->m_facingCameraDirty = true;
emit facingCameraChanged(enabled);
emit needUpdate();
}
bool QCustom3DLabel::isFacingCamera() const
{
Q_D(const QCustom3DLabel);
return d->m_facingCamera;
}
QCustom3DLabelPrivate::QCustom3DLabelPrivate()
: m_font(QFont(QStringLiteral("Arial"), 20))
, m_bgrColor(Qt::gray)
, m_txtColor(Qt::white)
, m_background(true)
, m_borders(true)
, m_facingCamera(false)
, m_customVisuals(false)
, m_facingCameraDirty(false)
{
m_isLabelItem = true;
m_shadowCasting = false;
m_meshFile = QStringLiteral(":/defaultMeshes/plane");
}
QCustom3DLabelPrivate::QCustom3DLabelPrivate(const QString &text,
const QFont &font,
QVector3D position,
QVector3D scaling,
const QQuaternion &rotation)
: QCustom3DItemPrivate(QStringLiteral(":/defaultMeshes/plane"), position, scaling, rotation)
, m_text(text)
, m_font(font)
, m_bgrColor(Qt::gray)
, m_txtColor(Qt::white)
, m_background(true)
, m_borders(true)
, m_facingCamera(false)
, m_customVisuals(false)
, m_facingCameraDirty(false)
{
m_isLabelItem = true;
m_shadowCasting = false;
}
QCustom3DLabelPrivate::~QCustom3DLabelPrivate() {}
void QCustom3DLabelPrivate::resetDirtyBits()
{
QCustom3DItemPrivate::resetDirtyBits();
m_facingCameraDirty = false;
}
QT_END_NAMESPACE
#include "moc_qcustom3dlabel.cpp"