summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/data/abstractrenderitem.cpp23
-rw-r--r--src/datavisualization/data/abstractrenderitem_p.h9
-rw-r--r--src/datavisualization/data/barrenderitem.cpp38
-rw-r--r--src/datavisualization/data/barrenderitem_p.h41
-rw-r--r--src/datavisualization/data/scatterrenderitem_p.h6
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp23
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h7
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp104
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/drawer.cpp7
-rw-r--r--src/datavisualization/engine/drawer_p.h3
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp7
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();