From cd1a66a8fcdcc6870656a924bf55ffbcd6ea1162 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Fri, 29 Aug 2014 10:15:18 +0300 Subject: Unified gradient for points MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made gradient image same size as the texture and similar calculation for the pixel. Result should be more coherent for all. Task-number: QTRD-3295 Change-Id: I666dacc6f525258ccefda288e26cac480cb385cb Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää --- src/datavisualization/engine/scatter3drenderer.cpp | 7 ++++--- src/datavisualization/utils/utils.cpp | 9 ++++++--- src/datavisualization/utils/utils_p.h | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/datavisualization') diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 0a670fe8..ca983dac 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -745,7 +745,6 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) } float rangeGradientYScaler = 0.5f / m_scaleY; - float rangeGradientYScalerForPoints = rangeGradientYScaler * 100.0f; foreach (SeriesRenderCache *baseCache, m_renderCacheList) { if (baseCache->isVisible()) { @@ -771,6 +770,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) glPointSize(itemSize * activeCamera->zoomLevel()); // Scale points based on zoom #endif QVector3D modelScaler(itemSize, itemSize, itemSize); + int gradientImageHeight = cache->gradientImage().height(); + int maxGradientPositition = gradientImageHeight - 1; if (!optimizationDefault && ((drawingPoints && cache->bufferPoints()->indexCount() == 0) @@ -848,8 +849,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) if (rangeGradientPoints) { // Drawing points with range gradient // Get color from gradient based on items y position converted to percent - int position = int(item.translation().y() * rangeGradientYScalerForPoints) - + 50; + int position = ((item.translation().y() + m_scaleY) * rangeGradientYScaler) * gradientImageHeight; + position = qMin(maxGradientPositition, position); // clamp to edge dotColor = Utils::vectorFromColor( cache->gradientImage().pixel(0, position)); } else { diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp index 2368d86a..d7b8dae8 100644 --- a/src/datavisualization/utils/utils.cpp +++ b/src/datavisualization/utils/utils.cpp @@ -139,13 +139,16 @@ QVector4D Utils::getSelection(QPoint mousepos, int height) return selectedColor; } -QImage Utils::getGradientImage(const QLinearGradient &gradient) +QImage Utils::getGradientImage(QLinearGradient &gradient) { - QImage image(QSize(1, 101), QImage::Format_RGB32); + QImage image(QSize(gradientTextureWidth, gradientTextureHeight), QImage::Format_RGB32); + gradient.setFinalStop(qreal(gradientTextureWidth), qreal(gradientTextureHeight)); + gradient.setStart(0.0, 0.0); + QPainter pmp(&image); pmp.setBrush(QBrush(gradient)); pmp.setPen(Qt::NoPen); - pmp.drawRect(0, 0, 1, 101); + pmp.drawRect(0, 0, int(gradientTextureWidth), int(gradientTextureHeight)); return image; } diff --git a/src/datavisualization/utils/utils_p.h b/src/datavisualization/utils/utils_p.h index d7187c16..55707fdb 100644 --- a/src/datavisualization/utils/utils_p.h +++ b/src/datavisualization/utils/utils_p.h @@ -57,7 +57,7 @@ public: bool borders = false, int maxLabelWidth = 0); static QVector4D getSelection(QPoint mousepos, int height); - static QImage getGradientImage(const QLinearGradient &gradient); + static QImage getGradientImage(QLinearGradient &gradient); static ParamType findFormatParamType(const QString &format); static QString formatLabel(const QByteArray &format, ParamType paramType, qreal value); -- cgit v1.2.3