summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README1
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp3
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization.qdoc2
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp7
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp2
-rw-r--r--src/datavisualization/engine/seriesrendercache_p.h2
-rw-r--r--src/datavisualization/utils/utils.cpp10
-rw-r--r--src/datavisualization/utils/utils_p.h2
8 files changed, 25 insertions, 4 deletions
diff --git a/README b/README
index 7a4b9edb..b51eb586 100644
--- a/README
+++ b/README
@@ -82,6 +82,5 @@ Known Issues
- Q3DLight class (and Light3D QML item) are currently not usable for anything.
- Changing any of Q3DScene properties affecting subviewports currently has no effect.
- The color style Q3DTheme::ColorStyleObjectGradient doesn't work for surface graphs.
-- Scatter "point" meshes do not support gradients, they always use the base color.
- Widget based examples layout incorrectly in iOS.
- Reparenting a graph to an item in another QQuickWindow is not supported.
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
index e593a1d9..802a4e8e 100644
--- a/src/datavisualization/data/qabstract3dseries.cpp
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -102,7 +102,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* Arrow pointing upwards.
* \value MeshPoint
* 2D point. Usable only with Q3DScatter.
- * \b Note: Shadows and color gradients do not affect this style.
+ * \b Note: Shadows do not affect this style. Color style Q3DTheme::ColorStyleObjectGradient
+ * is not supported by this style.
*/
/*!
diff --git a/src/datavisualization/doc/src/qtdatavisualization.qdoc b/src/datavisualization/doc/src/qtdatavisualization.qdoc
index 061addf1..90b1a41e 100644
--- a/src/datavisualization/doc/src/qtdatavisualization.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization.qdoc
@@ -323,8 +323,6 @@
\li Q3DLight class (and Light3D QML item) are currently not usable for anything.
\li Changing any of Q3DScene properties affecting subviewports currently has no effect.
\li The color style Q3DTheme::ColorStyleObjectGradient doesn't work for surface graphs.
- \li Scatter "point" meshes (QAbstract3DSeries::MeshPoint) do not support gradients, they
- always use the base color.
\li Widget based examples layout incorrectly in iOS.
\li Reparenting a graph to an item in another QQuickWindow is not supported.
\endlist
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index ae4b3831..2c957f79 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -730,6 +730,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->setUniformValue(dotShader->MVP(), MVPMatrix);
if (useColor) {
+ if (colorStyle == Q3DTheme::ColorStyleRangeGradient) {
+ // Drawing points with range gradient
+ // Get color from gradient based on items y position converted to percents
+ int position = int(item.translation().y() * 50.0f) + 50;
+ dotColor = Utils::vectorFromColor(
+ currentSeries.gradientImage().pixel(0, position));
+ }
dotShader->setUniformValue(dotShader->color(), dotColor);
} else if (colorStyle == Q3DTheme::ColorStyleRangeGradient) {
dotShader->setUniformValue(dotShader->gradientMin(),
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index 896b3b28..8cfd9b08 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -32,6 +32,7 @@ SeriesRenderCache::SeriesRenderCache()
m_mesh(QAbstract3DSeries::MeshCube),
m_baseUniformTexture(0),
m_baseGradientTexture(0),
+ m_gradientImage(0),
m_singleHighlightGradientTexture(0),
m_multiHighlightGradientTexture(0)
{
@@ -150,6 +151,7 @@ void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer *
if (seriesChanged || changeTracker.baseGradientChanged) {
QLinearGradient gradient = series->baseGradient();
+ m_gradientImage = Utils::getGradientImage(gradient);
renderer->fixGradientAndGenerateTexture(&gradient, &m_baseGradientTexture);
changeTracker.baseGradientChanged = false;
}
diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h
index 77e050b0..1ef67c88 100644
--- a/src/datavisualization/engine/seriesrendercache_p.h
+++ b/src/datavisualization/engine/seriesrendercache_p.h
@@ -60,6 +60,7 @@ public:
inline const QVector3D &baseColor() const { return m_baseColor; }
inline const GLuint &baseUniformTexture() const { return m_baseUniformTexture; }
inline const GLuint &baseGradientTexture() const { return m_baseGradientTexture; }
+ inline const QImage &gradientImage() const { return m_gradientImage; }
inline const QVector3D &singleHighlightColor() const { return m_singleHighlightColor; }
inline const GLuint &singleHighlightGradientTexture() const { return m_singleHighlightGradientTexture; }
inline const QVector3D &multiHighlightColor() const { return m_multiHighlightColor; }
@@ -77,6 +78,7 @@ protected:
QVector3D m_baseColor;
GLuint m_baseUniformTexture;
GLuint m_baseGradientTexture;
+ QImage m_gradientImage;
QVector3D m_singleHighlightColor;
GLuint m_singleHighlightGradientTexture;
QVector3D m_multiHighlightColor;
diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp
index e0b1370e..be087f91 100644
--- a/src/datavisualization/utils/utils.cpp
+++ b/src/datavisualization/utils/utils.cpp
@@ -138,6 +138,16 @@ QVector3D Utils::getSelection(QPoint mousepos, int height)
return selectedColor;
}
+QImage Utils::getGradientImage(const QLinearGradient &gradient)
+{
+ QImage image(QSize(1, 101), QImage::Format_RGB32);
+ QPainter pmp(&image);
+ pmp.setBrush(QBrush(gradient));
+ pmp.setPen(Qt::NoPen);
+ pmp.drawRect(0, 0, 1, 101);
+ return image;
+}
+
Utils::ParamType Utils::mapFormatCharToParamType(const QChar &formatChar)
{
ParamType retVal = ParamTypeUnknown;
diff --git a/src/datavisualization/utils/utils_p.h b/src/datavisualization/utils/utils_p.h
index 7288419b..c87ef19a 100644
--- a/src/datavisualization/utils/utils_p.h
+++ b/src/datavisualization/utils/utils_p.h
@@ -37,6 +37,7 @@ class QPainter;
class QString;
class QPoint;
class QImage;
+class QLinearGradient;
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -63,6 +64,7 @@ public:
bool borders = false,
int maxLabelWidth = 0);
static QVector3D getSelection(QPoint mousepos, int height);
+ static QImage getGradientImage(const QLinearGradient &gradient);
static ParamType findFormatParamType(const QString &format);
static QString formatLabel(const QByteArray &format, ParamType paramType, float value);