summaryrefslogtreecommitdiffstats
path: root/src/datavis3d
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-05-27 14:25:29 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-05-27 14:46:42 +0300
commit1be87eb49f3ad5bdf79b869cc659e20828ab5917 (patch)
treec7fd7f9b7cfd30200012973214adbb46ac632868 /src/datavis3d
parentec9db0da09fe5468b8029e2caa01800717cac24b (diff)
Android: Label texture size fix
Android requires texture dimensions to be in powers of two. Change-Id: Ia8e43752c4f0046db62c0aa457e7537dc36d2568 Change-Id: Ia8e43752c4f0046db62c0aa457e7537dc36d2568 Reviewed-by: Mika Salmela <mika.salmela@digia.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavis3d')
-rw-r--r--src/datavis3d/utils/utils.cpp37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/datavis3d/utils/utils.cpp b/src/datavis3d/utils/utils.cpp
index 5ef4f4d5..d4a4e089 100644
--- a/src/datavis3d/utils/utils.cpp
+++ b/src/datavis3d/utils/utils.cpp
@@ -135,6 +135,8 @@ void Utils::printText(QPainter *painter, const QString &text, const QSize &posit
QImage Utils::printTextToImage(const QFont &font, const QString &text, const QColor &bgrColor,
const QColor &txtColor, LabelTransparency transparency)
{
+ GLuint paddingWidth = 15;
+ GLuint paddingHeight = 15;
// Calculate text dimensions
QFont valueFont = font;
valueFont.setPointSize(30);
@@ -142,10 +144,38 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo
int valueStrWidth = valueFM.width(text);
int valueStrHeight = valueFM.height();
QSize labelSize;
+
+#if defined(Q_OS_ANDROID)
+ // Android can't handle textures with dimensions not in power of 2. Resize labels accordingly.
+ bool widthPadded = false;
+ bool heightPadded = false;
+
+ // TODO: Add some padding before power-of-2 -padding to power of 2 to avoid labels with no "breathing-room"?
+ labelSize = QSize(valueStrWidth, valueStrHeight);
+ //qDebug() << "label size before padding" << labelSize;
+
+ for (int i = 5;; i++) {
+ GLint newDimension = qPow(2, i);
+ if (!heightPadded && newDimension >= labelSize.height()) {
+ paddingHeight = (newDimension - labelSize.height()) / 2;
+ labelSize.setHeight(newDimension);
+ heightPadded = true;
+ }
+ if (!widthPadded && newDimension >= labelSize.width()) {
+ paddingWidth = (newDimension - labelSize.width()) / 2;
+ labelSize.setWidth(newDimension);
+ widthPadded = true;
+ }
+ if (widthPadded && heightPadded)
+ break;
+ }
+ //qDebug() << "label size after padding" << labelSize;
+#else
if (TransparencyNoBackground == transparency)
labelSize = QSize(valueStrWidth, valueStrHeight);
else
- labelSize = QSize(valueStrWidth + 30, valueStrHeight + 30);
+ labelSize = QSize(valueStrWidth + paddingWidth * 2, valueStrHeight + paddingHeight * 2);
+#endif
// Create image
QImage image = QImage(labelSize, QImage::Format_ARGB32);
@@ -157,6 +187,7 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setCompositionMode(QPainter::CompositionMode_Source);
switch (transparency) {
+ // TODO: Texture size padding fix for Android f**ks this up for axis labels. Fix or disable for android.
case TransparencyNoBackground: {
painter.setFont(valueFont);
painter.setPen(txtColor);
@@ -172,7 +203,7 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo
painter.drawRoundedRect(0, 0, labelSize.width(), labelSize.height(), 10.0, 10.0f);
painter.setFont(valueFont);
painter.setPen(txtColor);
- painter.drawText(15, 15,
+ painter.drawText(paddingWidth, paddingHeight,
valueStrWidth, valueStrHeight,
Qt::AlignCenter | Qt::AlignVCenter,
text);
@@ -184,7 +215,7 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo
painter.drawRect(0, 0, labelSize.width(), labelSize.height());
painter.setFont(valueFont);
painter.setPen(txtColor);
- painter.drawText(15, 15,
+ painter.drawText(paddingWidth, paddingHeight,
valueStrWidth, valueStrHeight,
Qt::AlignCenter | Qt::AlignVCenter,
text);