diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-05-27 14:25:29 +0300 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-05-27 14:46:42 +0300 |
commit | 1be87eb49f3ad5bdf79b869cc659e20828ab5917 (patch) | |
tree | c7fd7f9b7cfd30200012973214adbb46ac632868 /src/datavis3d | |
parent | ec9db0da09fe5468b8029e2caa01800717cac24b (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.cpp | 37 |
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); |