summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp5
-rw-r--r--tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp60
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"