summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-07 14:57:48 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-08 09:09:22 +0200
commit1dca7a61130615da20f8c7205abd62db721e61d0 (patch)
tree476db607495d38fc986157e2715a79e23487a3a6
parent6c3a413f65fe69cc525599ca183a66976ce0eaa7 (diff)
Gradient support part 2
Scatter gradients. Task-number: QTRD-2200 Change-Id: Ia6ac271440d0d26b7cae9332ef2ba4e7bf1a11fe Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy.cpp2
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy.cpp2
-rw-r--r--src/datavisualization/data/qscatterdataproxy.cpp2
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp5
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp22
-rw-r--r--src/datavisualization/engine/q3dscatter.cpp25
-rw-r--r--src/datavisualization/engine/q3dscatter.h3
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp44
-rw-r--r--src/datavisualization/engine/selectionpointer.cpp2
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp5
-rw-r--r--src/datavisualization/engine/theme.cpp50
-rw-r--r--src/datavisualization/engine/theme_p.h5
-rw-r--r--src/datavisualization/global/datavisualizationglobal_p.h2
-rw-r--r--src/datavisualization/global/qtdatavisualizationenums.qdoc3
-rw-r--r--src/datavisualization/utils/texturehelper.cpp6
-rw-r--r--src/datavisualization/utils/texturehelper_p.h2
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp4
-rw-r--r--src/datavisualizationqml2/declarativebars_p.h2
-rw-r--r--src/datavisualizationqml2/declarativescatter.cpp4
-rw-r--r--src/datavisualizationqml2/declarativescatter_p.h2
-rw-r--r--tests/barstest/chart.cpp10
-rw-r--r--tests/scattertest/main.cpp19
-rw-r--r--tests/scattertest/scatterchart.cpp34
-rw-r--r--tests/scattertest/scatterchart.h1
24 files changed, 139 insertions, 117 deletions
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
index 66a0a63b..5536a105 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
@@ -34,7 +34,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* The data is resolved asynchronously whenever the mapping or the model changes.
* QScatterDataProxy::arrayReset() is emitted when the data has been resolved.
*
- * /sa {Qt Data Visualization Data Handling}
+ * \sa {Qt Data Visualization Data Handling}
*/
/*!
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
index d3f0f076..75032930 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
@@ -36,7 +36,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* Data is resolved asynchronously whenever the mapping or the model changes.
* QSurfaceDataProxy::arrayReset() is emitted when the data has been resolved.
*
- * /sa {Qt Data Visualization Data Handling}
+ * \sa {Qt Data Visualization Data Handling}
*/
/*!
diff --git a/src/datavisualization/data/qscatterdataproxy.cpp b/src/datavisualization/data/qscatterdataproxy.cpp
index c5559e9c..85cbb4eb 100644
--- a/src/datavisualization/data/qscatterdataproxy.cpp
+++ b/src/datavisualization/data/qscatterdataproxy.cpp
@@ -53,7 +53,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* For example:
* \snippet doc_src_qtdatavisualization.cpp 2
*
- * /sa {Qt Data Visualization Data Handling}
+ * \sa {Qt Data Visualization Data Handling}
*/
/*!
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 44a9e8b2..c62fe097 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -827,8 +827,9 @@ void Abstract3DController::setTheme(QDataVis::Theme theme)
// TODO: set all colors/styles here (QTRD-2538)
setColorStyle(QDataVis::ColorStyleUniform);
setObjectColor(m_theme.m_baseColor);
- setSingleHighlightColor(m_theme.m_highlightBarColor);
- setMultiHighlightColor(m_theme.m_highlightRowColor);
+ setSingleHighlightColor(m_theme.m_singleHighlightColor);
+ setMultiHighlightColor(m_theme.m_multiHighlightColor);
+
emit themeChanged(theme);
emitNeedRender();
}
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index e0910880..d8c01b02 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -314,9 +314,9 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
m_cachedTheme.m_ambientStrength * 2.0f);
if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
// Round the gradient off a bit to avoid it looping over
- m_barShader->setUniformValue(m_barShader->gradientMin(), gradientMargin);
+ m_barShader->setUniformValue(m_barShader->gradientMin(), 0.0f);
if (m_cachedColorStyle == QDataVis::ColorStyleObjectGradient)
- m_barShader->setUniformValue(m_barShader->gradientHeight(), 0.5f - gradientMargin);
+ m_barShader->setUniformValue(m_barShader->gradientHeight(), 0.5f);
gradientTexture = m_objectGradientTexture;
}
@@ -331,8 +331,8 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
}
QVector3D modelMatrixScaler(m_scaleX, 0.0f, m_scaleZ);
QMatrix4x4 projectionViewMatrix = projectionMatrix * viewMatrix;
- QVector3D barHighlightColor(Utils::vectorFromColor(m_cachedTheme.m_highlightBarColor));
- QVector3D rowHighlightColor(Utils::vectorFromColor(m_cachedTheme.m_highlightRowColor));
+ QVector3D barHighlightColor(Utils::vectorFromColor(m_cachedSingleHighlightColor));
+ QVector3D rowHighlightColor(Utils::vectorFromColor(m_cachedMultiHighlightColor));
bool rowMode = m_cachedSelectionMode.testFlag(QDataVis::SelectionRow);
bool itemMode = m_cachedSelectionMode.testFlag(QDataVis::SelectionItem);
@@ -386,8 +386,7 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
m_barShader->setUniformValue(m_barShader->color(), barColor);
} else if (m_cachedColorStyle == QDataVis::ColorStyleRangeGradient) {
m_barShader->setUniformValue(m_barShader->gradientHeight(),
- ((qAbs(item->height()) / m_gradientFraction))
- - gradientMargin);
+ (qAbs(item->height()) / m_gradientFraction));
}
// Draw the object
@@ -801,9 +800,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_cachedTheme.m_ambientStrength);
if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
// Round the gradient off a bit to avoid it looping over
- m_barShader->setUniformValue(m_barShader->gradientMin(), gradientMargin);
+ m_barShader->setUniformValue(m_barShader->gradientMin(), 0.0f);
if (m_cachedColorStyle == QDataVis::ColorStyleObjectGradient)
- m_barShader->setUniformValue(m_barShader->gradientHeight(), 0.5f - gradientMargin);
+ m_barShader->setUniformValue(m_barShader->gradientHeight(), 0.5f);
gradientTexture = m_objectGradientTexture;
}
@@ -825,8 +824,8 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
}
// Draw bars
- QVector3D barHighlightColor(Utils::vectorFromColor(m_cachedTheme.m_highlightBarColor));
- QVector3D rowHighlightColor(Utils::vectorFromColor(m_cachedTheme.m_highlightRowColor));
+ QVector3D barHighlightColor(Utils::vectorFromColor(m_cachedSingleHighlightColor));
+ QVector3D rowHighlightColor(Utils::vectorFromColor(m_cachedMultiHighlightColor));
QVector3D baseColor(Utils::vectorFromColor(m_cachedObjectColor));
QVector3D barColor = baseColor;
@@ -961,8 +960,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_barShader->setUniformValue(m_barShader->color(), barColor);
} else if (m_cachedColorStyle == QDataVis::ColorStyleRangeGradient) {
m_barShader->setUniformValue(m_barShader->gradientHeight(),
- ((qAbs(item.height()) / m_gradientFraction))
- - gradientMargin);
+ qAbs(item.height()) / m_gradientFraction);
}
#if !defined(QT_OPENGL_ES_2)
diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp
index 0893990b..195660a9 100644
--- a/src/datavisualization/engine/q3dscatter.cpp
+++ b/src/datavisualization/engine/q3dscatter.cpp
@@ -238,31 +238,6 @@ QDataVis::Theme Q3DScatter::theme() const
}
/*!
- * Set item color using your own colors. \a baseColor sets the base color of a item. The \a uniform
- * -flag is used to define if color needs to be uniform throughout item's length, or will the colors
- * be applied by height. It is \c true by default.
- *
- * Calling this method overrides colors from theme.
- *
- * \sa setTheme()
- *
- * \preliminary
- */
-void Q3DScatter::setObjectColor(const QColor &baseColor, bool uniform)
-{
- //TODO
- d_ptr->m_shared->setObjectColor(baseColor);
-}
-
-/*!
- * \return item color in use.
- */
-QColor Q3DScatter::objectColor() const
-{
- return d_ptr->m_shared->objectColor();
-}
-
-/*!
* \property Q3DScatter::selectionMode
*
* Sets item selection \a mode to one of \c QDataVis::SelectionMode. It is preset to
diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h
index 2cc6bfd9..49397a56 100644
--- a/src/datavisualization/engine/q3dscatter.h
+++ b/src/datavisualization/engine/q3dscatter.h
@@ -63,9 +63,6 @@ public:
void setTheme(QDataVis::Theme theme);
QDataVis::Theme theme() const;
- void setObjectColor(const QColor &baseColor, bool uniform = true);
- QColor objectColor() const;
-
void setMeshFileName(const QString &objFileName);
QString meshFileName() const;
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 3ebbbf74..02c5d51a 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -507,6 +507,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Bind dot shader
ShaderHelper *dotShader = 0;
+ GLuint gradientTexture = 0;
if (!m_drawingPoints) {
// Set default shader
@@ -517,6 +518,17 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->setUniformValue(dotShader->lightP(), lightPos);
dotShader->setUniformValue(dotShader->view(), viewMatrix);
dotShader->setUniformValue(dotShader->ambientS(), m_cachedTheme.m_ambientStrength);
+ if (m_cachedColorStyle != QDataVis::ColorStyleUniform && !m_drawingPoints) {
+ if (m_cachedColorStyle == QDataVis::ColorStyleObjectGradient) {
+ // Round the gradient off a bit to avoid it looping over
+ dotShader->setUniformValue(dotShader->gradientMin(), 0.0f);
+ dotShader->setUniformValue(dotShader->gradientHeight(), 0.5f);
+ } else {
+ // Each ball is of uniform color according to its Y-coordinate
+ dotShader->setUniformValue(dotShader->gradientHeight(), 0.0f);
+ }
+ gradientTexture = m_objectGradientTexture;
+ }
// Enable texture
glEnable(GL_TEXTURE_2D);
@@ -534,7 +546,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
bool dotSelectionFound = false;
ScatterRenderItem *selectedItem(0);
- QVector3D baseColor = Utils::vectorFromColor(m_cachedTheme.m_baseColor);
+ QVector3D baseColor = Utils::vectorFromColor(m_cachedObjectColor);
+ QVector3D dotColor = baseColor;
for (int dot = 0; dot < m_renderItemArray.size(); dot++) {
ScatterRenderItem &item = m_renderItemArray[dot];
@@ -562,18 +575,17 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
MVPMatrix = projectionViewMatrix * modelMatrix;
#endif
-#if 0
- QVector3D heightColor =
- Utils::vectorFromColor(m_cachedTheme.m_heightColor) * item.translation().y();
-
- QVector3D dotColor = baseColor + heightColor;
-#else
- QVector3D dotColor = baseColor;
-#endif
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints)
+ dotColor = baseColor;
+ else
+ gradientTexture = m_objectGradientTexture;
GLfloat lightStrength = m_cachedTheme.m_lightStrength;
if (m_cachedSelectionMode > QDataVis::SelectionNone && (m_selectedItemIndex == dot)) {
- dotColor = Utils::vectorFromColor(m_cachedTheme.m_highlightBarColor);
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints)
+ dotColor = Utils::vectorFromColor(m_cachedSingleHighlightColor);
+ else
+ gradientTexture = m_singleHighlightGradientTexture;
lightStrength = m_cachedTheme.m_highlightLightStrength;
// Insert data to ScatterRenderItem. We have no ownership, don't delete the previous one
selectedItem = &item;
@@ -587,8 +599,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
itModelMatrix.inverted().transposed());
}
dotShader->setUniformValue(dotShader->MVP(), MVPMatrix);
- dotShader->setUniformValue(dotShader->color(), dotColor);
-
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints) {
+ dotShader->setUniformValue(dotShader->color(), dotColor);
+ } else if (m_cachedColorStyle == QDataVis::ColorStyleRangeGradient) {
+ dotShader->setUniformValue(dotShader->gradientMin(),
+ (item.position().y() + 1.0f) / 2.0f);
+ }
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) {
if (!m_drawingPoints) {
@@ -599,7 +615,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->setUniformValue(dotShader->lightS(), lightStrength / 10.0f);
// Draw the object
- m_drawer->drawObject(dotShader, m_dotObj, 0, m_depthTexture);
+ m_drawer->drawObject(dotShader, m_dotObj, gradientTexture, m_depthTexture);
} else {
// Draw the object
m_drawer->drawPoint(dotShader);
@@ -612,7 +628,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Set shadowless shader bindings
dotShader->setUniformValue(dotShader->lightS(), lightStrength);
// Draw the object
- m_drawer->drawObject(dotShader, m_dotObj);
+ m_drawer->drawObject(dotShader, m_dotObj, gradientTexture);
} else {
// Draw the object
m_drawer->drawPoint(dotShader);
diff --git a/src/datavisualization/engine/selectionpointer.cpp b/src/datavisualization/engine/selectionpointer.cpp
index 0b415df2..5aa1d3eb 100644
--- a/src/datavisualization/engine/selectionpointer.cpp
+++ b/src/datavisualization/engine/selectionpointer.cpp
@@ -143,7 +143,7 @@ void SelectionPointer::render(GLuint defaultFboHandle)
m_pointShader->setUniformValue(m_pointShader->model(), modelMatrix);
m_pointShader->setUniformValue(m_pointShader->nModel(), itModelMatrix.inverted().transposed());
m_pointShader->setUniformValue(m_pointShader->color(),
- Utils::vectorFromColor(m_cachedTheme.m_highlightBarColor));
+ Utils::vectorFromColor(m_cachedTheme.m_singleHighlightColor));
m_pointShader->setUniformValue(m_pointShader->MVP(), MVPMatrix);
m_pointShader->setUniformValue(m_pointShader->ambientS(), m_cachedTheme.m_ambientStrength);
m_pointShader->setUniformValue(m_pointShader->lightS(), m_cachedTheme.m_lightStrength * 2.0f);
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 0a33fb57..148d311f 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -536,10 +536,7 @@ void Surface3DRenderer::drawSlicedScene()
surfaceShader->bind();
QVector3D color;
- if (rowMode)
- color = Utils::vectorFromColor(m_cachedTheme.m_highlightRowColor);
- else
- color = Utils::vectorFromColor(m_cachedTheme.m_highlightColumnColor);
+ color = Utils::vectorFromColor(m_cachedTheme.m_multiHighlightColor);
// Set shader bindings
surfaceShader->setUniformValue(surfaceShader->lightP(), lightPos);
diff --git a/src/datavisualization/engine/theme.cpp b/src/datavisualization/engine/theme.cpp
index 2892f500..78a61637 100644
--- a/src/datavisualization/engine/theme.cpp
+++ b/src/datavisualization/engine/theme.cpp
@@ -34,9 +34,8 @@ Theme::Theme()
m_textColor(QColor(Qt::white)),
m_textBackgroundColor(QColor(0x00, 0x00, 0x00, 0xa0)),
m_gridLine(QColor(Qt::black)),
- m_highlightBarColor(QColor(Qt::red)),
- m_highlightRowColor(QColor(Qt::darkRed)),
- m_highlightColumnColor(QColor(Qt::darkMagenta)),
+ m_singleHighlightColor(QColor(Qt::red)),
+ m_multiHighlightColor(QColor(Qt::darkRed)),
m_surfaceGradient(QLinearGradient(qreal(gradientTextureWidth), qreal(gradientTextureHeight),
0.0, 0.0)),
m_lightStrength(4.0f),
@@ -70,9 +69,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0x35322f));
m_textBackgroundColor = QColor(0xff, 0xff, 0xff, 0x99);
m_gridLine = QColor(QRgb(0xd7d6d5));
- m_highlightBarColor = QColor(QRgb(0x14aaff));
- m_highlightRowColor = QColor(QRgb(0x6400aa));
- m_highlightColumnColor = QColor(QRgb(0x6400aa));
+ m_singleHighlightColor = QColor(QRgb(0x14aaff));
+ m_multiHighlightColor = QColor(QRgb(0x6400aa));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -89,9 +87,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0x000000));
m_textBackgroundColor = QColor(0xff, 0xff, 0xff, 0x99);
m_gridLine = QColor(QRgb(0xd7d6d5));
- m_highlightBarColor = QColor(QRgb(0x27beee));
- m_highlightRowColor = QColor(QRgb(0xee1414));
- m_highlightColumnColor = QColor(QRgb(0xee1414));
+ m_singleHighlightColor = QColor(QRgb(0x27beee));
+ m_multiHighlightColor = QColor(QRgb(0xee1414));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -108,9 +105,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0x000000));
m_textBackgroundColor = QColor(0xff, 0xff, 0xff, 0x80);
m_gridLine = QColor(QRgb(0xd7d6d5));
- m_highlightBarColor = QColor(QRgb(0xfa0000));
- m_highlightRowColor = QColor(QRgb(0x555555));
- m_highlightColumnColor = QColor(QRgb(0x555555));
+ m_singleHighlightColor = QColor(QRgb(0xfa0000));
+ m_multiHighlightColor = QColor(QRgb(0x555555));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -127,9 +123,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0xffffff));
m_textBackgroundColor = QColor(0x4d, 0x4d, 0x4f, 0xcd);
m_gridLine = QColor(QRgb(0x3e3e40));
- m_highlightBarColor = QColor(QRgb(0xfbf6d6));
- m_highlightRowColor = QColor(QRgb(0x442f20));
- m_highlightColumnColor = QColor(QRgb(0x442f20));
+ m_singleHighlightColor = QColor(QRgb(0xfbf6d6));
+ m_multiHighlightColor = QColor(QRgb(0x442f20));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -146,9 +141,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0x000000));
m_textBackgroundColor = QColor(0xd5, 0xd6, 0xd7, 0xcd);
m_gridLine = QColor(QRgb(0xaeadac));
- m_highlightBarColor = QColor(QRgb(0x2aa2f9));
- m_highlightRowColor = QColor(QRgb(0x103753));
- m_highlightColumnColor = QColor(QRgb(0x103753));
+ m_singleHighlightColor = QColor(QRgb(0x2aa2f9));
+ m_multiHighlightColor = QColor(QRgb(0x103753));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -165,9 +159,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0x000000));
m_textBackgroundColor = QColor(0xe9, 0xe2, 0xce, 0xc0);
m_gridLine = QColor(QRgb(0xd0c0b0));
- m_highlightBarColor = QColor(QRgb(0x8ea317));
- m_highlightRowColor = QColor(QRgb(0xc25708));
- m_highlightColumnColor = QColor(QRgb(0xc25708));
+ m_singleHighlightColor = QColor(QRgb(0x8ea317));
+ m_multiHighlightColor = QColor(QRgb(0xc25708));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -184,9 +177,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0xaeadac));
m_textBackgroundColor = QColor(0x00, 0x00, 0x00, 0xcd);
m_gridLine = QColor(QRgb(0x35322f));
- m_highlightBarColor = QColor(QRgb(0xf5dc0d));
- m_highlightRowColor = QColor(QRgb(0xd72222));
- m_highlightColumnColor = QColor(QRgb(0xd72222));
+ m_singleHighlightColor = QColor(QRgb(0xf5dc0d));
+ m_multiHighlightColor = QColor(QRgb(0xd72222));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -203,9 +195,8 @@ void Theme::useTheme(QDataVis::Theme theme)
m_textColor = QColor(QRgb(0xaeadac));
m_textBackgroundColor = QColor(0x00, 0x00, 0x00, 0xc0);
m_gridLine = QColor(QRgb(0x35322f));
- m_highlightBarColor = QColor(QRgb(0xfff7cc));
- m_highlightRowColor = QColor(QRgb(0xde0a0a));
- m_highlightColumnColor = QColor(QRgb(0xde0a0a));
+ m_singleHighlightColor = QColor(QRgb(0xfff7cc));
+ m_multiHighlightColor = QColor(QRgb(0xde0a0a));
m_lightStrength = 5.0f;
m_ambientStrength = 0.5f;
m_highlightLightStrength = 5.0f;
@@ -237,9 +228,8 @@ void Theme::setFromTheme(Theme &theme)
m_textColor = theme.m_textColor;
m_textBackgroundColor = theme.m_textBackgroundColor;
m_gridLine = theme.m_gridLine;
- m_highlightBarColor = theme.m_highlightBarColor;
- m_highlightRowColor = theme.m_highlightRowColor;
- m_highlightColumnColor = theme.m_highlightColumnColor;
+ m_singleHighlightColor = theme.m_singleHighlightColor;
+ m_multiHighlightColor = theme.m_multiHighlightColor;
m_surfaceGradient = theme.m_surfaceGradient;
m_lightStrength = theme.m_lightStrength;
m_ambientStrength = theme.m_ambientStrength;
diff --git a/src/datavisualization/engine/theme_p.h b/src/datavisualization/engine/theme_p.h
index ec689f63..e0012f82 100644
--- a/src/datavisualization/engine/theme_p.h
+++ b/src/datavisualization/engine/theme_p.h
@@ -66,9 +66,8 @@ private:
QColor m_textColor;
QColor m_textBackgroundColor;
QColor m_gridLine;
- QColor m_highlightBarColor;
- QColor m_highlightRowColor;
- QColor m_highlightColumnColor;
+ QColor m_singleHighlightColor;
+ QColor m_multiHighlightColor;
QLinearGradient m_surfaceGradient;
float m_lightStrength;
float m_ambientStrength;
diff --git a/src/datavisualization/global/datavisualizationglobal_p.h b/src/datavisualization/global/datavisualizationglobal_p.h
index cd1450f4..86b454c9 100644
--- a/src/datavisualization/global/datavisualizationglobal_p.h
+++ b/src/datavisualization/global/datavisualizationglobal_p.h
@@ -56,8 +56,6 @@ static const QVector3D selectionSkipColor = QVector3D(255.0f, 255.0f, 255.0f);
static const QVector3D invalidColorVector = QVector3D(-1.0f, -1.0f, -1.0f);
static const GLfloat gradientTextureHeight = 1024.0f;
static const GLfloat gradientTextureWidth = 2.0f;
-// Relative margin for avoiding gradient overflow
-static const GLfloat gradientMargin = 1.0f / gradientTextureHeight;
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/global/qtdatavisualizationenums.qdoc b/src/datavisualization/global/qtdatavisualizationenums.qdoc
index 94db4835..22645767 100644
--- a/src/datavisualization/global/qtdatavisualizationenums.qdoc
+++ b/src/datavisualization/global/qtdatavisualizationenums.qdoc
@@ -75,7 +75,8 @@
\value MeshStyleDots
Triangular pyramid. Usable only with Q3DScatter.
\value MeshStylePoints
- 2D spots. Usable only with Q3DScatter. \b Note: Shadows do not affect this style.
+ 2D spots. Usable only with Q3DScatter.
+ \b Note: Shadows and color gradients do not affect this style.
*/
/*!
diff --git a/src/datavisualization/utils/texturehelper.cpp b/src/datavisualization/utils/texturehelper.cpp
index 8e556b44..fd5061f2 100644
--- a/src/datavisualization/utils/texturehelper.cpp
+++ b/src/datavisualization/utils/texturehelper.cpp
@@ -36,7 +36,7 @@ TextureHelper::~TextureHelper()
}
GLuint TextureHelper::create2DTexture(const QImage &image, bool useTrilinearFiltering,
- bool convert, bool smoothScale)
+ bool convert, bool smoothScale, bool clampY)
{
if (image.isNull())
return 0;
@@ -74,6 +74,8 @@ GLuint TextureHelper::create2DTexture(const QImage &image, bool useTrilinearFilt
} else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
+ if (clampY)
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
return textureId;
}
@@ -162,7 +164,7 @@ GLuint TextureHelper::createGradientTexture(const QLinearGradient &gradient)
pmp.setPen(Qt::NoPen);
pmp.drawRect(0, 0, int(gradientTextureWidth), int(gradientTextureHeight));
- return create2DTexture(image, false, true);
+ return create2DTexture(image, false, true, false, true);
}
#if !defined(QT_OPENGL_ES_2)
diff --git a/src/datavisualization/utils/texturehelper_p.h b/src/datavisualization/utils/texturehelper_p.h
index b2657083..97bd9e3d 100644
--- a/src/datavisualization/utils/texturehelper_p.h
+++ b/src/datavisualization/utils/texturehelper_p.h
@@ -44,7 +44,7 @@ class TextureHelper : protected QOpenGLFunctions
// Ownership of created texture is transferred to caller
GLuint create2DTexture(const QImage &image, bool useTrilinearFiltering = false,
- bool convert = true, bool smoothScale = true);
+ bool convert = true, bool smoothScale = true, bool clampY = false);
GLuint createCubeMapTexture(const QImage &image, bool useTrilinearFiltering = false);
// Returns selection texture and inserts generated framebuffers to framebuffer parameters
GLuint createSelectionTexture(const QSize &size, GLuint &frameBuffer, GLuint &depthBuffer);
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp
index 2fecf5d1..9f2af06b 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml2/declarativebars.cpp
@@ -78,9 +78,9 @@ QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
return node;
}
-void DeclarativeBars::setBarColor(const QColor &baseColor, bool uniform)
+void DeclarativeBars::setBarColor(const QColor &baseColor)
{
- m_shared->setObjectColor(baseColor); // TODO
+ m_shared->setObjectColor(baseColor);
}
void DeclarativeBars::setDataProxy(QBarDataProxy *dataProxy)
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h
index acc5f2f1..f6d36632 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml2/declarativebars_p.h
@@ -63,7 +63,7 @@ public:
explicit DeclarativeBars(QQuickItem *parent = 0);
~DeclarativeBars();
- Q_INVOKABLE void setBarColor(const QColor &baseColor, bool uniform = true);
+ Q_INVOKABLE void setBarColor(const QColor &baseColor); // TODO property (or more likely as part of data set)
QBarDataProxy *dataProxy() const;
void setDataProxy(QBarDataProxy *dataProxy);
diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp
index f1de9a16..7c201301 100644
--- a/src/datavisualizationqml2/declarativescatter.cpp
+++ b/src/datavisualizationqml2/declarativescatter.cpp
@@ -76,9 +76,9 @@ QSGNode *DeclarativeScatter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
return node;
}
-void DeclarativeScatter::setObjectColor(const QColor &baseColor, bool uniform)
+void DeclarativeScatter::setObjectColor(const QColor &baseColor)
{
- m_shared->setObjectColor(baseColor); //TODO
+ m_shared->setObjectColor(baseColor);
}
QScatterDataProxy *DeclarativeScatter::dataProxy() const
diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h
index 3532f8d6..c066f42c 100644
--- a/src/datavisualizationqml2/declarativescatter_p.h
+++ b/src/datavisualizationqml2/declarativescatter_p.h
@@ -58,7 +58,7 @@ public:
explicit DeclarativeScatter(QQuickItem *parent = 0);
~DeclarativeScatter();
- Q_INVOKABLE void setObjectColor(const QColor &baseColor, bool uniform = true);
+ Q_INVOKABLE void setObjectColor(const QColor &baseColor); // TODO property (or more likely as part of data set)
QScatterDataProxy *dataProxy() const;
void setDataProxy(QScatterDataProxy *dataProxy);
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index 3c82e400..21aeb269 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -627,23 +627,17 @@ void GraphModifier::setGradient()
QLinearGradient singleHighlightGradient(0, 0, 1, 100);
singleHighlightGradient.setColorAt(1.0, Qt::white);
- singleHighlightGradient.setColorAt(0.75001, Qt::white);
singleHighlightGradient.setColorAt(0.75, Qt::lightGray);
- singleHighlightGradient.setColorAt(0.50001, Qt::lightGray);
singleHighlightGradient.setColorAt(0.50, Qt::gray);
- singleHighlightGradient.setColorAt(0.25001, Qt::gray);
singleHighlightGradient.setColorAt(0.25, Qt::darkGray);
- singleHighlightGradient.setColorAt(0.0, Qt::darkGray);
+ singleHighlightGradient.setColorAt(0.0, Qt::black);
QLinearGradient multiHighlightGradient(0, 0, 1, 100);
multiHighlightGradient.setColorAt(1.0, Qt::black);
- multiHighlightGradient.setColorAt(0.75001, Qt::black);
multiHighlightGradient.setColorAt(0.75, Qt::darkBlue);
- multiHighlightGradient.setColorAt(0.50001, Qt::darkBlue);
multiHighlightGradient.setColorAt(0.50, Qt::darkRed);
- multiHighlightGradient.setColorAt(0.25001, Qt::darkRed);
multiHighlightGradient.setColorAt(0.25, Qt::darkYellow);
- multiHighlightGradient.setColorAt(0.0, Qt::darkYellow);
+ multiHighlightGradient.setColorAt(0.0, Qt::darkGray);
m_chart->setBarColor(Qt::green);
m_chart->setSingleHighlightColor(Qt::white);
diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp
index 1ac661df..8da3898c 100644
--- a/tests/scattertest/main.cpp
+++ b/tests/scattertest/main.cpp
@@ -30,6 +30,8 @@
#include <QLabel>
#include <QScreen>
#include <QFontDatabase>
+#include <QLinearGradient>
+#include <QPainter>
int main(int argc, char **argv)
{
@@ -101,6 +103,20 @@ int main(int argc, char **argv)
QPushButton *startTimerButton = new QPushButton(widget);
startTimerButton->setText(QStringLiteral("Start/stop timer"));
+ QLinearGradient grBtoY(0, 0, 100, 0);
+ grBtoY.setColorAt(1.0, Qt::black);
+ grBtoY.setColorAt(0.67, Qt::blue);
+ grBtoY.setColorAt(0.33, Qt::red);
+ grBtoY.setColorAt(0.0, Qt::yellow);
+ QPixmap pm(100, 24);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grBtoY));
+ pmp.setPen(Qt::NoPen);
+ pmp.drawRect(0, 0, 100, 24);
+ QPushButton *gradientBtoYPB = new QPushButton(widget);
+ gradientBtoYPB->setIcon(QIcon(pm));
+ gradientBtoYPB->setIconSize(QSize(100, 24));
+
QCheckBox *backgroundCheckBox = new QCheckBox(widget);
backgroundCheckBox->setText(QStringLiteral("Show background"));
backgroundCheckBox->setChecked(true);
@@ -143,6 +159,7 @@ int main(int argc, char **argv)
vLayout->addWidget(removeBunchButton, 0, Qt::AlignTop);
vLayout->addWidget(setSelectedItemButton, 0, Qt::AlignTop);
vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
+ vLayout->addWidget(gradientBtoYPB, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
vLayout->addWidget(gridCheckBox);
vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
@@ -187,6 +204,8 @@ int main(int argc, char **argv)
&ScatterDataModifier::selectItem);
QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::startStopTimer);
+ QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::setGradient);
QObject::connect(themeButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::changeTheme);
QObject::connect(labelButton, &QPushButton::clicked, modifier,
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index f276c5a8..ed188e68 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -328,6 +328,40 @@ void ScatterDataModifier::handleSelectionChange(int index)
qDebug() << "Selected item index:" << index;
}
+void ScatterDataModifier::setGradient()
+{
+ QLinearGradient barGradient(0, 0, 1, 100);
+ barGradient.setColorAt(1.0, Qt::lightGray);
+ barGradient.setColorAt(0.75001, Qt::lightGray);
+ barGradient.setColorAt(0.75, Qt::blue);
+ barGradient.setColorAt(0.50001, Qt::blue);
+ barGradient.setColorAt(0.50, Qt::red);
+ barGradient.setColorAt(0.25001, Qt::red);
+ barGradient.setColorAt(0.25, Qt::yellow);
+ barGradient.setColorAt(0.0, Qt::yellow);
+
+ QLinearGradient singleHighlightGradient(0, 0, 1, 100);
+ singleHighlightGradient.setColorAt(1.0, Qt::lightGray);
+ singleHighlightGradient.setColorAt(0.75, Qt::blue);
+ singleHighlightGradient.setColorAt(0.50, Qt::red);
+ singleHighlightGradient.setColorAt(0.25, Qt::yellow);
+ singleHighlightGradient.setColorAt(0.0, Qt::white);
+
+ m_chart->setItemColor(Qt::green);
+ m_chart->setSingleHighlightColor(Qt::white);
+
+ m_chart->setItemGradient(barGradient);
+ m_chart->setSingleHighlightGradient(singleHighlightGradient);
+
+ QDataVis::ColorStyle oldStyle = m_chart->colorStyle();
+ if (oldStyle == QDataVis::ColorStyleUniform)
+ m_chart->setColorStyle(QDataVis::ColorStyleObjectGradient);
+ else if (oldStyle == QDataVis::ColorStyleObjectGradient)
+ m_chart->setColorStyle(QDataVis::ColorStyleRangeGradient);
+ if (oldStyle == QDataVis::ColorStyleRangeGradient)
+ m_chart->setColorStyle(QDataVis::ColorStyleUniform);
+}
+
void ScatterDataModifier::changeShadowQuality(int quality)
{
QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality);
diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h
index 2d97c236..db7f3ac0 100644
--- a/tests/scattertest/scatterchart.h
+++ b/tests/scattertest/scatterchart.h
@@ -62,6 +62,7 @@ public slots:
void startStopTimer();
void selectItem();
void handleSelectionChange(int index);
+ void setGradient();
signals:
void shadowQualityChanged(int quality);