X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57bd4c6031d438f11af0ec540136f49a928b923c..02d5015b1cbb99d7a2e2ab7818cd46b2b4514957:/src/msw/printdlg.cpp diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index 4fb94bd799..c8586ab3e0 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -136,7 +136,7 @@ wxWindowsPrintNativeData::~wxWindowsPrintNativeData() GlobalFree(hDevNames); } -bool wxWindowsPrintNativeData::Ok() const +bool wxWindowsPrintNativeData::IsOk() const { return (m_devMode != NULL) ; } @@ -198,7 +198,11 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data ) } else { data.SetBin(wxPRINTBIN_DEFAULT); } - + if (devMode->dmFields & DM_MEDIATYPE) + { + wxASSERT( (int)devMode->dmMediaType != wxPRINTMEDIA_DEFAULT ); + data.SetMedia(devMode->dmMediaType); + } //// Printer name if (devMode->dmDeviceName[0] != 0) // This syntax fixes a crash when using VS 7.1 @@ -440,38 +444,40 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) devMode->dmFields |= DM_COLOR; //// Paper size - if (data.GetPaperId() == wxPAPER_NONE) + + // Paper id has priority over paper size. If id is specified, then size + // is ignored (as it can be filled in even for standard paper sizes) + + wxPrintPaperType *paperType = NULL; + + const wxPaperSize paperId = data.GetPaperId(); + if ( paperId != wxPAPER_NONE && wxThePrintPaperDatabase ) { - // DEVMODE is in tenths of a milimeter - devMode->dmPaperWidth = (short)(data.GetPaperSize().x * 10); - devMode->dmPaperLength = (short)(data.GetPaperSize().y * 10); - if(m_customWindowsPaperId != 0) - devMode->dmPaperSize = m_customWindowsPaperId; - else - devMode->dmPaperSize = DMPAPER_USER; - devMode->dmFields |= DM_PAPERWIDTH; - devMode->dmFields |= DM_PAPERLENGTH; + paperType = wxThePrintPaperDatabase->FindPaperType(paperId); } - else + + if ( paperType ) { - if (wxThePrintPaperDatabase) + devMode->dmPaperSize = (short)paperType->GetPlatformId(); + devMode->dmFields |= DM_PAPERSIZE; + } + else // custom (or no) paper size + { + const wxSize paperSize = data.GetPaperSize(); + if ( paperSize != wxDefaultSize ) { - wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperType( data.GetPaperId() ); - if (paper) - { - devMode->dmPaperSize = (short)paper->GetPlatformId(); - devMode->dmFields |= DM_PAPERSIZE; - } + // Fall back on specifying the paper size explicitly + if(m_customWindowsPaperId != 0) + devMode->dmPaperSize = m_customWindowsPaperId; else - { - // Fall back on specifying the paper size explicitly - devMode->dmPaperWidth = (short)(data.GetPaperSize().x * 10); - devMode->dmPaperLength = (short)(data.GetPaperSize().y * 10); devMode->dmPaperSize = DMPAPER_USER; - devMode->dmFields |= DM_PAPERWIDTH; - devMode->dmFields |= DM_PAPERLENGTH; - } + devMode->dmPaperWidth = (short)(paperSize.x * 10); + devMode->dmPaperLength = (short)(paperSize.y * 10); + devMode->dmFields |= DM_PAPERWIDTH; + devMode->dmFields |= DM_PAPERLENGTH; } + //else: neither paper type nor size specified, don't fill DEVMODE + // at all so that the system defaults are used } //// Duplex @@ -547,7 +553,11 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data ) devMode->dmFields |= DM_DEFAULTSOURCE; } - + if (data.GetMedia() != wxPRINTMEDIA_DEFAULT) + { + devMode->dmMediaType = data.GetMedia(); + devMode->dmFields |= DM_MEDIATYPE; + } GlobalUnlock(hDevMode); } @@ -647,7 +657,7 @@ wxDC *wxWindowsPrintDialog::GetPrintDC() return m_printerDC; } else - return (wxDC*) NULL; + return (wxPrinterDC*) NULL; } bool wxWindowsPrintDialog::ConvertToNative( wxPrintDialogData &data )