diff options
-rw-r--r-- | src/gui/text/qtextdocumentlayout.cpp | 5 | ||||
-rw-r--r-- | tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp | 60 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 2e1a2b5bff..bed0a2c450 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -145,6 +145,9 @@ struct QTextLayoutStruct { inline QFixed absoluteY() const { return frameY + y; } + inline QFixed contentHeight() const + { return pageHeight - pageBottomMargin - pageTopMargin; } + inline int currentPage() const { return pageHeight == 0 ? 0 : (absoluteY() / pageHeight).truncate(); } @@ -2701,7 +2704,7 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi getLineHeightParams(blockFormat, line, scaling, &lineAdjustment, &lineBreakHeight, &lineHeight, &lineBottom); while (layoutStruct->pageHeight > 0 && layoutStruct->absoluteY() + lineBreakHeight > layoutStruct->pageBottom && - layoutStruct->pageHeight >= lineBreakHeight) { + layoutStruct->contentHeight() >= lineBreakHeight) { layoutStruct->newPage(); floatMargins(layoutStruct->y, layoutStruct, &left, &right); diff --git a/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp b/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp index c79f787547..f66b16b970 100644 --- a/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp +++ b/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp @@ -59,6 +59,8 @@ private slots: void imageAtRightAlignedTab(); void blockVisibility(); + void largeImage(); + private: QTextDocument *doc; }; @@ -347,5 +349,63 @@ void tst_QTextDocumentLayout::blockVisibility() QCOMPARE(doc->size(), halfSize); } +void tst_QTextDocumentLayout::largeImage() +{ + auto img = QImage(400, 500, QImage::Format_ARGB32_Premultiplied); + img.fill(Qt::black); + + { + QTextDocument document; + + document.addResource(QTextDocument::ImageResource, + QUrl("data://test.png"), QVariant(img)); + document.setPageSize({500, 504}); + + auto html = "<img src=\"data://test.png\">"; + document.setHtml(html); + + QCOMPARE(document.pageCount(), 2); + } + + { + QTextDocument document; + + document.addResource(QTextDocument::ImageResource, + QUrl("data://test.png"), QVariant(img)); + document.setPageSize({500, 508}); + + auto html = "<img src=\"data://test.png\">"; + document.setHtml(html); + + QCOMPARE(document.pageCount(), 1); + } + + { + QTextDocument document; + + document.addResource(QTextDocument::ImageResource, + QUrl("data://test.png"), QVariant(img)); + document.setPageSize({585, 250}); + + auto html = "<img src=\"data://test.png\">"; + document.setHtml(html); + + QCOMPARE(document.pageCount(), 3); + } + + { + QTextDocument document; + + document.addResource(QTextDocument::ImageResource, + QUrl("data://test.png"), QVariant(img)); + document.setPageSize({585, 258}); + + auto html = "<img src=\"data://test.png\">"; + document.setHtml(html); + + QCOMPARE(document.pageCount(), 2); + } +} + QTEST_MAIN(tst_QTextDocumentLayout) #include "tst_qtextdocumentlayout.moc" |