X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c44a49b85215955e41efbb4c51c998367cb18896..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/html/htmprint.cpp?ds=sidebyside diff --git a/src/html/htmprint.cpp b/src/html/htmprint.cpp index 14d478faa9..96d32d97c3 100644 --- a/src/html/htmprint.cpp +++ b/src/html/htmprint.cpp @@ -24,6 +24,7 @@ #include "wx/settings.h" #include "wx/msgdlg.h" #include "wx/module.h" + #include "wx/sizer.h" #endif #include "wx/print.h" @@ -31,6 +32,7 @@ #include "wx/html/htmprint.h" #include "wx/wxhtml.h" #include "wx/wfstream.h" +#include "wx/infobar.h" // default font size of normal text (HTML font size 0) for printing, in points: @@ -149,7 +151,7 @@ int wxHtmlDCRenderer::Render(int x, int y, int pbreak, hght; pbreak = (int)(from + m_Height); - while (m_Cells->AdjustPagebreak(&pbreak, known_pagebreaks)) {} + while (m_Cells->AdjustPagebreak(&pbreak, known_pagebreaks, m_Height)) {} hght = pbreak - from; if(to < hght) hght = to; @@ -194,7 +196,7 @@ wxHtmlPrintout::wxHtmlPrintout(const wxString& title) : wxPrintout(title) { m_Renderer = new wxHtmlDCRenderer; m_RendererHdr = new wxHtmlDCRenderer; - m_NumPages = wxHTML_PRINT_MAX_PAGES; + m_NumPages = INT_MAX; m_Document = m_BasePath = wxEmptyString; m_BasePathIsDir = true; m_Headers[0] = m_Headers[1] = wxEmptyString; m_Footers[0] = m_Footers[1] = wxEmptyString; @@ -225,8 +227,42 @@ void wxHtmlPrintout::AddFilter(wxHtmlFilter *filter) bool wxHtmlPrintout::CheckFit(const wxSize& pageArea, const wxSize& docArea) const { - if ( docArea.x > pageArea.x ) + // Nothing to do if the contents fits horizontally. + if ( docArea.x <= pageArea.x ) + return true; + + // Otherwise warn the user more or less intrusively depending on whether + // we're previewing or printing: + if ( wxPrintPreview * const preview = GetPreview() ) + { + // Don't annoy the user too much when previewing by using info bar + // instead of a dialog box. +#if wxUSE_INFOBAR + wxFrame * const parent = preview->GetFrame(); + wxCHECK_MSG( parent, false, "No parent preview frame?" ); + + wxSizer * const sizer = parent->GetSizer(); + wxCHECK_MSG( sizer, false, "Preview frame should be using sizers" ); + + wxInfoBar * const bar = new wxInfoBar(parent); + sizer->Add(bar, wxSizerFlags().Expand()); + + // Note that the message here is similar to the one below but not + // exactly the same, notably we don't use the document title here + // because it's already clear which document it pertains to and the + // title may be long enough to make the text not fit in the window. + bar->ShowMessage + ( + _("This document doesn't fit on the page horizontally and " + "will be truncated when it is printed."), + wxICON_WARNING + ); +#endif // wxUSE_INFOBAR + } + else // We're going to really print and not just preview. { + // This is our last chance to warn the user that the output will be + // mangled so do show a message box. wxMessageDialog dlg ( @@ -323,7 +359,7 @@ void wxHtmlPrintout::OnPreparePrinting() if ( CheckFit(wxSize(printAreaW, printAreaH), wxSize(m_Renderer->GetTotalWidth(), - m_Renderer->GetTotalHeight())) ) + m_Renderer->GetTotalHeight())) || IsPreview() ) { // do paginate the document CountPages(); @@ -456,7 +492,6 @@ void wxHtmlPrintout::CountPages() int pos = 0; m_NumPages = 0; - // m_PageBreaks[0] = 0; m_PageBreaks.Clear(); m_PageBreaks.Add( 0); @@ -467,12 +502,6 @@ void wxHtmlPrintout::CountPages() m_PageBreaks, pos, true, INT_MAX); m_PageBreaks.Add( pos); - if( m_PageBreaks.GetCount() > wxHTML_PRINT_MAX_PAGES) - { - wxMessageBox( _("HTML pagination algorithm generated more than the allowed maximum number of pages and it can't continue any longer!"), - _("Warning"), wxCANCEL | wxICON_ERROR ); - break; - } } while (pos < m_Renderer->GetTotalHeight()); } @@ -505,7 +534,7 @@ void wxHtmlPrintout::RenderPage(wxDC *dc, int page) (double)ppiPrinterY / TYPICAL_SCREEN_DPI, (double)ppiPrinterY / (double)ppiScreenY); - dc->SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT); + dc->SetBackgroundMode(wxTRANSPARENT); m_Renderer->Render((int) (ppmm_h * m_MarginLeft), (int) (ppmm_v * (m_MarginTop + (m_HeaderHeight == 0 ? 0 : m_MarginSpace)) + m_HeaderHeight), m_PageBreaks, @@ -666,7 +695,7 @@ bool wxHtmlEasyPrinting::DoPreview(wxHtmlPrintout *printout1, wxHtmlPrintout *pr // Pass two printout objects: for preview, and possible printing. wxPrintDialogData printDialogData(*GetPrintData()); wxPrintPreview *preview = new wxPrintPreview(printout1, printout2, &printDialogData); - if (!preview->Ok()) + if (!preview->IsOk()) { delete preview; return false; @@ -702,7 +731,7 @@ bool wxHtmlEasyPrinting::DoPrint(wxHtmlPrintout *printout) void wxHtmlEasyPrinting::PageSetup() { - if (!GetPrintData()->Ok()) + if (!GetPrintData()->IsOk()) { wxLogError(_("There was a problem during page setup: you may need to set a default printer.")); return;