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
This commit is contained in:
Julian Smart
2005-05-30 08:39:23 +00:00
parent ccbb33c91b
commit 3168b4c3ae
2 changed files with 18 additions and 9 deletions

View File

@@ -49,6 +49,8 @@ private:
void* m_devMode; void* m_devMode;
void* m_devNames; void* m_devNames;
short m_customWindowsPaperId;
private: private:
DECLARE_DYNAMIC_CLASS(wxWindowsPrintNativeData) DECLARE_DYNAMIC_CLASS(wxWindowsPrintNativeData)
}; };

View File

@@ -128,6 +128,7 @@ wxWindowsPrintNativeData::wxWindowsPrintNativeData()
{ {
m_devMode = (void*) NULL; m_devMode = (void*) NULL;
m_devNames = (void*) NULL; m_devNames = (void*) NULL;
m_customWindowsPaperId = 0;
} }
wxWindowsPrintNativeData::~wxWindowsPrintNativeData() wxWindowsPrintNativeData::~wxWindowsPrintNativeData()
@@ -209,6 +210,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
{ {
data.SetPaperId( paper->GetId() ); data.SetPaperId( paper->GetId() );
data.SetPaperSize( wxSize(paper->GetWidth() / 10,paper->GetHeight() / 10) ); data.SetPaperSize( wxSize(paper->GetWidth() / 10,paper->GetHeight() / 10) );
m_customWindowsPaperId = 0;
foundPaperSize = true; foundPaperSize = true;
} }
} }
@@ -218,6 +220,7 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
wxFAIL_MSG(wxT("Paper database wasn't initialized in wxPrintData::ConvertFromNative.")); wxFAIL_MSG(wxT("Paper database wasn't initialized in wxPrintData::ConvertFromNative."));
data.SetPaperId( wxPAPER_NONE ); data.SetPaperId( wxPAPER_NONE );
data.SetPaperSize( wxSize(0,0) ); data.SetPaperSize( wxSize(0,0) );
m_customWindowsPaperId = 0;
GlobalUnlock(hDevMode); GlobalUnlock(hDevMode);
return false; return false;
@@ -227,18 +230,19 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
if (!foundPaperSize && (devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH)) if (!foundPaperSize && (devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH))
{ {
// DEVMODE is in tenths of a milimeter // DEVMODE is in tenths of a milimeter
data.SetPaperId( wxPAPER_NONE );
data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) ); data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) );
data.SetPaperId( wxPAPER_NONE );
m_customWindowsPaperId = devMode->dmPaperSize;
} }
else else
{ {
// Shouldn't really get here // Often will reach this for non-standard paper sizes (sizes which
wxFAIL_MSG(wxT("Couldn't find paper size from DEVMODE.")); // wouldn't be in wxWidget's paper database). Setting
data.SetPaperId( wxPAPER_NONE ); // m_customWindowsPaperId to devMode->dmPaperSize should be enough
// to get this paper size working.
data.SetPaperSize( wxSize(0,0) ); data.SetPaperSize( wxSize(0,0) );
data.SetPaperId( wxPAPER_NONE );
GlobalUnlock(hDevMode); m_customWindowsPaperId = devMode->dmPaperSize;
return false;
} }
//// Duplex //// Duplex
@@ -417,7 +421,10 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data )
// DEVMODE is in tenths of a milimeter // DEVMODE is in tenths of a milimeter
devMode->dmPaperWidth = (short)(data.GetPaperSize().x * 10); devMode->dmPaperWidth = (short)(data.GetPaperSize().x * 10);
devMode->dmPaperLength = (short)(data.GetPaperSize().y * 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_PAPERWIDTH;
devMode->dmFields |= DM_PAPERLENGTH; devMode->dmFields |= DM_PAPERLENGTH;
} }