From 3168b4c3ae31dc190dbf02b40a7ee1b9353b6e43 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 30 May 2005 08:39:23 +0000 Subject: [PATCH] Applied patch [ 1208256 ] Fixes bug #1193626 [wxPrintData asserts on or ignores...] git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34401 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/printdlg.h | 2 ++ src/msw/printdlg.cpp | 25 ++++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/wx/msw/printdlg.h b/include/wx/msw/printdlg.h index 3f76a0b207..9bfcec6f30 100644 --- a/include/wx/msw/printdlg.h +++ b/include/wx/msw/printdlg.h @@ -49,6 +49,8 @@ private: void* m_devMode; void* m_devNames; + short m_customWindowsPaperId; + private: DECLARE_DYNAMIC_CLASS(wxWindowsPrintNativeData) }; diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index aa08d44436..c64b054463 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -128,6 +128,7 @@ wxWindowsPrintNativeData::wxWindowsPrintNativeData() { m_devMode = (void*) NULL; m_devNames = (void*) NULL; + m_customWindowsPaperId = 0; } wxWindowsPrintNativeData::~wxWindowsPrintNativeData() @@ -209,6 +210,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) { data.SetPaperId( paper->GetId() ); data.SetPaperSize( wxSize(paper->GetWidth() / 10,paper->GetHeight() / 10) ); + m_customWindowsPaperId = 0; foundPaperSize = true; } } @@ -218,27 +220,29 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) wxFAIL_MSG(wxT("Paper database wasn't initialized in wxPrintData::ConvertFromNative.")); data.SetPaperId( wxPAPER_NONE ); data.SetPaperSize( wxSize(0,0) ); + m_customWindowsPaperId = 0; GlobalUnlock(hDevMode); return false; } } - + if (!foundPaperSize && (devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH)) { // DEVMODE is in tenths of a milimeter - data.SetPaperId( wxPAPER_NONE ); data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) ); + data.SetPaperId( wxPAPER_NONE ); + m_customWindowsPaperId = devMode->dmPaperSize; } else { - // Shouldn't really get here - wxFAIL_MSG(wxT("Couldn't find paper size from DEVMODE.")); - data.SetPaperId( wxPAPER_NONE ); + // Often will reach this for non-standard paper sizes (sizes which + // wouldn't be in wxWidget's paper database). Setting + // m_customWindowsPaperId to devMode->dmPaperSize should be enough + // to get this paper size working. data.SetPaperSize( wxSize(0,0) ); - - GlobalUnlock(hDevMode); - return false; + data.SetPaperId( wxPAPER_NONE ); + m_customWindowsPaperId = devMode->dmPaperSize; } //// Duplex @@ -417,7 +421,10 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) // DEVMODE is in tenths of a milimeter devMode->dmPaperWidth = (short)(data.GetPaperSize().x * 10); devMode->dmPaperLength = (short)(data.GetPaperSize().y * 10); - devMode->dmPaperSize = DMPAPER_USER; + if(m_customWindowsPaperId != 0) + devMode->dmPaperSize = m_customWindowsPaperId; + else + devMode->dmPaperSize = DMPAPER_USER; devMode->dmFields |= DM_PAPERWIDTH; devMode->dmFields |= DM_PAPERLENGTH; } -- 2.45.2