summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/customrenderitem_p.h5
-rw-r--r--src/datavisualization/data/qcustom3ditem.cpp36
-rw-r--r--src/datavisualization/data/qcustom3ditem.h1
-rw-r--r--src/datavisualization/data/qcustom3ditem_p.h24
4 files changed, 56 insertions, 10 deletions
diff --git a/src/datavisualization/data/customrenderitem_p.h b/src/datavisualization/data/customrenderitem_p.h
index 70c162b7..3bf8067e 100644
--- a/src/datavisualization/data/customrenderitem_p.h
+++ b/src/datavisualization/data/customrenderitem_p.h
@@ -34,6 +34,8 @@
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+class QCustom3DItem;
+
class CustomRenderItem : public AbstractRenderItem
{
public:
@@ -51,6 +53,8 @@ public:
inline bool isBlendNeeded() { return m_needBlend; }
inline void setVisible(bool visible) { m_visible = visible; }
inline bool isVisible() { return m_visible; }
+ inline void setItemPointer(QCustom3DItem *item) { m_item = item; }
+ inline QCustom3DItem *itemPointer() { return m_item; }
private:
GLuint m_texture;
@@ -58,6 +62,7 @@ private:
ObjectHelper *m_object;
bool m_needBlend;
bool m_visible;
+ QCustom3DItem *m_item;
};
typedef QVector<CustomRenderItem *> CustomRenderItemArray;
diff --git a/src/datavisualization/data/qcustom3ditem.cpp b/src/datavisualization/data/qcustom3ditem.cpp
index 285f5a39..ca4cef16 100644
--- a/src/datavisualization/data/qcustom3ditem.cpp
+++ b/src/datavisualization/data/qcustom3ditem.cpp
@@ -123,7 +123,9 @@ void QCustom3DItem::setMeshFile(const QString &meshFile)
{
if (d_ptr->m_meshFile != meshFile) {
d_ptr->m_meshFile = meshFile;
+ d_ptr->m_dirtyBits.meshDirty = true;
emit meshFileChanged(meshFile);
+ emit d_ptr->needUpdate();
}
}
@@ -144,7 +146,9 @@ void QCustom3DItem::setPosition(const QVector3D &position)
{
if (d_ptr->m_position != position) {
d_ptr->m_position = position;
+ d_ptr->m_dirtyBits.positionDirty = true;
emit positionChanged(position);
+ emit d_ptr->needUpdate();
}
}
@@ -161,7 +165,9 @@ void QCustom3DItem::setScaling(const QVector3D &scaling)
{
if (d_ptr->m_scaling != scaling) {
d_ptr->m_scaling = scaling;
+ d_ptr->m_dirtyBits.scalingDirty = true;
emit scalingChanged(scaling);
+ emit d_ptr->needUpdate();
}
}
@@ -178,7 +184,9 @@ void QCustom3DItem::setRotation(const QQuaternion &rotation)
{
if (d_ptr->m_rotation != rotation) {
d_ptr->m_rotation = rotation;
+ d_ptr->m_dirtyBits.rotationDirty = true;
emit rotationChanged(rotation);
+ emit d_ptr->needUpdate();
}
}
@@ -195,7 +203,9 @@ void QCustom3DItem::setVisible(bool visible)
{
if (d_ptr->m_visible != visible) {
d_ptr->m_visible = visible;
+ d_ptr->m_dirtyBits.visibleDirty = true;
emit visibleChanged(visible);
+ emit d_ptr->needUpdate();
}
}
@@ -219,17 +229,21 @@ void QCustom3DItem::setRotationAxisAndAngle(const QVector3D &axis, float angle)
*/
void QCustom3DItem::setTextureImage(const QImage &textureImage)
{
- if (textureImage.isNull()) {
- // Make a solid gray texture
- d_ptr->m_textureImage = QImage(2, 2, QImage::Format_RGB32);
- d_ptr->m_textureImage.fill(Qt::gray);
- } else {
- d_ptr->m_textureImage = textureImage;
- }
+ if (textureImage != d_ptr->m_textureImage) {
+ if (textureImage.isNull()) {
+ // Make a solid gray texture
+ d_ptr->m_textureImage = QImage(2, 2, QImage::Format_RGB32);
+ d_ptr->m_textureImage.fill(Qt::gray);
+ } else {
+ d_ptr->m_textureImage = textureImage;
+ }
- if (!d_ptr->m_textureFile.isEmpty()) {
- d_ptr->m_textureFile.clear();
- emit textureFileChanged(d_ptr->m_textureFile);
+ if (!d_ptr->m_textureFile.isEmpty()) {
+ d_ptr->m_textureFile.clear();
+ emit textureFileChanged(d_ptr->m_textureFile);
+ }
+ d_ptr->m_dirtyBits.textureDirty = true;
+ emit d_ptr->needUpdate();
}
}
@@ -249,6 +263,8 @@ void QCustom3DItem::setTextureFile(const QString &textureFile)
d_ptr->m_textureImage.fill(Qt::gray);
}
emit textureFileChanged(textureFile);
+ d_ptr->m_dirtyBits.textureDirty = true;
+ emit d_ptr->needUpdate();
}
}
diff --git a/src/datavisualization/data/qcustom3ditem.h b/src/datavisualization/data/qcustom3ditem.h
index c9d0cd63..77e33404 100644
--- a/src/datavisualization/data/qcustom3ditem.h
+++ b/src/datavisualization/data/qcustom3ditem.h
@@ -82,6 +82,7 @@ private:
Q_DISABLE_COPY(QCustom3DItem)
friend class Abstract3DRenderer;
+ friend class Abstract3DController;
};
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/data/qcustom3ditem_p.h b/src/datavisualization/data/qcustom3ditem_p.h
index f85ec5bf..89f47501 100644
--- a/src/datavisualization/data/qcustom3ditem_p.h
+++ b/src/datavisualization/data/qcustom3ditem_p.h
@@ -33,6 +33,25 @@
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+struct QCustomItemDirtyBitField {
+ bool textureDirty : 1;
+ bool meshDirty : 1;
+ bool positionDirty : 1;
+ bool scalingDirty : 1;
+ bool rotationDirty : 1;
+ bool visibleDirty : 1;
+
+ QCustomItemDirtyBitField()
+ : textureDirty(false),
+ meshDirty(false),
+ positionDirty(false),
+ scalingDirty(false),
+ rotationDirty(false),
+ visibleDirty(false)
+ {
+ }
+};
+
class QCustom3DItemPrivate : public QObject
{
Q_OBJECT
@@ -55,6 +74,11 @@ public:
QQuaternion m_rotation;
bool m_visible;
+ QCustomItemDirtyBitField m_dirtyBits;
+
+signals:
+ void needUpdate();
+
private:
friend class QCustom3DItem;
};