Make text align in the same baseline
authorJiang Jiang <jiang.jiang@nokia.com>
Thu, 28 Apr 2011 15:02:53 +0000 (17:02 +0200)
committerJiang Jiang <jiang.jiang@nokia.com>
Fri, 29 Apr 2011 08:29:28 +0000 (10:29 +0200)
(cherry picked from commit 3f0e1ac647cc8ab700b85772264bc2a95e5301fa)

src/declarative/items/qsgtext.cpp
src/declarative/items/qsgtextnode.cpp

index ab4669e..f796006 100644 (file)
@@ -1116,9 +1116,6 @@ QSGNode *QSGText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
 
         } else {
             node->addTextLayout(QPoint(0, bounds.y()), &d->layout, d->color, d->style, d->styleColor);
-            QMatrix4x4 m;
-            m.translate(0, QFontMetricsF(d->font).ascent());
-            node->setMatrix(m);
         }
 
         return node;
index 3bbe0d2..a887c23 100644 (file)
@@ -188,8 +188,11 @@ void QSGTextNode::addTextLayout(const QPointF &position, QTextLayout *textLayout
                                 QSGText::TextStyle style, const QColor &styleColor)
 {
     QList<QGlyphs> glyphsList(textLayout->glyphs());
-    for (int i=0; i<glyphsList.size(); ++i)
-        addGlyphs(position, glyphsList.at(i), color, style, styleColor);
+    for (int i=0; i<glyphsList.size(); ++i) {
+        QGlyphs glyphs = glyphsList.at(i);
+        QRawFont font = glyphs.font();
+        addGlyphs(position + QPointF(0, font.ascent()), glyphs, color, style, styleColor);
+    }
 
     QFont font = textLayout->font();
     QRawFont rawFont = QRawFont::fromFont(font);
@@ -353,16 +356,13 @@ void QSGTextNode::addTextBlock(const QPointF &position, QTextDocument *textDocum
                     ? overrideColor
                     : charFormat.foreground().color();
 
-            QFontMetricsF fm(fragment.charFormat().font());
-            QPointF ascent(0, fm.ascent());
-
             QList<QGlyphs> glyphsList = fragment.glyphs();
             for (int i=0; i<glyphsList.size(); ++i) {
                 QGlyphs glyphs = glyphsList.at(i);
-                QSGGlyphNode *glyphNode = addGlyphs(position + blockPosition + ascent, glyphs,
-                                                          color, style, styleColor);
-
                 QRawFont font = glyphs.font();
+                QSGGlyphNode *glyphNode = addGlyphs(position + blockPosition + QPointF(0, font.ascent()),
+                                                    glyphs, color, style, styleColor);
+
                 QPointF baseLine = glyphNode->baseLine();
                 qreal width = glyphNode->boundingRect().width();
                 addTextDecorations(baseLine, font, color, width,