diff options
Diffstat (limited to 'tests/auto/qstatictext/tst_qstatictext.cpp')
-rw-r--r-- | tests/auto/qstatictext/tst_qstatictext.cpp | 869 |
1 files changed, 0 insertions, 869 deletions
diff --git a/tests/auto/qstatictext/tst_qstatictext.cpp b/tests/auto/qstatictext/tst_qstatictext.cpp deleted file mode 100644 index 5d5ed3c737..0000000000 --- a/tests/auto/qstatictext/tst_qstatictext.cpp +++ /dev/null @@ -1,869 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include <QtGui/QApplication> -#include <QtGui/QPainter> -#include <QtGui/QImage> - -#include <qstatictext.h> -#include <qpaintengine.h> - -#include <private/qstatictext_p.h> -#include <private/qapplication_p.h> - -// #define DEBUG_SAVE_IMAGE - -class tst_QStaticText: public QObject -{ - Q_OBJECT - -private: - bool supportsTransformations() const; - -private slots: - void initTestCase(); - - void init(); - void cleanup(); - - void constructionAndDestruction(); - void drawToPoint_data(); - void drawToPoint(); - void drawToRect_data(); - void drawToRect(); - void setFont(); - void setTextWidth(); - void prepareToCorrectData(); - void prepareToWrongData(); - - void copyConstructor(); - - void translatedPainter(); - void rotatedPainter(); - void scaledPainter(); - void projectedPainter(); -#if 0 - void rotatedScaledAndTranslatedPainter_data(); - void rotatedScaledAndTranslatedPainter(); -#endif - void transformationChanged(); - - void plainTextVsRichText(); - - void setPenPlainText(); - void setPenRichText(); - void richTextOverridesPen(); - - void drawStruckOutText(); - void drawOverlinedText(); - void drawUnderlinedText(); - - void unprintableCharacter_qtbug12614(); - - void underlinedColor_qtbug20159(); - void textDocumentColor(); - -private: - QImage const m_whiteSquare; -}; - -void tst_QStaticText::initTestCase() -{ - // a "blank" square; we compare against in our testfunctions to verify - // that we have actually painted something - QPixmap pm(1000, 1000); - pm.fill(Qt::white); - const_cast<QImage&>(m_whiteSquare) = pm.toImage(); -} - -void tst_QStaticText::init() -{ -} - -void tst_QStaticText::cleanup() -{ -} - -void tst_QStaticText::constructionAndDestruction() -{ - QStaticText text("My text"); -} - -void tst_QStaticText::copyConstructor() -{ - QStaticText text(QLatin1String("My text")); - - QTextOption textOption(Qt::AlignRight); - text.setTextOption(textOption); - - text.setPerformanceHint(QStaticText::AggressiveCaching); - text.setTextWidth(123.456); - text.setTextFormat(Qt::PlainText); - - QStaticText copiedText(text); - copiedText.setText(QLatin1String("Other text")); - - QCOMPARE(copiedText.textOption().alignment(), Qt::AlignRight); - QCOMPARE(copiedText.performanceHint(), QStaticText::AggressiveCaching); - QCOMPARE(copiedText.textWidth(), 123.456); - QCOMPARE(copiedText.textFormat(), Qt::PlainText); - - QStaticText otherCopiedText(copiedText); - otherCopiedText.setTextWidth(789); - - QCOMPARE(otherCopiedText.text(), QString::fromLatin1("Other text")); -} - -Q_DECLARE_METATYPE(QStaticText::PerformanceHint) -void tst_QStaticText::drawToPoint_data() -{ - QTest::addColumn<QStaticText::PerformanceHint>("performanceHint"); - - QTest::newRow("Moderate caching") << QStaticText::ModerateCaching; - QTest::newRow("Aggressive caching") << QStaticText::AggressiveCaching; -} - -void tst_QStaticText::drawToPoint() -{ - QFETCH(QStaticText::PerformanceHint, performanceHint); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - text.setPerformanceHint(performanceHint); - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::drawToRect_data() -{ - QTest::addColumn<QStaticText::PerformanceHint>("performanceHint"); - - QTest::newRow("Moderate caching") << QStaticText::ModerateCaching; - QTest::newRow("Aggressive caching") << QStaticText::AggressiveCaching; -} - -void tst_QStaticText::drawToRect() -{ - QFETCH(QStaticText::PerformanceHint, performanceHint); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.drawText(QRectF(11, 12, 10, 500), "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextWidth(10), - p.setClipRect(QRectF(11, 12, 10, 500)); - text.setPerformanceHint(performanceHint); - text.setTextFormat(Qt::PlainText); - p.drawStaticText(QPointF(11, 12), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("drawToRect_imageDrawText.png"); - imageDrawStaticText.save("drawToRect_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::prepareToCorrectData() -{ - QTransform transform; - transform.scale(2.0, 2.0); - transform.rotate(90, Qt::ZAxis); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.setTransform(transform); - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.setTransform(transform); - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.prepare(transform, p.font()); - text.setTextFormat(Qt::PlainText); - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("prepareToCorrectData_imageDrawText.png"); - imageDrawStaticText.save("prepareToCorrectData_imageDrawStaticText.png"); -#endif - -#ifdef Q_WS_QPA - QEXPECT_FAIL("", "QTBUG-20977 fails on qpa", Abort); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - - if (!supportsTransformations()) - QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::prepareToWrongData() -{ - QTransform transform; - transform.scale(2.0, 2.0); - transform.rotate(90, Qt::ZAxis); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.prepare(transform, p.font()); - text.setTextFormat(Qt::PlainText); - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - - -void tst_QStaticText::setFont() -{ - QFont font = QApplication::font(); - font.setBold(true); - font.setPointSize(28); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.drawText(QRectF(0, 0, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - - p.setFont(font); - p.drawText(QRectF(11, 120, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - - QStaticText text; - text.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(0, 0, text); - - p.setFont(font); - p.drawStaticText(11, 120, text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("setFont_imageDrawText.png"); - imageDrawStaticText.save("setFont_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::setTextWidth() -{ - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.drawText(QRectF(11, 12, 10, 500), "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextWidth(10); - p.setClipRect(QRectF(11, 12, 10, 500)); - p.drawStaticText(QPointF(11, 12), text); - } - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::translatedPainter() -{ - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.translate(100, 200); - - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.translate(100, 200); - - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -bool tst_QStaticText::supportsTransformations() const -{ - QPixmap pm(10, 10); - QPainter p(&pm); - QPaintEngine *engine = p.paintEngine(); - - QPaintEngine::Type type = engine->type(); - - if (type == QPaintEngine::OpenGL -#if !defined(Q_WS_WIN) && !defined(Q_WS_X11) && !defined(Q_WS_MAC) - || type == QPaintEngine::Raster -#endif - ) - return false; - - return true; -} - -void tst_QStaticText::rotatedPainter() -{ - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.rotate(30.0); - p.drawText(QRectF(0, 0, 1000, 100), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - QPainter p(&imageDrawStaticText); - p.rotate(30.0); - p.drawStaticText(QPoint(0, 0), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("rotatedPainter_imageDrawText.png"); - imageDrawStaticText.save("rotatedPainter_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - - if (!supportsTransformations()) - QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::scaledPainter() -{ - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.scale(2.0, 0.2); - - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.scale(2.0, 0.2); - - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - - if (!supportsTransformations()) - QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::projectedPainter() -{ - QTransform transform; - transform.rotate(90, Qt::XAxis); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.setTransform(transform); - - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.setTransform(transform); - - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -#if 0 -void tst_QStaticText::rotatedScaledAndTranslatedPainter_data() -{ - QTest::addColumn<qreal>("offset"); - - for (int i=0; i<100; ++i) { - qreal offset = 300 + i / 100.; - QTest::newRow(QByteArray::number(offset).constData()) << offset; - } -} - -void tst_QStaticText::rotatedScaledAndTranslatedPainter() -{ - QFETCH(qreal, offset); - - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.translate(offset, 0); - p.rotate(45.0); - p.scale(2.0, 2.0); - p.translate(100, 200); - - p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.translate(offset, 0); - p.rotate(45.0); - p.scale(2.0, 2.0); - p.translate(100, 200); - - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("rotatedScaledAndPainter_imageDrawText.png"); - imageDrawStaticText.save("rotatedScaledAndPainter_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - - if (!supportsTransformations()) - QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - QCOMPARE(imageDrawStaticText, imageDrawText); -} -#endif - -void tst_QStaticText::transformationChanged() -{ - QPixmap imageDrawText(1000, 1000); - imageDrawText.fill(Qt::white); - { - QPainter p(&imageDrawText); - p.rotate(33.0); - p.scale(0.5, 0.7); - - p.drawText(QRectF(0, 0, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - - p.scale(2.0, 2.5); - p.drawText(QRectF(0, 0, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - } - - QPixmap imageDrawStaticText(1000, 1000); - imageDrawStaticText.fill(Qt::white); - { - QPainter p(&imageDrawStaticText); - p.rotate(33.0); - p.scale(0.5, 0.7); - - QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - text.setTextFormat(Qt::PlainText); - - p.drawStaticText(QPointF(0, 0), text); - - p.scale(2.0, 2.5); - p.drawStaticText(QPointF(0, 0), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("transformationChanged_imageDrawText.png"); - imageDrawStaticText.save("transformationChanged_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - - if (!supportsTransformations()) - QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort); - QCOMPARE(imageDrawStaticText, imageDrawText); -} - -void tst_QStaticText::plainTextVsRichText() -{ - QPixmap imagePlainText(1000, 1000); - imagePlainText.fill(Qt::white); - { - QPainter p(&imagePlainText); - - QStaticText staticText; - staticText.setText("FOObar"); - staticText.setTextFormat(Qt::PlainText); - - p.drawStaticText(10, 10, staticText); - } - - QPixmap imageRichText(1000, 1000); - imageRichText.fill(Qt::white); - { - QPainter p(&imageRichText); - - QStaticText staticText; - staticText.setText("<html><body>FOObar</body></html>"); - staticText.setTextFormat(Qt::RichText); - - p.drawStaticText(10, 10, staticText); - } - -#if defined(DEBUG_SAVE_IMAGE) - imagePlainText.save("plainTextVsRichText_imagePlainText.png"); - imageRichText.save("plainTextVsRichText_imageRichText.png"); -#endif - - QVERIFY(imagePlainText.toImage() != m_whiteSquare); - QCOMPARE(imagePlainText, imageRichText); -} - -void tst_QStaticText::setPenPlainText() -{ - QFont font = QApplication::font(); - font.setStyleStrategy(QFont::NoAntialias); - - QFontMetricsF fm(font); - QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height())); - image.fill(Qt::white); - { - QPainter p(&image); - p.setFont(font); - p.setPen(Qt::green); - - QStaticText staticText("XXXXX"); - staticText.setTextFormat(Qt::PlainText); - p.drawStaticText(0, 0, staticText); - } - - QImage img = image.toImage(); - for (int x=0; x<img.width(); ++x) { - for (int y=0; y<img.height(); ++y) { - QRgb pixel = img.pixel(x, y); - QVERIFY(pixel == QColor(Qt::white).rgba() - || pixel == QColor(Qt::green).rgba()); - } - } -} - -void tst_QStaticText::setPenRichText() -{ - QFont font = QApplication::font(); - font.setStyleStrategy(QFont::NoAntialias); - - QFontMetricsF fm(font); - QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height())); - image.fill(Qt::white); - { - QPainter p(&image); - p.setFont(font); - p.setPen(Qt::green); - - QStaticText staticText; - staticText.setText("<html><body>XXXXX</body></html>"); - staticText.setTextFormat(Qt::RichText); - p.drawStaticText(0, 0, staticText); - } - - QImage img = image.toImage(); - for (int x=0; x<img.width(); ++x) { - for (int y=0; y<img.height(); ++y) { - QRgb pixel = img.pixel(x, y); - QVERIFY(pixel == QColor(Qt::white).rgba() - || pixel == QColor(Qt::green).rgba()); - } - } -} - -void tst_QStaticText::richTextOverridesPen() -{ - QFont font = QApplication::font(); - font.setStyleStrategy(QFont::NoAntialias); - - QFontMetricsF fm(font); - QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height())); - image.fill(Qt::white); - { - QPainter p(&image); - p.setFont(font); - p.setPen(Qt::green); - - QStaticText staticText; - staticText.setText("<html><body><font color=\"#ff0000\">XXXXX</font></body></html>"); - staticText.setTextFormat(Qt::RichText); - p.drawStaticText(0, 0, staticText); - } - - QImage img = image.toImage(); - for (int x=0; x<img.width(); ++x) { - for (int y=0; y<img.height(); ++y) { - QRgb pixel = img.pixel(x, y); - QVERIFY(pixel == QColor(Qt::white).rgba() - || pixel == QColor(Qt::red).rgba()); - } - } -} - -void tst_QStaticText::drawStruckOutText() -{ - QPixmap imageDrawText(1000, 1000); - QPixmap imageDrawStaticText(1000, 1000); - - imageDrawText.fill(Qt::white); - imageDrawStaticText.fill(Qt::white); - - QString s = QString::fromLatin1("Foobar"); - - QFont font; - font.setStrikeOut(true); - - { - QPainter p(&imageDrawText); - p.setFont(font); - p.drawText(QPointF(50, 50), s); - } - - { - QPainter p(&imageDrawStaticText); - QStaticText text = QStaticText(s); - p.setFont(font); - p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("drawStruckOutText_imageDrawText.png"); - imageDrawStaticText.save("drawStruckOutText_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawText, imageDrawStaticText); -} - -void tst_QStaticText::drawOverlinedText() -{ - QPixmap imageDrawText(1000, 1000); - QPixmap imageDrawStaticText(1000, 1000); - - imageDrawText.fill(Qt::white); - imageDrawStaticText.fill(Qt::white); - - QString s = QString::fromLatin1("Foobar"); - - QFont font; - font.setOverline(true); - - { - QPainter p(&imageDrawText); - p.setFont(font); - p.drawText(QPointF(50, 50), s); - } - - { - QPainter p(&imageDrawStaticText); - QStaticText text = QStaticText(s); - p.setFont(font); - p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("drawOverlinedText_imageDrawText.png"); - imageDrawStaticText.save("drawOverlinedText_imageDrawStaticText.png"); -#endif - - QVERIFY(imageDrawText.toImage() != m_whiteSquare); - QCOMPARE(imageDrawText, imageDrawStaticText); -} - -void tst_QStaticText::drawUnderlinedText() -{ - QPixmap imageDrawText(1000, 1000); - QPixmap imageDrawStaticText(1000, 1000); - - imageDrawText.fill(Qt::white); - imageDrawStaticText.fill(Qt::white); - - QString s = QString::fromLatin1("Foobar"); - - QFont font; - font.setUnderline(true); - - { - QPainter p(&imageDrawText); - p.setFont(font); - p.drawText(QPointF(50, 50), s); - } - - { - QPainter p(&imageDrawStaticText); - QStaticText text = QStaticText(s); - p.setFont(font); - p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); - } - -#if defined(DEBUG_SAVE_IMAGE) - imageDrawText.save("drawUnderlinedText_imageDrawText.png"); - imageDrawStaticText.save("drawUnderlinedText_imageDrawStaticText.png"); -#endif - - QCOMPARE(imageDrawText, imageDrawStaticText); -} - -void tst_QStaticText::unprintableCharacter_qtbug12614() -{ - QString s(QChar(0x200B)); // U+200B, ZERO WIDTH SPACE - - QStaticText staticText(s); - - QVERIFY(staticText.size().isValid()); // Force layout. Should not crash. -} - -void tst_QStaticText::underlinedColor_qtbug20159() -{ - QString multiScriptText; - multiScriptText += QChar(0x0410); // Cyrillic 'A' - multiScriptText += QLatin1Char('A'); - - QStaticText staticText(multiScriptText); - - QFont font; - font.setUnderline(true); - - staticText.prepare(QTransform(), font); - - QStaticTextPrivate *d = QStaticTextPrivate::get(&staticText); - QCOMPARE(d->itemCount, 2); - - // The pen should not be marked as dirty when drawing the underline - QVERIFY(!d->items[0].color.isValid()); - QVERIFY(!d->items[1].color.isValid()); -} - -void tst_QStaticText::textDocumentColor() -{ - QStaticText staticText("A<font color=\"red\">B</font>"); - staticText.setTextFormat(Qt::RichText); - staticText.prepare(); - - QStaticTextPrivate *d = QStaticTextPrivate::get(&staticText); - QCOMPARE(d->itemCount, 2); - - // The pen should not be marked as dirty when drawing the underline - QVERIFY(!d->items[0].color.isValid()); - QVERIFY(d->items[1].color.isValid()); - - QCOMPARE(d->items[1].color, QColor(Qt::red)); -} - -QTEST_MAIN(tst_QStaticText) -#include "tst_qstatictext.moc" |