diff options
-rw-r--r-- | src/datavisualization/engine/axisrendercache.cpp | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 20 | ||||
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 14 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 11 | ||||
-rw-r--r-- | src/datavisualization/global/datavisualizationglobal_p.h | 4 | ||||
-rw-r--r-- | src/datavisualization/utils/utils.cpp | 31 | ||||
-rw-r--r-- | tests/barstest/chart.cpp | 2 |
8 files changed, 43 insertions, 44 deletions
diff --git a/src/datavisualization/engine/axisrendercache.cpp b/src/datavisualization/engine/axisrendercache.cpp index c525c777..55ac0765 100644 --- a/src/datavisualization/engine/axisrendercache.cpp +++ b/src/datavisualization/engine/axisrendercache.cpp @@ -173,7 +173,7 @@ int AxisRenderCache::maxLabelWidth(const QStringList &labels) const { int labelWidth = 0; QFont labelFont = m_font; - labelFont.setPointSize(50); + labelFont.setPointSize(textureFontSize); QFontMetrics labelFM(labelFont); for (int i = 0; i < labels.size(); i++) { int newWidth = labelFM.width(labels.at(i)); diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index bf57f21f..b2f3bd41 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -216,7 +216,7 @@ void Bars3DRenderer::updateScene(Q3DScene *scene) scene->setUnderSideCameraEnabled(m_hasNegativeValues); if (m_hasHeightAdjustmentChanged) { // Set initial camera position. Also update if height adjustment has changed. - scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp), + scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, cameraDistance + zComp), QVector3D(0.0f, -m_yAdjustment, zComp), QVector3D(0.0f, 1.0f, 0.0f)); m_hasHeightAdjustmentChanged = false; @@ -363,10 +363,8 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel, glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glCullFace(GL_BACK); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Draw labels for axes BarRenderItem *dummyItem(0); @@ -439,8 +437,7 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel, } glDisable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) - glDisable(GL_BLEND); + glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); // Release label shader @@ -1233,10 +1230,8 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) m_labelShader->bind(); glEnable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Calculate the positions for row and column labels and store them for (int row = 0; row != m_cachedRowCount; row++) { @@ -1472,8 +1467,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle) } glDisable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) - glDisable(GL_BLEND); + glDisable(GL_BLEND); // Release label shader m_labelShader->release(); diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 7fcf581f..307dd63e 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -309,10 +309,11 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte modelMatrix.rotate(rotation.x(), 1.0f, 0.0f, 0.0f); if (useDepth && !rotateAlong) { + qreal yComp = qreal(qRadiansToDegrees(qTan(positionComp.y() / cameraDistance))); // Apply negative camera rotations to keep labels facing camera QPointF camRotations = camera->rotations(); modelMatrix.rotate(-camRotations.x(), 0.0f, 1.0f, 0.0f); - modelMatrix.rotate(-camRotations.y(), 1.0f, 0.0f, 0.0f); + modelMatrix.rotate(-camRotations.y() - yComp, 1.0f, 0.0f, 0.0f); } // Scale label based on text size diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 38044bbe..5c643bb2 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -170,7 +170,7 @@ void Scatter3DRenderer::updateScene(Q3DScene *scene) if (m_hasHeightAdjustmentChanged) { // Set initial m_cachedScene->activeCamera() position. Also update if height adjustment has changed. - scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp), + scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, cameraDistance + zComp), QVector3D(0.0f, 0.0f, zComp), QVector3D(0.0f, 1.0f, 0.0f)); m_hasHeightAdjustmentChanged = false; @@ -1071,10 +1071,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) m_labelShader->bind(); glEnable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Z Labels if (m_axisCacheZ.segmentCount() > 0) { @@ -1333,7 +1331,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) QVector3D(0.0f, 0.0f, zComp), QVector3D(0.0f, 0.0f, 0.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->activeCamera(), true, false, Drawer::LabelMid); + m_labelObj, m_cachedScene->activeCamera(), true, false, + Drawer::LabelMid); // Reset label update flag; they should have been updated when we get here m_updateLabels = false; @@ -1341,8 +1340,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) } glDisable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) - glDisable(GL_BLEND); + glDisable(GL_BLEND); // Release label shader m_labelShader->release(); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 656d469a..9fea6ddb 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -281,7 +281,7 @@ void Surface3DRenderer::updateScene(Q3DScene *scene) // Set initial camera position // X must be 0 for rotation to work - we can use "setCameraRotation" for setting it later if (m_hasHeightAdjustmentChanged) { - scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, 6.0f + zComp), + scene->activeCamera()->setBaseOrientation(QVector3D(0.0f, 0.0f, cameraDistance + zComp), QVector3D(0.0f, 0.0f, zComp), QVector3D(0.0f, 1.0f, 0.0f)); // For now this is used just to make things once. Proper use will come @@ -1006,10 +1006,8 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) // Draw axis labels m_labelShader->bind(); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Z Labels QVector3D positionZComp(0.0f, 0.0f, zComp); @@ -1179,8 +1177,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) glDisable(GL_TEXTURE_2D); - if (m_cachedLabelTransparency > QDataVis::TransparencyNone) - glDisable(GL_BLEND); + glDisable(GL_BLEND); // Release label shader m_labelShader->release(); diff --git a/src/datavisualization/global/datavisualizationglobal_p.h b/src/datavisualization/global/datavisualizationglobal_p.h index 29fcc532..4da1023c 100644 --- a/src/datavisualization/global/datavisualizationglobal_p.h +++ b/src/datavisualization/global/datavisualizationglobal_p.h @@ -40,6 +40,10 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE // Constants used in several files // Compensation for z position; move all objects to positive z, as shader can't handle negative values correctly const GLfloat zComp = 10.0f; +// Distance from camera to origin +const GLfloat cameraDistance = 6.0f; +// Size of font to be used in label texture rendering. Doesn't affect the actual font size. +const int textureFontSize = 50; // Default light position. To have shadows working correctly, light should be as far as camera, or a bit further // y position is added to the minimum height (or can be thought to be that much above or below the camera) const QVector3D defaultLightPos = QVector3D(0.0f, 0.5f, zComp); diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp index eaefad97..4cda5fad 100644 --- a/src/datavisualization/utils/utils.cpp +++ b/src/datavisualization/utils/utils.cpp @@ -52,7 +52,7 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo GLuint paddingHeight = 15; // Calculate text dimensions QFont valueFont = font; - valueFont.setPointSize(50); + valueFont.setPointSize(textureFontSize); QFontMetrics valueFM(valueFont); int valueStrWidth = valueFM.width(text); if (maxLabelWidth && QDataVis::TransparencyNoBackground != transparency) @@ -88,9 +88,9 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo // Paint text painter.setRenderHint(QPainter::Antialiasing, true); painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.setFont(valueFont); switch (transparency) { case QDataVis::TransparencyNoBackground: { - painter.setFont(valueFont); painter.setPen(txtColor); #if defined(Q_OS_ANDROID) painter.drawText((labelSize.width() - valueStrWidth) / 2.0f, @@ -108,12 +108,14 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo } case QDataVis::TransparencyFromTheme: { painter.setBrush(QBrush(bgrColor)); - if (borders) + if (borders) { painter.setPen(QPen(QBrush(txtColor), 5, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin)); - else + painter.drawRoundedRect(5, 5, labelSize.width() - 10, labelSize.height() - 10, + 10.0, 10.0); + } else { painter.setPen(bgrColor); - painter.drawRoundedRect(0, 0, labelSize.width(), labelSize.height(), 10.0, 10.0f); - painter.setFont(valueFont); + painter.drawRoundedRect(0, 0, labelSize.width(), labelSize.height(), 10.0, 10.0); + } painter.setPen(txtColor); painter.drawText((labelSize.width() - valueStrWidth) / 2.0f, (labelSize.height() - valueStrHeight) / 2.0f, @@ -123,13 +125,16 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo break; } case QDataVis::TransparencyNone: { - painter.setBrush(QBrush(bgrColor)); - if (borders) - painter.setPen(QPen(QBrush(txtColor), 7.5)); - else - painter.setPen(bgrColor); - painter.drawRect(0, 0, labelSize.width(), labelSize.height()); - painter.setFont(valueFont); + QColor labelColor = QColor(bgrColor); + labelColor.setAlphaF(1.0); + painter.setBrush(QBrush(labelColor)); + if (borders) { + painter.setPen(QPen(QBrush(txtColor), 7.5, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); + painter.drawRect(7.5, 7.5, labelSize.width() - 15, labelSize.height() - 15); + } else { + painter.setPen(labelColor); + painter.drawRect(0, 0, labelSize.width(), labelSize.height()); + } painter.setPen(txtColor); painter.drawText((labelSize.width() - valueStrWidth) / 2.0f, (labelSize.height() - valueStrHeight) / 2.0f, diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index cfc072de..578ac258 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -468,7 +468,7 @@ void ChartModifier::changeTransparency() m_chart->setLabelTransparency((QDataVis::LabelTransparency)transparency); if (++transparency > QDataVis::TransparencyNoBackground) - transparency = QDataVis::TransparencyFromTheme; + transparency = QDataVis::TransparencyNone; } void ChartModifier::changeSelectionMode() |