diff options
-rw-r--r-- | src/datavisualization/data/abstractrenderitem.cpp | 23 | ||||
-rw-r--r-- | src/datavisualization/data/abstractrenderitem_p.h | 9 | ||||
-rw-r--r-- | src/datavisualization/data/barrenderitem.cpp | 38 | ||||
-rw-r--r-- | src/datavisualization/data/barrenderitem_p.h | 41 | ||||
-rw-r--r-- | src/datavisualization/data/scatterrenderitem_p.h | 6 | ||||
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 23 | ||||
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer_p.h | 7 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 104 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer_p.h | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 7 | ||||
-rw-r--r-- | src/datavisualization/engine/drawer_p.h | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 7 |
12 files changed, 148 insertions, 122 deletions
diff --git a/src/datavisualization/data/abstractrenderitem.cpp b/src/datavisualization/data/abstractrenderitem.cpp index e22a46d8..59ffab22 100644 --- a/src/datavisualization/data/abstractrenderitem.cpp +++ b/src/datavisualization/data/abstractrenderitem.cpp @@ -21,40 +21,17 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION AbstractRenderItem::AbstractRenderItem() - : m_selectionLabelItem(0) { } AbstractRenderItem::AbstractRenderItem(const AbstractRenderItem &other) { - m_selectionLabel = other.m_selectionLabel; m_translation = other.m_translation; m_rotation = other.m_rotation; - m_selectionLabelItem = 0; } AbstractRenderItem::~AbstractRenderItem() { - delete m_selectionLabelItem; -} - -LabelItem &AbstractRenderItem::selectionLabelItem() -{ - if (!m_selectionLabelItem) - m_selectionLabelItem = new LabelItem; - return *m_selectionLabelItem; -} - -void AbstractRenderItem::setSelectionLabel(const QString &label) -{ - if (m_selectionLabelItem) - m_selectionLabelItem->clear(); - m_selectionLabel = label; -} - -QString &AbstractRenderItem::selectionLabel() -{ - return m_selectionLabel; } QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/data/abstractrenderitem_p.h b/src/datavisualization/data/abstractrenderitem_p.h index a53b8e41..912a09f3 100644 --- a/src/datavisualization/data/abstractrenderitem_p.h +++ b/src/datavisualization/data/abstractrenderitem_p.h @@ -50,13 +50,6 @@ public: inline void setTranslation(const QVector3D &translation) { m_translation = translation; } inline const QVector3D &translation() const {return m_translation; } - // Selection label item (containing special selection texture, if mode is activated) - LabelItem &selectionLabelItem(); - - // Formatted selection label for item. - void setSelectionLabel(const QString &label); - QString &selectionLabel(); // Formats selection label if not previously formatted - inline QQuaternion rotation() const { return m_rotation; } inline void setRotation(const QQuaternion &rotation) { @@ -65,9 +58,7 @@ public: } protected: - QString m_selectionLabel; QVector3D m_translation; - LabelItem *m_selectionLabelItem; QQuaternion m_rotation; friend class QAbstractDataItem; diff --git a/src/datavisualization/data/barrenderitem.cpp b/src/datavisualization/data/barrenderitem.cpp index 869dac2e..50d2a4b4 100644 --- a/src/datavisualization/data/barrenderitem.cpp +++ b/src/datavisualization/data/barrenderitem.cpp @@ -25,7 +25,6 @@ BarRenderItem::BarRenderItem() : AbstractRenderItem(), m_value(0), m_height(0.0f), - m_sliceLabelItem(0), m_seriesIndex(0) { } @@ -36,31 +35,58 @@ BarRenderItem::BarRenderItem(const BarRenderItem &other) m_value = other.m_value; m_position = other.m_position; m_height = other.m_height; - m_sliceLabel = other.m_sliceLabel; - m_sliceLabelItem = 0; m_seriesIndex = other.m_seriesIndex; } BarRenderItem::~BarRenderItem() { +} + +BarRenderSliceItem::BarRenderSliceItem() + : BarRenderItem(), + m_sliceLabelItem(0) +{ +} + +BarRenderSliceItem::BarRenderSliceItem(const BarRenderSliceItem &other) + : BarRenderItem(other) +{ + m_sliceLabel = other.m_sliceLabel; + m_sliceLabelItem = 0; +} + +BarRenderSliceItem::~BarRenderSliceItem() +{ delete m_sliceLabelItem; } -LabelItem &BarRenderItem::sliceLabelItem() +void BarRenderSliceItem::setItem(const BarRenderItem &renderItem) +{ + m_translation = renderItem.translation(); + m_rotation = renderItem.rotation(); + m_value = renderItem.value(); + m_position = renderItem.position(); + m_height = renderItem.height(); + m_seriesIndex = renderItem.seriesIndex(); + m_sliceLabel = QString(); + m_sliceLabelItem = 0; +} + +LabelItem &BarRenderSliceItem::sliceLabelItem() { if (!m_sliceLabelItem) m_sliceLabelItem = new LabelItem; return *m_sliceLabelItem; } -void BarRenderItem::setSliceLabel(const QString &label) +void BarRenderSliceItem::setSliceLabel(const QString &label) { if (m_sliceLabelItem) m_sliceLabelItem->clear(); m_sliceLabel = label; } -const QString &BarRenderItem::sliceLabel() const +const QString &BarRenderSliceItem::sliceLabel() const { return m_sliceLabel; } diff --git a/src/datavisualization/data/barrenderitem_p.h b/src/datavisualization/data/barrenderitem_p.h index df9d7a60..1122053d 100644 --- a/src/datavisualization/data/barrenderitem_p.h +++ b/src/datavisualization/data/barrenderitem_p.h @@ -47,28 +47,13 @@ public: inline const QPoint &position() const { return m_position; } // Actual cached data value of the bar (needed to trigger label reformats) - inline void setValue(float value) - { - m_value = value; - // Force reformatting on next access by setting label string to null string - if (!m_sliceLabel.isNull()) - setSliceLabel(QString()); - if (!m_selectionLabel.isNull()) - setSelectionLabel(QString()); - } + inline void setValue(float value) { m_value = value; } inline float value() const { return m_value; } // Normalized bar height inline void setHeight(GLfloat height) { m_height = height; } inline GLfloat height() const { return m_height; } - // Label item for formatted label - LabelItem &sliceLabelItem(); - - // Formatted label for item. - void setSliceLabel(const QString &label); - const QString &sliceLabel() const; // Formats label if not previously formatted - // Series index in visual series that this item belongs to. // This is only utilized by slicing, so it may not be up to date on all items. inline void setSeriesIndex(int seriesIndex) { m_seriesIndex = seriesIndex; } @@ -78,13 +63,33 @@ protected: float m_value; QPoint m_position; // x = row, y = column GLfloat m_height; - QString m_sliceLabel; - LabelItem *m_sliceLabelItem; int m_seriesIndex; friend class QBarDataItem; }; +class BarRenderSliceItem : public BarRenderItem +{ +public: + BarRenderSliceItem(); + BarRenderSliceItem(const BarRenderSliceItem &other); + virtual ~BarRenderSliceItem(); + + void setItem(const BarRenderItem &renderItem); + + // Label item for formatted label + LabelItem &sliceLabelItem(); + + // Formatted label for item. + void setSliceLabel(const QString &label); + const QString &sliceLabel() const; // Formats label if not previously formatted + +protected: + QString m_sliceLabel; + LabelItem *m_sliceLabelItem; + bool m_isNull; +}; + typedef QVector<BarRenderItem> BarRenderItemRow; typedef QVector<BarRenderItemRow> BarRenderItemArray; diff --git a/src/datavisualization/data/scatterrenderitem_p.h b/src/datavisualization/data/scatterrenderitem_p.h index 8b560c89..eb070682 100644 --- a/src/datavisualization/data/scatterrenderitem_p.h +++ b/src/datavisualization/data/scatterrenderitem_p.h @@ -45,12 +45,8 @@ public: inline const QVector3D &position() const { return m_position; } inline void setPosition(const QVector3D &pos) { - if (m_position != pos) { + if (m_position != pos) m_position = pos; - // Force reformatting on next access by setting label string to null string - if (!m_selectionLabel.isNull()) - setSelectionLabel(QString()); - } } inline bool isVisible() const { return m_visible; } diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index e62f2a00..3122cf76 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -44,7 +44,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) m_devicePixelRatio(1.0f), m_selectionLabelDirty(true), m_clickPending(false), - m_clickedSeries(0) + m_clickedSeries(0), + m_selectionLabelItem(0) #ifdef DISPLAY_RENDER_SPEED , m_isFirstFrame(true), m_numFrames(0) @@ -67,6 +68,7 @@ Abstract3DRenderer::~Abstract3DRenderer() delete m_textureHelper; delete m_cachedScene; delete m_cachedTheme; + delete m_selectionLabelItem; } void Abstract3DRenderer::initializeOpenGL() @@ -450,4 +452,23 @@ void Abstract3DRenderer::fixGradientAndGenerateTexture(QLinearGradient *gradient *gradientTexture = m_textureHelper->createGradientTexture(*gradient); } +LabelItem &Abstract3DRenderer::selectionLabelItem() +{ + if (!m_selectionLabelItem) + m_selectionLabelItem = new LabelItem; + return *m_selectionLabelItem; +} + +void Abstract3DRenderer::setSelectionLabel(const QString &label) +{ + if (m_selectionLabelItem) + m_selectionLabelItem->clear(); + m_selectionLabel = label; +} + +QString &Abstract3DRenderer::selectionLabel() +{ + return m_selectionLabel; +} + QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h index 4f5b644e..4eb8426f 100644 --- a/src/datavisualization/engine/abstract3drenderer_p.h +++ b/src/datavisualization/engine/abstract3drenderer_p.h @@ -101,6 +101,10 @@ public: inline void clearClickPending() { m_clickPending = false; } inline QAbstract3DSeries *clickedSeries() const { return m_clickedSeries; } + LabelItem &selectionLabelItem(); + void setSelectionLabel(const QString &label); + QString &selectionLabel(); + signals: void needRender(); // Emit this if something in renderer causes need for another render pass. void requestShadowQuality(QAbstract3DGraph::ShadowQuality quality); // For automatic quality adjustments @@ -146,6 +150,9 @@ protected: bool m_clickPending; QAbstract3DSeries *m_clickedSeries; + QString m_selectionLabel; + LabelItem *m_selectionLabelItem; + #ifdef DISPLAY_RENDER_SPEED bool m_isFirstFrame; QTime m_lastFrameTime; diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 3ec23476..be1be0dc 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -166,7 +166,6 @@ void Bars3DRenderer::updateData() m_seriesStart = -((float(seriesCount) - 1.0f) / 2.0f) * m_seriesStep; } - if (m_keepSeriesUniform) m_seriesScaleZ = m_seriesScaleX; else @@ -485,14 +484,14 @@ void Bars3DRenderer::drawSlicedScene() int sliceItemCount = m_sliceSelection.size(); for (int bar = 0; bar < sliceItemCount; bar++) { - BarRenderItem *item = m_sliceSelection.at(bar); - if (!item) + const BarRenderSliceItem &item = m_sliceSelection.at(bar); + if (!item.value()) continue; QQuaternion seriesRotation; - if (item->seriesIndex() != currentSeriesIndex) { - currentSeriesIndex = item->seriesIndex(); + if (item.seriesIndex() != currentSeriesIndex) { + currentSeriesIndex = item.seriesIndex(); currentSeries = &(m_visibleSeriesList.at(currentSeriesIndex)); barObj = currentSeries->object(); colorStyle = currentSeries->colorStyle(); @@ -524,7 +523,7 @@ void Bars3DRenderer::drawSlicedScene() seriesRotation = currentSeries->meshRotation(); } - if (item->height() < 0) + if (item.height() < 0) glCullFace(GL_FRONT); else glCullFace(GL_BACK); @@ -532,18 +531,18 @@ void Bars3DRenderer::drawSlicedScene() QMatrix4x4 MVPMatrix; QMatrix4x4 modelMatrix; QMatrix4x4 itModelMatrix; - QQuaternion barRotation = item->rotation(); - GLfloat barPosY = item->translation().y() + barPosYAdjustment - zeroPosAdjustment; + QQuaternion barRotation = item.rotation(); + GLfloat barPosY = item.translation().y() + barPosYAdjustment - zeroPosAdjustment; if (rowMode) { - barPosX = item->translation().x(); + barPosX = item.translation().x(); } else { - barPosX = -(item->translation().z()); // flip z; frontmost bar to the left + barPosX = -(item.translation().z()); // flip z; frontmost bar to the left barRotation *= ninetyDegreeRotation; } modelMatrix.translate(barPosX, barPosY, 0.0f); - modelMatrixScaler.setY(item->height()); + modelMatrixScaler.setY(item.height()); if (!seriesRotation.isIdentity()) barRotation *= seriesRotation; @@ -561,8 +560,8 @@ void Bars3DRenderer::drawSlicedScene() QVector3D barColor; GLuint gradientTexture = 0; - if (itemMode && m_visualSelectedBarPos.x() == item->position().x() - && m_visualSelectedBarPos.y() == item->position().y()) { + if (itemMode && m_visualSelectedBarPos.x() == item.position().x() + && m_visualSelectedBarPos.y() == item.position().y()) { if (colorStyleIsUniform) barColor = highlightColor; else @@ -574,7 +573,7 @@ void Bars3DRenderer::drawSlicedScene() gradientTexture = baseGradientTexture; } - if (item->height() != 0) { + if (item.height() != 0) { // Set shader bindings barShader->setUniformValue(barShader->model(), modelMatrix); barShader->setUniformValue(barShader->nModel(), @@ -584,7 +583,7 @@ void Bars3DRenderer::drawSlicedScene() barShader->setUniformValue(barShader->color(), barColor); } else if (colorStyle == Q3DTheme::ColorStyleRangeGradient) { barShader->setUniformValue(barShader->gradientHeight(), - (qAbs(item->height()) / m_gradientFraction)); + (qAbs(item.height()) / m_gradientFraction)); } // Draw the object @@ -614,10 +613,10 @@ void Bars3DRenderer::drawSlicedScene() for (int labelNo = 0; labelNo <= lastLabel; labelNo++) { // Get labels from first series only - BarRenderItem *item = m_sliceSelection.at(labelNo); - m_dummyBarRenderItem.setTranslation(QVector3D(item->translation().x(), + const BarRenderSliceItem &item = m_sliceSelection.at(labelNo); + m_dummyBarRenderItem.setTranslation(QVector3D(item.translation().x(), barLabelYPos, - item->translation().z())); + item.translation().z())); // Draw labels m_drawer->drawLabel(m_dummyBarRenderItem, *m_sliceCache->labelItems().at(labelNo), viewMatrix, projectionMatrix, positionComp, sliceLabelRotation, @@ -627,53 +626,53 @@ void Bars3DRenderer::drawSlicedScene() } for (int col = 0; col < sliceItemCount; col++) { - BarRenderItem *item = m_sliceSelection.at(col); + BarRenderSliceItem &item = m_sliceSelection[col]; if (!sliceGridLabels) { // Draw values - if (item->height() != 0.0f || (!m_noZeroInRange && item->value() == 0.0f)) { + if (item.height() != 0.0f || (!m_noZeroInRange && item.value() == 0.0f)) { // Create label texture if we need it - if (item->sliceLabel().isNull() || m_updateLabels) { - item->setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(), - item->value())); - m_drawer->generateLabelItem(item->sliceLabelItem(), item->sliceLabel()); + if (item.sliceLabel().isNull() || m_updateLabels) { + item.setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(), + item.value())); + m_drawer->generateLabelItem(item.sliceLabelItem(), item.sliceLabel()); m_updateLabels = false; } - Qt::AlignmentFlag alignment = (item->height() < 0) ? Qt::AlignBottom : Qt::AlignTop; - Drawer::LabelPosition labelPos = (item->height() < 0) ? Drawer::LabelBelow : Drawer::LabelOver; - m_dummyBarRenderItem.setTranslation(QVector3D(item->translation().x(), + Qt::AlignmentFlag alignment = (item.height() < 0) ? Qt::AlignBottom : Qt::AlignTop; + Drawer::LabelPosition labelPos = (item.height() < 0) ? Drawer::LabelBelow : Drawer::LabelOver; + m_dummyBarRenderItem.setTranslation(QVector3D(item.translation().x(), barPosYAdjustment - zeroPosAdjustment - + item->height(), - item->translation().z())); + + item.height(), + item.translation().z())); - m_drawer->drawLabel(m_dummyBarRenderItem, item->sliceLabelItem(), viewMatrix, + m_drawer->drawLabel(m_dummyBarRenderItem, item.sliceLabelItem(), viewMatrix, projectionMatrix, zeroVector, sliceValueRotation, - item->height(), m_cachedSelectionMode, m_labelShader, + item.height(), m_cachedSelectionMode, m_labelShader, m_labelObj, activeCamera, false, false, labelPos, alignment, true); } } else { // Only draw value for selected item when grid labels are on - if (itemMode && m_visualSelectedBarPos.x() == item->position().x() - && m_visualSelectedBarPos.y() == item->position().y() - && item->seriesIndex() == m_visualSelectedBarSeriesIndex) { + if (itemMode && m_visualSelectedBarPos.x() == item.position().x() + && m_visualSelectedBarPos.y() == item.position().y() + && item.seriesIndex() == m_visualSelectedBarSeriesIndex) { // Create label texture if we need it - if (item->sliceLabel().isNull() || m_updateLabels) { - item->setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(), - item->value())); - m_drawer->generateLabelItem(item->sliceLabelItem(), item->sliceLabel()); + if (item.sliceLabel().isNull() || m_updateLabels) { + item.setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(), + item.value())); + m_drawer->generateLabelItem(item.sliceLabelItem(), item.sliceLabel()); m_updateLabels = false; } - Qt::AlignmentFlag alignment = (item->height() < 0) ? Qt::AlignBottom : Qt::AlignTop; - Drawer::LabelPosition labelPos = (item->height() < 0) ? Drawer::LabelBelow : Drawer::LabelOver; - m_dummyBarRenderItem.setTranslation(QVector3D(item->translation().x(), + Qt::AlignmentFlag alignment = (item.height() < 0) ? Qt::AlignBottom : Qt::AlignTop; + Drawer::LabelPosition labelPos = (item.height() < 0) ? Drawer::LabelBelow : Drawer::LabelOver; + m_dummyBarRenderItem.setTranslation(QVector3D(item.translation().x(), barPosYAdjustment - zeroPosAdjustment - + item->height(), - item->translation().z())); + + item.height(), + item.translation().z())); - m_drawer->drawLabel(m_dummyBarRenderItem, item->sliceLabelItem(), viewMatrix, + m_drawer->drawLabel(m_dummyBarRenderItem, item.sliceLabelItem(), viewMatrix, projectionMatrix, zeroVector, sliceValueRotation, - item->height(), m_cachedSelectionMode, m_labelShader, + item.height(), m_cachedSelectionMode, m_labelShader, m_labelObj, activeCamera, false, false, labelPos, alignment, true); } @@ -1199,9 +1198,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) item.setPosition(QPoint(row, bar)); item.setSeriesIndex(series); if (rowMode) - m_sliceSelection[sliceSeriesAdjust + bar] = &item; + m_sliceSelection[sliceSeriesAdjust + bar].setItem(item); else - m_sliceSelection[sliceSeriesAdjust + row] = &item; + m_sliceSelection[sliceSeriesAdjust + row].setItem(item); } break; } @@ -1221,7 +1220,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) item.setSeriesIndex(series); if (!m_sliceTitleItem && m_axisCacheZ.labelItems().size() > row) m_sliceTitleItem = m_axisCacheZ.labelItems().at(row); - m_sliceSelection[sliceSeriesAdjust + bar] = &item; + m_sliceSelection[sliceSeriesAdjust + bar].setItem(item); } } break; @@ -1248,7 +1247,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) item.setSeriesIndex(series); if (!m_sliceTitleItem && m_axisCacheX.labelItems().size() > bar) m_sliceTitleItem = m_axisCacheX.labelItems().at(bar); - m_sliceSelection[sliceSeriesAdjust + row] = &item; + m_sliceSelection[sliceSeriesAdjust + row].setItem(item); } } break; @@ -1804,10 +1803,10 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) // Print value of selected bar glDisable(GL_DEPTH_TEST); // Draw the selection label - LabelItem &labelItem = selectedBar->selectionLabelItem(); + LabelItem &labelItem = selectionLabelItem(); if (m_selectedBar != selectedBar || m_updateLabels || !labelItem.textureId() || m_selectionLabelDirty) { - QString labelText = selectedBar->selectionLabel(); + QString labelText = selectionLabel(); if (labelText.isNull() || m_selectionLabelDirty) { static const QString rowIndexTag(QStringLiteral("@rowIdx")); static const QString rowLabelTag(QStringLiteral("@rowLabel")); @@ -1851,7 +1850,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) labelText.replace(seriesNameTag, m_visibleSeriesList[m_visualSelectedBarSeriesIndex].name()); - selectedBar->setSelectionLabel(labelText); + setSelectionLabel(labelText); m_selectionLabelDirty = false; } m_drawer->generateLabelItem(labelItem, labelText); @@ -1942,6 +1941,7 @@ void Bars3DRenderer::updateSelectedBar(const QPoint &position, const QBar3DSerie m_selectedBarPos = position; m_selectedBarSeries = series; m_selectionDirty = true; + m_selectionLabelDirty = true; m_visualSelectedBarSeriesIndex = -1; if (m_renderingArrays.isEmpty()) { diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h index 89030b30..37ac2b76 100644 --- a/src/datavisualization/engine/bars3drenderer_p.h +++ b/src/datavisualization/engine/bars3drenderer_p.h @@ -60,7 +60,7 @@ private: // Internal state BarRenderItem *m_selectedBar; // points to renderitem array - QVector<BarRenderItem *> m_sliceSelection; + QVector<BarRenderSliceItem> m_sliceSelection; AxisRenderCache *m_sliceCache; // not owned const LabelItem *m_sliceTitleItem; // not owned bool m_xFlipped; diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index b70d7c0e..55a2c2a5 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -24,6 +24,7 @@ #include "q3dcamera.h" #include "utils_p.h" #include "texturehelper_p.h" +#include "abstract3drenderer_p.h" #include <QtGui/QMatrix4x4> #include <QtCore/qmath.h> @@ -349,10 +350,10 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte drawObject(shader, object, labelItem.textureId()); } -void Drawer::generateSelectionLabelTexture(AbstractRenderItem *item) +void Drawer::generateSelectionLabelTexture(Abstract3DRenderer *renderer) { - LabelItem &labelItem = item->selectionLabelItem(); - generateLabelItem(labelItem, item->selectionLabel()); + LabelItem &labelItem = renderer->selectionLabelItem(); + generateLabelItem(labelItem, renderer->selectionLabel()); } void Drawer::generateLabelItem(LabelItem &item, const QString &text, int widestLabel) diff --git a/src/datavisualization/engine/drawer_p.h b/src/datavisualization/engine/drawer_p.h index 54c8111e..8e98aa3a 100644 --- a/src/datavisualization/engine/drawer_p.h +++ b/src/datavisualization/engine/drawer_p.h @@ -43,6 +43,7 @@ class AbstractObjectHelper; class SurfaceObject; class TextureHelper; class Q3DCamera; +class Abstract3DRenderer; class Drawer : public QObject, public QOpenGLFunctions { @@ -83,7 +84,7 @@ public: LabelPosition position = LabelOver, Qt::AlignmentFlag alignment = Qt::AlignCenter, bool isSlicing = false); - void generateSelectionLabelTexture(AbstractRenderItem *item); + void generateSelectionLabelTexture(Abstract3DRenderer *item); void generateLabelItem(LabelItem &item, const QString &text, int widestLabel = 0); Q_SIGNALS: diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 19061b11..de1a769a 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -1460,10 +1460,10 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) } else { glDisable(GL_DEPTH_TEST); // Draw the selection label - LabelItem &labelItem = selectedItem->selectionLabelItem(); + LabelItem &labelItem = selectionLabelItem(); if (m_selectedItem != selectedItem || m_updateLabels || !labelItem.textureId() || m_selectionLabelDirty) { - QString labelText = selectedItem->selectionLabel(); + QString labelText = selectionLabel(); if (labelText.isNull() || m_selectionLabelDirty) { static const QString xTitleTag(QStringLiteral("@xTitle")); static const QString yTitleTag(QStringLiteral("@yTitle")); @@ -1505,7 +1505,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) } labelText.replace(seriesNameTag, m_visibleSeriesList[m_selectedItemSeriesIndex].name()); - selectedItem->setSelectionLabel(labelText); + setSelectionLabel(labelText); m_selectionLabelDirty = false; } m_drawer->generateLabelItem(labelItem, labelText); @@ -1534,6 +1534,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) void Scatter3DRenderer::updateSelectedItem(int index, const QScatter3DSeries *series) { m_selectionDirty = true; + m_selectionLabelDirty = true; m_selectedSeries = series; m_selectedItemIndex = Scatter3DController::invalidSelectionIndex(); m_selectedItemTotalIndex = Scatter3DController::invalidSelectionIndex(); |