Chromium Code Reviews| Index: printing/printing_context_win.cc |
| diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc |
| index c467457eef77b54e5de48ee4a80198a0c08637b8..f3faf6e37de7cc7ad3d85f8e6b68718b7305be21 100644 |
| --- a/printing/printing_context_win.cc |
| +++ b/printing/printing_context_win.cc |
| @@ -17,12 +17,28 @@ |
| #include "printing/print_job_constants.h" |
| #include "printing/print_settings_initializer_win.h" |
| #include "printing/printed_document.h" |
| +#include "printing/units.h" |
| #include "skia/ext/platform_device.h" |
| using base::Time; |
| namespace { |
| +// Constants for setting default PDF settings. |
| +const int kPDFDpi = 300; // 300 dpi |
| +// LETTER: 8.5 x 11 inches |
| +const int kPDFLetterWidth = 8.5 * kPDFDpi; |
| +const int kPDFLetterHeight = 11 * kPDFDpi; |
| +// LEGAL: 8.5 x 14 inches |
| +const int kPDFLegalWidth = 8.5 * kPDFDpi; |
| +const int kPDFLegalHeight = 14 * kPDFDpi; |
| +// A4: 8.27 x 11.69 inches |
| +const int kPDFA4Width = 8.27 * kPDFDpi; |
| +const int kPDFA4Height = 11.69 * kPDFDpi; |
| +// A3: 11.69 x 16.54 inches |
| +const int kPDFA3Width = 11.69 * kPDFDpi; |
| +const int kPDFA3Height = 16.54 * kPDFDpi; |
| + |
| // Retrieves the printer's PRINTER_INFO_* structure. |
| // Output |level| can be 9 (user-default), 8 (admin-default), or 2 |
| // (printer-default). |
| @@ -331,7 +347,38 @@ PrintingContext::Result PrintingContextWin::UpdatePrinterSettings( |
| bool print_to_cloud = job_settings.HasKey(printing::kSettingCloudPrintId); |
| if (print_to_pdf || print_to_cloud) { |
| - // Pseudo printer: handle orientation and ranges only. |
| + // Default fallback to Letter size. |
| + gfx::Size paper_size; |
| + gfx::Rect paper_rect; |
| + paper_size.SetSize(kPDFLetterWidth, kPDFLetterHeight); |
| + paper_rect.SetRect(0, 0, kPDFLetterWidth, kPDFLetterHeight); |
| + settings_.SetPrinterPrintableArea(paper_size, paper_rect, kPDFDpi); |
|
kmadhusu
2011/09/28 17:16:10
You want to call SetPrinterPrintableArea() after l
arthurhsu
2011/09/28 17:57:39
Done.
|
| + settings_.set_dpi(kPDFDpi); |
| + |
| + // Get settings from locale. Paper size length at most 4. |
|
kmadhusu
2011/09/28 17:16:10
Paper size length is ambiguous. How about "default
arthurhsu
2011/09/28 17:57:39
paper_type_buffer_len is used instead.
|
| + const int paper_type_count = 4; |
| + wchar_t paper_type_buffer[paper_type_count] = {0}; |
| + GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE, paper_type_buffer, |
| + paper_type_count); |
| + if (wcslen(paper_type_buffer)) { // The call succeeded. |
| + int paper_code = _wtoi(paper_type_buffer); |
| + switch (paper_code) { |
| + case DMPAPER_LEGAL: |
| + paper_size.SetSize(kPDFLegalWidth, kPDFLegalHeight); |
| + paper_rect.SetRect(0, 0, kPDFLegalWidth, kPDFLegalHeight); |
|
kmadhusu
2011/09/28 17:16:10
You can just do the following once rather than cal
arthurhsu
2011/09/28 17:57:39
Done.
|
| + break; |
| + case DMPAPER_A4: |
| + paper_size.SetSize(kPDFA4Width, kPDFA4Height); |
| + paper_rect.SetRect(0, 0, kPDFA4Width, kPDFA4Height); |
| + break; |
| + case DMPAPER_A3: |
| + paper_size.SetSize(kPDFA3Width, kPDFA3Height); |
| + paper_rect.SetRect(0, 0, kPDFA3Width, kPDFA3Height); |
| + break; |
| + default: // DMPAPER_LETTER is used for default fallback. |
| + break; |
| + } |
| + } |
| settings_.SetOrientation(landscape); |
| settings_.ranges = ranges; |
| return OK; |