From 37493fac3422ce5cbe34748ca25757ca6302a583 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 24 Feb 2014 14:03:14 +0200 Subject: Move selection labels to renderer from render items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creating a new label on demand is fast enough, so we don't need to store old labels. Storing labels unnecessarily leads to unchecked use of graphics memory. Optimized bar slices a bit by having separate class of render items for slice items. Change-Id: I5afdecfb3949393341b6c3eaefbc667c65da32e3 Reviewed-by: Tomi Korpipää --- src/datavisualization/data/abstractrenderitem.cpp | 23 ------------- src/datavisualization/data/abstractrenderitem_p.h | 9 ----- src/datavisualization/data/barrenderitem.cpp | 38 +++++++++++++++++---- src/datavisualization/data/barrenderitem_p.h | 41 +++++++++++++---------- src/datavisualization/data/scatterrenderitem_p.h | 6 +--- 5 files changed, 56 insertions(+), 61 deletions(-) (limited to 'src/datavisualization/data') 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 BarRenderItemRow; typedef QVector 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; } -- cgit v1.2.3