From e8aaaaf3b9e4cf0fdf46ba1bce589d00259e0bad Mon Sep 17 00:00:00 2001 From: J-P Nurmi <jpnurmi@digia.com> Date: Tue, 21 Jan 2014 14:22:10 +0200 Subject: [PATCH] QQuickText: fix layout mirroring Task-number: QTBUG-35095 Change-Id: I8550821e01ecc931788c1ed73366ba1ceed7a817 Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au> --- src/quick/items/qquicktext.cpp | 8 ++++---- tests/auto/quick/qquicktext/tst_qquicktext.cpp | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index ad904a2579..038025856c 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -2070,7 +2070,7 @@ QRectF QQuickText::boundingRect() const Q_D(const QQuickText); QRectF rect = d->layedOutTextRect; - rect.moveLeft(QQuickTextUtil::alignedX(rect.width(), width(), d->hAlign)); + rect.moveLeft(QQuickTextUtil::alignedX(rect.width(), width(), effectiveHAlign())); rect.moveTop(QQuickTextUtil::alignedY(rect.height(), height(), d->vAlign)); if (d->style != Normal) @@ -2207,11 +2207,11 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data const QColor linkColor = QColor::fromRgba(d->linkColor); if (d->richText) { - const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), width(), d->hAlign); + const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), width(), effectiveHAlign()); d->ensureDoc(); node->addTextDocument(QPointF(dx, dy), d->extra->doc, color, d->style, styleColor, linkColor); } else if (d->layedOutTextRect.width() > 0) { - const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, width(), d->hAlign); + const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, width(), effectiveHAlign()); int unelidedLineCount = d->lineCount; if (d->elideLayout) unelidedLineCount -= 1; @@ -2483,7 +2483,7 @@ QString QQuickTextPrivate::anchorAt(const QPointF &mousePos) const link = anchorAt(elideLayout, translatedMousePos); return link; } else if (richText && extra.isAllocated() && extra->doc) { - translatedMousePos.rx() -= QQuickTextUtil::alignedX(layedOutTextRect.width(), q->width(), hAlign); + translatedMousePos.rx() -= QQuickTextUtil::alignedX(layedOutTextRect.width(), q->width(), q->effectiveHAlign()); return extra->doc->documentLayout()->anchorAt(translatedMousePos); } return QString(); diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index 78e03be9c2..6a18323190 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -1694,6 +1694,12 @@ void tst_qquicktext::linkInteraction_data() << (PointVector() << metrics.characterRectangle(18, Qt::AlignRight, Qt::AlignBottom).center()) << singleLineLink << singleLineLink << singleLineLink; + QTest::newRow("click on mirrored link") + << singleLineText << 240. + << "horizontalAlignment: Text.AlignLeft; LayoutMirroring.enabled: true" + << (PointVector() << metrics.characterRectangle(18, Qt::AlignRight, Qt::AlignTop).center()) + << singleLineLink + << singleLineLink << singleLineLink; QTest::newRow("click on center aligned link") << singleLineText << 240. << "horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter" @@ -2515,6 +2521,18 @@ void tst_qquicktext::boundingRect() QCOMPARE(text->boundingRect().width(), line.naturalTextWidth()); QCOMPARE(text->boundingRect().height(), line.height()); + QQuickItemPrivate::get(text)->setLayoutMirror(true); + QCOMPARE(text->boundingRect().x(), qreal(0)); + QCOMPARE(text->boundingRect().y(), qreal(0)); + QCOMPARE(text->boundingRect().width(), line.naturalTextWidth()); + QCOMPARE(text->boundingRect().height(), line.height()); + + text->setHAlign(QQuickText::AlignLeft); + QCOMPARE(text->boundingRect().x(), text->width() - line.naturalTextWidth()); + QCOMPARE(text->boundingRect().y(), qreal(0)); + QCOMPARE(text->boundingRect().width(), line.naturalTextWidth()); + QCOMPARE(text->boundingRect().height(), line.height()); + text->setWrapMode(QQuickText::Wrap); QCOMPARE(text->boundingRect().right(), text->width()); QCOMPARE(text->boundingRect().y(), qreal(0)); -- GitLab