X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a5ae8241de5d07fc10d8fa6ba9c0faa1457521b8..cda66071f17f062779a7009065e5ff7dd958440b:/src/html/htmprint.cpp?ds=sidebyside diff --git a/src/html/htmprint.cpp b/src/html/htmprint.cpp index 099cf3bbd5..6f4912caee 100644 --- a/src/html/htmprint.cpp +++ b/src/html/htmprint.cpp @@ -36,6 +36,7 @@ #include "wx/html/htmprint.h" #include "wx/wxhtml.h" #include "wx/wfstream.h" +#include "wx/module.h" //-------------------------------------------------------------------------------- @@ -114,12 +115,15 @@ int wxHtmlDCRenderer::Render(int x, int y, int from, int dont_render, int to, in if (!dont_render) { + wxHtmlRenderingInfo rinfo; + wxDefaultHtmlRenderingStyle rstyle; + rinfo.SetStyle(&rstyle); m_DC->SetBrush(*wxWHITE_BRUSH); - m_DC->SetClippingRegion(x, y, m_Width, hght); m_Cells->Draw(*m_DC, - x, (y - from), - y, pbreak + (y /*- from*/)); + x, (y - from), + y, pbreak + (y /*- from*/), + rinfo); m_DC->DestroyClippingRegion(); } @@ -136,25 +140,12 @@ int wxHtmlDCRenderer::GetTotalHeight() } - - - - - - - - - - - - - - //-------------------------------------------------------------------------------- // wxHtmlPrintout //-------------------------------------------------------------------------------- +wxList wxHtmlPrintout::m_Filters; wxHtmlPrintout::wxHtmlPrintout(const wxString& title) : wxPrintout(title) { @@ -176,7 +167,17 @@ wxHtmlPrintout::~wxHtmlPrintout() delete m_RendererHdr; } +void wxHtmlPrintout::CleanUpStatics() +{ + m_Filters.DeleteContents(TRUE); + m_Filters.Clear(); +} +// Adds input filter +void wxHtmlPrintout::AddFilter(wxHtmlFilter *filter) +{ + m_Filters.Append(filter); +} bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage) { @@ -288,9 +289,26 @@ void wxHtmlPrintout::SetHtmlFile(const wxString& htmlfile) return; } - wxHtmlFilterHTML filter; - wxString doc = filter.ReadFile(*ff); - + bool done = FALSE; + wxHtmlFilterHTML defaultFilter; + wxString doc; + + wxNode* node = m_Filters.GetFirst(); + while (node) + { + wxHtmlFilter *h = (wxHtmlFilter*) node->GetData(); + if (h->CanRead(*ff)) + { + doc = h->ReadFile(*ff); + done = TRUE; + break; + } + node = node->GetNext(); + } + + if (!done) + doc = defaultFilter.ReadFile(*ff); + SetHtmlText(doc, htmlfile, FALSE); delete ff; } @@ -624,6 +642,21 @@ wxHtmlPrintout *wxHtmlEasyPrinting::CreatePrintout() return p; } +// A module to allow initialization/cleanup +// without calling these functions from app.cpp or from +// the user's application. + +class wxHtmlPrintingModule: public wxModule +{ +DECLARE_DYNAMIC_CLASS(wxHtmlPrintingModule) +public: + wxHtmlPrintingModule() : wxModule() {} + bool OnInit() { return TRUE; } + void OnExit() { wxHtmlPrintout::CleanUpStatics(); } +}; + +IMPLEMENT_DYNAMIC_CLASS(wxHtmlPrintingModule, wxModule) + // This hack forces the linker to always link in m_* files // (wxHTML doesn't work without handlers from these files)