]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextprint.cpp
Undid completely wrong patch 1438117: other platforms do _not_ count
[wxWidgets.git] / src / richtext / richtextprint.cpp
index 0032487f4cad4b4911a58d688819d3fe19134214..8652db7c631609a86de6ccfee1503c76db10a8be 100644 (file)
@@ -80,18 +80,22 @@ void wxRichTextPrintout::OnPreparePrinting()
             // child is a paragraph
             wxRichTextParagraph* child = wxDynamicCast(node->GetData(), wxRichTextParagraph);
             wxASSERT (child != NULL);
-
+            
             wxRichTextLineList::compatibility_iterator node2 = child->GetLines().GetFirst();
             while (node2)
             {
                 wxRichTextLine* line = node2->GetData();
-                
+
                 // Set the line to the page-adjusted position
                 line->SetPosition(wxPoint(line->GetPosition().x, line->GetPosition().y - yOffset));
 
                 int lineY = child->GetPosition().y + line->GetPosition().y;
                 
-                if ((lineY + line->GetSize().y) > rect.GetBottom())
+                // Break the page if either we're going off the bottom, or this paragraph specifies
+                // an explicit page break
+                
+                if (((lineY + line->GetSize().y) > rect.GetBottom()) ||
+                    ((node2 == child->GetLines().GetFirst()) && child->GetAttributes().HasPageBreak()))
                 {
                     // New page starting at this line
                     int newY = rect.y;
@@ -324,8 +328,8 @@ void wxRichTextPrintout::CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& he
     
     dc->SetUserScale(overallScale, overallScale);
 
-    wxRect rect(marginLeft/scale, marginTop/scale,
-                (pageWidth - marginLeft - marginRight)/scale, (pageHeight - marginTop - marginBottom)/scale);
+    wxRect rect((int) (marginLeft/scale), (int) (marginTop/scale),
+                (int) ((pageWidth - marginLeft - marginRight)/scale), (int)((pageHeight - marginTop - marginBottom)/scale));
                 
     headerRect = wxRect(0, 0, 0, 0);
 
@@ -344,7 +348,7 @@ void wxRichTextPrintout::CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& he
         
         int charHeight = dc->GetCharHeight();
         
-        int headerHeight = charHeight + headerMargin/scale;
+        int headerHeight = (int) (charHeight + headerMargin/scale);
 
         headerRect = wxRect(rect.x, rect.y, rect.width, headerHeight);
 
@@ -369,7 +373,7 @@ void wxRichTextPrintout::CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& he
         
         int charHeight = dc->GetCharHeight();
         
-        int footerHeight = charHeight + footerMargin/scale;
+        int footerHeight = (int) (charHeight + footerMargin/scale);
 
         footerRect = wxRect(rect.x, rect.y + rect.height, rect.width, footerHeight);