summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-09-17 09:03:27 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-09-17 09:45:15 +0300
commitdbc876fa0f9c5c87d0ee250efa4d7a211bde3ddf (patch)
tree699fba812f916081b1a6782ef495cca9def65156 /src/datavisualization/engine
parent15006b2c224f6c7a5cd57d0c7365a1352f488479 (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.cpp39
-rw-r--r--src/datavisualization/engine/drawer.cpp19
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