]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextprint.cpp
remove incorrect cast of wxString to char* (unnecessary and breaks wxUSE_STL build)
[wxWidgets.git] / src / richtext / richtextprint.cpp
index 5319131f7452fa7252374e6e9b78e36c5bf36e85..1082eabbf1d51b6a5a3565ec26f27bef9cd1c0d3 100644 (file)
@@ -50,7 +50,7 @@ void wxRichTextPrintout::OnPreparePrinting()
 {
     wxBusyCursor wait;
 
-    m_numPages = 0;
+    m_numPages = 1;
 
     m_pageBreaksStart.Clear();
     m_pageBreaksEnd.Clear();
@@ -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;
@@ -123,11 +127,10 @@ void wxRichTextPrintout::OnPreparePrinting()
         }
 
         // Closing page break
-        if (m_pageBreaksStart.GetCount() > 0 && (m_pageBreaksEnd[m_pageBreaksEnd.GetCount()-1] < (GetRichTextBuffer()->GetRange().GetEnd()-1)))
+        if (m_pageBreaksStart.GetCount() == 0 || (m_pageBreaksEnd[m_pageBreaksEnd.GetCount()-1] < (GetRichTextBuffer()->GetRange().GetEnd()-1)))
         {
             m_pageBreaksStart.Add(lastStartPos);
             m_pageBreaksEnd.Add(GetRichTextBuffer()->GetRange().GetEnd());
-            m_numPages ++;
         }
     }
 }
@@ -186,7 +189,7 @@ void wxRichTextPrintout::RenderPage(wxDC *dc, int page)
             dc->SetTextForeground(m_headerFooterData.GetTextColour());
         else
             dc->SetTextForeground(*wxBLACK);
-        dc->SetBackgroundMode(wxTRANSPARENT);
+        dc->SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT);
 
         // Draw header, if any    
         wxRichTextOddEvenPage oddEven = ((page % 2) == 1) ? wxRICHTEXT_PAGE_ODD : wxRICHTEXT_PAGE_EVEN;
@@ -435,6 +438,17 @@ wxPrintData *wxRichTextPrinting::GetPrintData()
     return m_printData;
 }
 
+/// Set print and page setup data
+void wxRichTextPrinting::SetPrintData(const wxPrintData& printData)
+{
+    (*GetPrintData()) = printData;
+}
+
+void wxRichTextPrinting::SetPageSetupData(const wxPageSetupData& pageSetupData)
+{
+    (*GetPageSetupData()) = pageSetupData;
+}
+
 /// Set the rich text buffer pointer, deleting the existing object if present
 void wxRichTextPrinting::SetRichTextBufferPrinting(wxRichTextBuffer* buf)
 {