From 398c701f7012fad12e4e13498045b734ca44bcf9 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 19 Dec 2005 20:38:47 +0000 Subject: [PATCH] Fixed problem trying to print from a preview, whereby wrong printer class was used instead of Gnome printer class. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36493 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 2 ++ src/generic/dcpsg.cpp | 4 ++-- src/generic/printps.cpp | 19 ++++++++++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 5ca0e2bdff..12e343047c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -52,6 +52,8 @@ wxGTK: - Fixed problem with choice editor in wxGrid whereby the editor lost focus when the combobox menu was shown. +- Fixed problem trying to print from a preview, whereby wrong printer + class was used. wxMac: diff --git a/src/generic/dcpsg.cpp b/src/generic/dcpsg.cpp index a93dffc55a..3f7057b564 100644 --- a/src/generic/dcpsg.cpp +++ b/src/generic/dcpsg.cpp @@ -1973,9 +1973,9 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string, // it just crashes #ifndef __WIN32__ wxPostScriptPrintNativeData *data = - (wxPostScriptPrintNativeData *) m_printData.GetNativeData(); + wxDynamicCast(m_printData.GetNativeData(), wxPostScriptPrintNativeData); - if (!data->GetFontMetricPath().empty()) + if (data && !data->GetFontMetricPath().empty()) { afmName = data->GetFontMetricPath(); afmName << wxFILE_SEP_PATH << name; diff --git a/src/generic/printps.cpp b/src/generic/printps.cpp index 3b566ffefa..c3fd9a8a61 100644 --- a/src/generic/printps.cpp +++ b/src/generic/printps.cpp @@ -148,12 +148,12 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro // set by the user m_printDialogData.SetMinPage(minPage); m_printDialogData.SetMaxPage(maxPage); - + if (m_printDialogData.GetFromPage() < minPage) m_printDialogData.SetFromPage( minPage ); if (m_printDialogData.GetToPage() > maxPage) m_printDialogData.SetToPage( maxPage ); - + int pagesPerCopy = m_printDialogData.GetToPage()-m_printDialogData.GetFromPage()+1, totalPages = pagesPerCopy * m_printDialogData.GetNoCopies(), @@ -233,13 +233,13 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro wxDC* wxPostScriptPrinter::PrintDialog(wxWindow *parent) { wxDC* dc = (wxDC*) NULL; - + wxGenericPrintDialog dialog( parent, &m_printDialogData ); if (dialog.ShowModal() == wxID_OK) { dc = dialog.GetPrintDC(); m_printDialogData = dialog.GetPrintDialogData(); - + if (dc == NULL) sm_lastError = wxPRINTER_ERROR; else @@ -265,7 +265,7 @@ bool wxPostScriptPrinter::Setup(wxWindow *WXUNUSED(parent)) } dialog->Destroy(); - + return (ret == wxID_OK); #endif @@ -307,7 +307,16 @@ bool wxPostScriptPrintPreview::Print(bool interactive) { if (!m_printPrintout) return false; + + // Assume that on Unix, the preview may use the PostScript + // (generic) version, but printing using the native system is required. + // TODO: make a generic print preview class from which wxPostScriptPrintPreview + // is derived. +#ifdef __UNIX__ + wxPrinter printer(& m_printDialogData); +#else wxPostScriptPrinter printer(& m_printDialogData); +#endif return printer.Print(m_previewFrame, m_printPrintout, interactive); } -- 2.45.2