From b5a1cc93f3dd16d5f7f9e9c205462b91cdc9594b Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 21 Jun 2012 20:12:44 +0000 Subject: [PATCH] Fixed #14429: Printing a large table in wxRichTextCtrl fails git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71830 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/richtext/richtextprint.cpp | 40 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/richtext/richtextprint.cpp b/src/richtext/richtextprint.cpp index 55c0dbf8cf..a3c8d11522 100644 --- a/src/richtext/richtextprint.cpp +++ b/src/richtext/richtextprint.cpp @@ -97,26 +97,30 @@ void wxRichTextPrintout::OnPreparePrinting() if (((lineY + line->GetSize().y) > rect.GetBottom()) || hasHardPageBreak) { - // New page starting at this line - int newY = rect.y; + // Only if we're not at the start of the document, and + // even then, only if either it's a hard break or if the object + // can fit in a whole page (otherwise there's no point in making + // the rest of this page blank). + if (lastLine && (hasHardPageBreak || (line->GetSize().y <= rect.GetHeight()))) + { + // New page starting at this line + int newY = rect.y; + + // We increase the offset by the difference between new and old positions + + int increaseOffsetBy = lineY - newY; + yOffset += increaseOffsetBy; + + m_pageBreaksStart.Add(lastStartPos); + m_pageBreaksEnd.Add(lastLine->GetAbsoluteRange().GetEnd()); + m_pageYOffsets.Add(yOffset); + + lastStartPos = line->GetAbsoluteRange().GetStart(); + m_numPages ++; + } - // We increase the offset by the difference between new and old positions - - int increaseOffsetBy = lineY - newY; - yOffset += increaseOffsetBy; - - if (!lastLine) - lastLine = line; - - m_pageBreaksStart.Add(lastStartPos); - m_pageBreaksEnd.Add(lastLine->GetAbsoluteRange().GetEnd()); - m_pageYOffsets.Add(yOffset); - - lastStartPos = line->GetAbsoluteRange().GetStart(); lastLine = line; - m_numPages ++; - // Now create page breaks for the rest of the line, if it's larger than the page height int contentLeft = line->GetSize().y - rect.GetHeight(); while (contentLeft >= 0) @@ -127,6 +131,8 @@ void wxRichTextPrintout::OnPreparePrinting() m_pageBreaksStart.Add(lastStartPos); m_pageBreaksEnd.Add(lastLine->GetAbsoluteRange().GetEnd()); m_pageYOffsets.Add(yOffset); + + m_numPages ++; } }