Include pixel size of font in exported HTML from QTextDocument
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Wed, 4 May 2011 08:52:20 +0000 (10:52 +0200)
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Wed, 4 May 2011 09:20:59 +0000 (11:20 +0200)
When you copy-pasted rich text in which the font size had been set
using setPixelSize() the font size would be mysteriously forgotten.
The pixel size property in QTextCharFormat was added ad hoc, and not
integrated in the HTML exporter.

Task-number: QT-4792
Reviewed-by: Gunnar
(cherry picked from commit 5aa5c2e2935c1829cc6965198968699f17c24ec0)

src/gui/text/qtextdocument.cpp
tests/auto/qtextdocument/tst_qtextdocument.cpp

index 6dbd755..7d84e50 100644 (file)
@@ -2076,6 +2076,10 @@ QString QTextHtmlExporter::toHtml(const QByteArray &encoding, ExportMode mode)
             html += QLatin1String(" font-size:");
             html += QString::number(defaultCharFormat.fontPointSize());
             html += QLatin1String("pt;");
+        } else if (defaultCharFormat.hasProperty(QTextFormat::FontPixelSize)) {
+            html += QLatin1String(" font-size:");
+            html += QString::number(defaultCharFormat.intProperty(QTextFormat::FontPixelSize));
+            html += QLatin1String("px;");
         }
 
         html += QLatin1String(" font-weight:");
@@ -2156,6 +2160,10 @@ bool QTextHtmlExporter::emitCharFormatStyle(const QTextCharFormat &format)
             html += QLatin1Char(';');
             attributesEmitted = true;
         }
+    } else if (format.hasProperty(QTextFormat::FontPixelSize)) {
+        html += QLatin1String(" font-size:");
+        html += QString::number(format.intProperty(QTextFormat::FontPixelSize));
+        html += QLatin1String("px;");
     }
 
     if (format.hasProperty(QTextFormat::FontWeight)
index 6675c99..26fa43d 100644 (file)
@@ -180,6 +180,8 @@ private slots:
     void escape_data();
     void escape();
 
+    void copiedFontSize();
+
 private:
     void backgroundImage_checkExpectedHtml(const QTextDocument &doc);
 
@@ -2734,5 +2736,29 @@ void tst_QTextDocument::escape()
     QCOMPARE(Qt::escape(original), expected);
 }
 
+void tst_QTextDocument::copiedFontSize()
+{
+    QTextDocument documentInput;
+    QTextDocument documentOutput;
+
+    QFont fontInput;
+    fontInput.setPixelSize(24);  // With pixels font size is not transfered in html
+
+    QTextCursor cursorInput(&documentInput);
+    QTextCharFormat formatInput = cursorInput.charFormat();
+    formatInput.setFont(fontInput);
+    cursorInput.insertText("Should be the same font", formatInput);
+    cursorInput.select(QTextCursor::Document);
+
+    QTextDocumentFragment fragmentInput(cursorInput);
+    QString html =  fragmentInput.toHtml();
+
+    QTextCursor cursorOutput(&documentOutput);
+    QTextDocumentFragment fragmentOutput = QTextDocumentFragment::fromHtml(html);
+    cursorOutput.insertFragment(fragmentOutput);
+
+    QCOMPARE(cursorOutput.charFormat().font().pixelSize(), 24);
+}
+
 QTEST_MAIN(tst_QTextDocument)
 #include "tst_qtextdocument.moc"