From f1d7a4679711734b74538be649567d0826278920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Wed, 28 May 2014 13:49:15 +0300 Subject: Added CustomLabelItem Task-number: QTRD-3135 Change-Id: Ie13c7ab5cbfca2eef88ed4ca17eaf46f2aeb4788 Reviewed-by: Miikka Heikkinen --- src/datavisualization/data/qcustom3dlabel.cpp | 358 ++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 src/datavisualization/data/qcustom3dlabel.cpp (limited to 'src/datavisualization/data/qcustom3dlabel.cpp') diff --git a/src/datavisualization/data/qcustom3dlabel.cpp b/src/datavisualization/data/qcustom3dlabel.cpp new file mode 100644 index 00000000..585f4f35 --- /dev/null +++ b/src/datavisualization/data/qcustom3dlabel.cpp @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qcustom3dlabel_p.h" +#include "utils_p.h" + +QT_BEGIN_NAMESPACE_DATAVISUALIZATION + +/*! + * \class QCustom3DLabel + * \inmodule QtDataVisualization + * \brief The QCustom3DLabel class is for creating custom labels to be added to a graph. + * \since Qt Data Visualization 1.1 + * + * This class is for creating custom labels to be added to a graph. You can set text, font, + * position, scaling, rotation, and colors. You can also toggle borders and background for the + * label. Colors, borders and background are used from active theme unless any of them is set + * explicitly. + * + * \note In scaling, z has no effect. Setting the same x and y retains the original + * font dimensions. + * + * \sa QAbstract3DGraph::addCustomItem() + */ + +/*! + * \qmltype Custom3DLabel + * \inqmlmodule QtDataVisualization + * \since QtDataVisualization 1.1 + * \ingroup datavisualization_qml + * \instantiates QCustom3DLabel + * \brief The Custom3DLabel type is for creating custom labels to be added to a graph. + * + * This type is for creating custom labels to be added to a graph. You can set text, font, + * position, scaling, rotation, and colors. You can also toggle borders and background for the + * label. Colors, borders and background are used from active theme unless any of them is set + * explicitly. + * + * \note In scaling, z has no effect. Setting the same x and y 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 + * + * Color for the label text. Also affects label border, if enabled. Defaults to \c{"white"}. + * + * \sa borderEnabled + */ + +/*! \qmlproperty color Custom3DLabel::backgroundColor + * + * Color for the label background, if enabled. Defaults to \c{"gray"}. + * + * \sa backgroundEnabled + */ + +/*! \qmlproperty bool Custom3DLabel::backgroundEnabled + * + * Enable label background. If set to \c{false}, backgroundColor has no effect. Defaults + * to \c{true}. + */ + +/*! \qmlproperty bool Custom3DLabel::borderEnabled + * + * Enable label borders. Defaults to \c{true}. + */ + +/*! \qmlproperty bool Custom3DLabel::facingCamera + * + * Forces the label to face camera always. Defaults to \c{false}. If set to \c{true}, rotation() + * has no effect. + */ + +/*! + * Constructs QCustom3DLabel with given \a parent. + */ +QCustom3DLabel::QCustom3DLabel(QObject *parent) : + QCustom3DItem(new QCustom3DLabelPrivate(this), parent) +{ +} + +/*! + * Constructs QCustom3DLabel with given \a text, \a font, \a position, \a scaling, + * \a rotation, and optional \a parent. + * + * \note Setting the same x and y for \a scaling retains the original font dimensions. + */ +QCustom3DLabel::QCustom3DLabel(const QString &text, const QFont &font, + const QVector3D &position, const QVector3D &scaling, + const QQuaternion &rotation, QObject *parent) : + QCustom3DItem(new QCustom3DLabelPrivate(this, text, font, position, scaling, rotation), + parent) +{ +} + +/*! + * Destroys QCustom3DLabel. + */ +QCustom3DLabel::~QCustom3DLabel() +{ +} + +/*! \property QCustom3DLabel::text + * + * The text for the label. Rich text is not supported. + */ +void QCustom3DLabel::setText(const QString &text) +{ + if (dptr()->m_text != text) { + dptr()->m_text = text; + dptr()->handleTextureChange(); + emit textChanged(text); + emit dptr()->needUpdate(); + } +} + +QString QCustom3DLabel::text() const +{ + return dptrc()->m_text; +} + +/*! \property QCustom3DLabel::font + * + * 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) +{ + if (dptr()->m_font != font) { + dptr()->m_font = font; + dptr()->handleTextureChange(); + emit fontChanged(font); + emit dptr()->needUpdate(); + } +} + +QFont QCustom3DLabel::font() const +{ + return dptrc()->m_font; +} + +/*! \property QCustom3DLabel::textColor + * + * Color for the label text. Also affects label border, if enabled. Defaults to \c{Qt::white}. + * + * \sa borderEnabled + */ +void QCustom3DLabel::setTextColor(const QColor &color) +{ + if (dptr()->m_txtColor != color) { + dptr()->m_txtColor = color; + dptr()->m_customVisuals = true; + dptr()->handleTextureChange(); + emit textColorChanged(color); + emit dptr()->needUpdate(); + } +} + +QColor QCustom3DLabel::textColor() const +{ + return dptrc()->m_txtColor; +} + +/*! \property QCustom3DLabel::backgroundColor + * + * Color for the label background, if enabled. Defaults to \c{Qt::gray}. + * + * \sa backgroundEnabled + */ +void QCustom3DLabel::setBackgroundColor(const QColor &color) +{ + if (dptr()->m_bgrColor != color) { + dptr()->m_bgrColor = color; + dptr()->m_customVisuals = true; + dptr()->handleTextureChange(); + emit backgroundColorChanged(color); + emit dptr()->needUpdate(); + } +} + +QColor QCustom3DLabel::backgroundColor() const +{ + return dptrc()->m_bgrColor; +} + +/*! \property QCustom3DLabel::borderEnabled + * + * Enable label borders. Defaults to \c{true}. + */ +void QCustom3DLabel::setBorderEnabled(bool enabled) +{ + if (dptr()->m_borders != enabled) { + dptr()->m_borders = enabled; + dptr()->m_customVisuals = true; + dptr()->handleTextureChange(); + emit borderEnabledChanged(enabled); + emit dptr()->needUpdate(); + } +} + +bool QCustom3DLabel::isBorderEnabled() const +{ + return dptrc()->m_borders; +} + +/*! \property QCustom3DLabel::backgroundEnabled + * + * Enable label background. If set to \c{false}, backgroundColor() has no effect. Defaults + * to \c{true}. + */ +void QCustom3DLabel::setBackgroundEnabled(bool enabled) +{ + if (dptr()->m_background != enabled) { + dptr()->m_background = enabled; + dptr()->m_customVisuals = true; + dptr()->handleTextureChange(); + emit backgroundEnabledChanged(enabled); + emit dptr()->needUpdate(); + } +} + +bool QCustom3DLabel::isBackgroundEnabled() const +{ + return dptrc()->m_background; +} + +/*! \property QCustom3DLabel::facingCamera + * + * Forces the label to face camera always. Defaults to \c{false}. If set to \c{true}, rotation() + * has no effect. + */ +void QCustom3DLabel::setFacingCamera(bool enabled) +{ + if (dptr()->m_facingCamera != enabled) { + dptr()->m_facingCamera = enabled; + dptr()->m_facingCameraDirty = true; + emit facingCameraChanged(enabled); + emit dptr()->needUpdate(); + } +} + +bool QCustom3DLabel::isFacingCamera() const +{ + return dptrc()->m_facingCamera; +} + +/*! + * \internal + */ +QCustom3DLabelPrivate *QCustom3DLabel::dptr() +{ + return static_cast(d_ptr.data()); +} + +/*! + * \internal + */ +const QCustom3DLabelPrivate *QCustom3DLabel::dptrc() const +{ + return static_cast(d_ptr.data()); +} + +QCustom3DLabelPrivate::QCustom3DLabelPrivate(QCustom3DLabel *q) : + QCustom3DItemPrivate(q), + 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"); + createTextureImage(); +} + +QCustom3DLabelPrivate::QCustom3DLabelPrivate(QCustom3DLabel *q, const QString &text, + const QFont &font, const QVector3D &position, + const QVector3D &scaling, + const QQuaternion &rotation) : + QCustom3DItemPrivate(q, 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; + createTextureImage(); +} + +QCustom3DLabelPrivate::~QCustom3DLabelPrivate() +{ +} + +void QCustom3DLabelPrivate::resetDirtyBits() +{ + QCustom3DItemPrivate::resetDirtyBits(); + m_facingCameraDirty = false; +} + +void QCustom3DLabelPrivate::createTextureImage() +{ + createTextureImage(m_bgrColor, m_txtColor, m_background, m_borders); +} + +void QCustom3DLabelPrivate::createTextureImage(const QColor &bgrColor, const QColor &txtColor, + bool background, bool borders) +{ + m_textureImage = Utils::printTextToImage(m_font, m_text, bgrColor, txtColor, background, + borders, 0); +} + +void QCustom3DLabelPrivate::handleTextureChange() +{ + createTextureImage(); + m_dirtyBits.textureDirty = true; + if (!m_textureFile.isEmpty()) { + m_textureFile.clear(); + emit q_ptr->textureFileChanged(m_textureFile); + } +} + +QT_END_NAMESPACE_DATAVISUALIZATION -- cgit v1.2.3