diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-03-27 12:39:24 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-03-27 12:51:39 +0200 |
commit | cb98573fbe610af0b03d225d1992651160277bda (patch) | |
tree | bbf9624b2a71839dc9e0eee48d8d4e367911d03f /src | |
parent | d142d069eaf72e59fe6b65c99556d8a4aa0f2198 (diff) |
Background for selection value added
Change-Id: I3ba6034af323bd2d71d3ab91c97a8c1407f15775
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/datavis3d/engine/q3dbars.cpp | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp index 1676b441..22335761 100644 --- a/src/datavis3d/engine/q3dbars.cpp +++ b/src/datavis3d/engine/q3dbars.cpp @@ -148,28 +148,50 @@ void Q3DBars::render(QPainter *painter) painter->endNativePainting(); // If a bar is selected, display it's value + // TODO: Move text printing to a helper class, so that it can be used from other vis types? SampleData *data = d_ptr->m_selectedBar; if (data) { glDisable(GL_DEPTH_TEST); painter->save(); - painter->setCompositionMode(QPainter::CompositionMode_SourceOver);//CompositionMode_SourceOver); - painter->setPen(d_ptr->m_textColor); - painter->setFont(QFont(QStringLiteral("Arial"), 15)); + painter->setCompositionMode(QPainter::CompositionMode_Source); + // TODO: None of the commented-out stuff works.. //painter->setBackgroundMode(Qt::OpaqueMode); //painter->setBackground(QBrush(d_ptr->m_textBackgroundColor)); -// painter->setBrush(QBrush(d_ptr->m_textBackgroundColor)); -// painter->setBrush(QBrush(d_ptr->m_textColor)); -// painter->drawRoundedRect(data->position().x() - 50, data->position().y() - 30 -// , 100, 30, 10.0, 10.0); - painter->drawText(data->position().x() - 50, data->position().y() - 30, 100, 30 + //painter->setBrush(QBrush(d_ptr->m_textBackgroundColor)); + //painter->setPen(d_ptr->m_textBackgroundColor); + painter->setPen(Qt::black); // TODO: Use black, as nothing works + QFont bgrFont = QFont(QStringLiteral("Arial"), 18); + QFont valueFont = QFont(QStringLiteral("Arial"), 12); + valueFont.setBold(true); + painter->setFont(bgrFont); + QFontMetrics valueFM(valueFont); + QFontMetrics bgrFM(bgrFont); + int valueStrLen = valueFM.width(data->valueStr()); + int bgrStrLen = 0; + int bgrHeight = valueFM.height() + 6; + QString bgrStr = QString(); + do { + bgrStr.append(QStringLiteral("X")); + bgrStrLen = bgrFM.width(bgrStr); + } while (bgrStrLen <= valueStrLen); + //int bgrLen = valueStrLen + 10; + //painter->drawRoundedRect(data->position().x() - (bgrLen / 2) + // , data->position().y() - 30 + // , bgrLen, 30, 10.0, 10.0); + // Hack solution, as drawRect doesn't work + painter->drawText(data->position().x() - (bgrStrLen / 2) + , data->position().y() - bgrHeight + , bgrStrLen, bgrHeight + , Qt::AlignCenter | Qt::AlignVCenter + , bgrStr); + //painter->setPen(d_ptr->m_textColor); + painter->setPen(Qt::lightGray); // TODO: Use lightGray, as nothing works + painter->setFont(valueFont); + painter->drawText(data->position().x() - (valueStrLen / 2) + , data->position().y() - bgrHeight + , valueStrLen, bgrHeight , Qt::AlignCenter | Qt::AlignVCenter - | Qt::TextExpandTabs | Qt::TextDontClip , data->valueStr()); -// painter->fillRect(/*d_ptr->m_mousePos.x() - 50*/0, /*d_ptr->m_mousePos.y() - 30*/0 -// , 500, 300, d_ptr->m_textBackgroundColor); -// painter->drawText(d_ptr->m_mousePos.x() - 50, d_ptr->m_mousePos.y() - 30, 100, 30 -// , Qt::AlignCenter | Qt::AlignVCenter | Qt::TextExpandTabs -// , QStringLiteral("kukkuu")); painter->restore(); } } @@ -1008,6 +1030,17 @@ void Q3DBars::setBarColor(QColor baseColor, QColor heightColor, QColor depthColo d_ptr->m_heightColor = heightColor; d_ptr->m_depthColor = depthColor; //qDebug() << "colors:" << d_ptr->m_baseColor << d_ptr->m_heightColor << d_ptr->m_depthColor; + if (d_ptr->m_uniformColor != uniform) { + // Re-initialize shaders + if (!d_ptr->m_uniformColor) { + d_ptr->initShaders(QStringLiteral(":/shaders/vertex") + , QStringLiteral(":/shaders/fragmentColorOnY")); + } + else { + d_ptr->initShaders(QStringLiteral(":/shaders/vertex") + , QStringLiteral(":/shaders/fragment")); + } + } d_ptr->m_uniformColor = uniform; } |