diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-09-17 09:03:27 +0300 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-09-17 09:45:15 +0300 |
commit | dbc876fa0f9c5c87d0ee250efa4d7a211bde3ddf (patch) | |
tree | 699fba812f916081b1a6782ef495cca9def65156 /src/datavisualization/engine | |
parent | 15006b2c224f6c7a5cd57d0c7365a1352f488479 (diff) |
Rotated value labels 90 degrees
Task-number: QTRD-2263
- no rotation if we have negatives, it looked odd
Change-Id: I5f4b0958fd3410e64348e99e76ab747ad65d7ee2
Change-Id: I5f4b0958fd3410e64348e99e76ab747ad65d7ee2
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 39 | ||||
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 19 |
2 files changed, 44 insertions, 14 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index 673f2045..5d7abb16 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -343,50 +343,65 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel, QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, 0.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera(), false, false, Drawer::LabelTop); + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelTop); } m_drawer->drawLabel(*dummyItem, zLabel, viewMatrix, projectionMatrix, QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, 0.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera(), false, false, Drawer::LabelBottom); + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelBottom); } else { m_drawer->drawLabel(*dummyItem, xLabel, viewMatrix, projectionMatrix, QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, 0.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera(), false, false, Drawer::LabelBottom); + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelBottom); if (m_sliceTitleItem) { m_drawer->drawLabel(*dummyItem, sliceSelectionLabel, viewMatrix, projectionMatrix, QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, 0.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera(), false, false, Drawer::LabelTop); + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelTop); } } m_drawer->drawLabel(*dummyItem, yLabel, viewMatrix, projectionMatrix, QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, 90.0f), 0, m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera(), false, false, Drawer::LabelLeft); + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelLeft); // Draw labels for bars for (int col = 0; col < m_sliceSelection->size(); col++) { BarRenderItem *item = m_sliceSelection->at(col); // Draw values - m_drawer->drawLabel(*item, item->sliceLabelItem(), viewMatrix, projectionMatrix, - QVector3D(0.0f, m_yAdjustment, zComp), - QVector3D(0.0f, 0.0f, 0.0f), - negativesComp * negativesComp * item->height(), - m_cachedSelectionMode, m_labelShader, - m_labelObj, m_cachedScene->camera()); + if (negativesComp == 1.0f) { + m_drawer->drawLabel(*item, item->sliceLabelItem(), viewMatrix, projectionMatrix, + QVector3D(0.0f, m_yAdjustment, zComp), + QVector3D(0.0f, 0.0f, 90.0f), + item->height(), + m_cachedSelectionMode, m_labelShader, + m_labelObj, m_cachedScene->camera(), false, false, + Drawer::LabelOver, Qt::AlignTop); + } else { + m_drawer->drawLabel(*item, item->sliceLabelItem(), viewMatrix, projectionMatrix, + QVector3D(0.0f, m_yAdjustment, zComp), + QVector3D(0.0f, 0.0f, 0.0f), + negativesComp * negativesComp * item->height(), + m_cachedSelectionMode, m_labelShader, + m_labelObj, m_cachedScene->camera()); + } // Draw labels if (m_sliceCache->labelItems().size() > col) { const LabelItem *labelItem(0); labelItem = m_sliceCache->labelItems().at(col); m_drawer->drawLabel(*item, *labelItem, viewMatrix, projectionMatrix, - QVector3D(0.0f, m_yAdjustment, zComp), + QVector3D(0.0f, m_autoScaleAdjustment, zComp), QVector3D(0.0f, 0.0f, -45.0f), item->height(), m_cachedSelectionMode, m_labelShader, m_labelObj, m_cachedScene->camera(), false, false, diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 75c434cb..c4cff622 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -198,7 +198,7 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte switch (position) { case LabelBelow: { - yPosition = -1.6f; // minus maximum negative height (+ some extra for label) + yPosition = -2.6f + positionComp.y(); // minus maximum negative height (+ some extra for axis title label) break; } case LabelLow: { @@ -250,6 +250,7 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte // Apply alignment GLfloat xAlignment = 0.0f; + GLfloat yAlignment = 0.0f; GLfloat zAlignment = 0.0f; switch (alignment) { case Qt::AlignLeft: { @@ -266,6 +267,20 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte * qFabs(qSin(qDegreesToRadians(rotation.y()))); break; } + case Qt::AlignTop: { + yAlignment = ((GLfloat)textureSize.width() * scaleFactor) + * qFabs(qCos(qDegreesToRadians(rotation.y()))); + if (itemHeight < 0) + yAlignment = -yAlignment; + break; + } + case Qt::AlignBottom: { + yAlignment = (-(GLfloat)textureSize.width() * scaleFactor) + * qFabs(qCos(qDegreesToRadians(rotation.y()))); + if (itemHeight < 0) + yAlignment = -yAlignment; + break; + } default: { break; } @@ -280,7 +295,7 @@ void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelIte } // Position label - modelMatrix.translate(xPosition + xAlignment, yPosition, zPosition + zAlignment); + modelMatrix.translate(xPosition + xAlignment, yPosition + yAlignment, zPosition + zAlignment); // Rotate // TODO: We should convert rotations to use quaternions to avoid rotation order problems |