summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-04 18:34:29 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-04 18:34:29 +0000
commit4c9054b4d4aad1c2b53e2d893e1928b836fad5f2 (patch)
tree9cd775f2aee0beb7e5fafe526630f123fdec03c1 /printing
parent08eb4c7b2d85c9b669d9864bc28d419fdd5198c1 (diff)
downloadchromium_src-4c9054b4d4aad1c2b53e2d893e1928b836fad5f2.zip
chromium_src-4c9054b4d4aad1c2b53e2d893e1928b836fad5f2.tar.gz
chromium_src-4c9054b4d4aad1c2b53e2d893e1928b836fad5f2.tar.bz2
Move settings setup for PDF and cloud print into single location in PrintingContext.
Hard-code CloudPrint printable area until we start to receive this data from server. BUG=305731 NOTRY=true Review URL: https://codereview.chromium.org/46623002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232741 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing')
-rw-r--r--printing/print_dialog_gtk_interface.h6
-rw-r--r--printing/print_settings.cc6
-rw-r--r--printing/print_settings.h1
-rw-r--r--printing/print_settings_initializer_gtk.cc8
-rw-r--r--printing/print_settings_initializer_mac.cc4
-rw-r--r--printing/print_settings_initializer_win.cc4
-rw-r--r--printing/printing_context.cc26
-rw-r--r--printing/printing_context.h9
-rw-r--r--printing/printing_context_android.h4
-rw-r--r--printing/printing_context_gtk.cc17
-rw-r--r--printing/printing_context_gtk.h4
-rw-r--r--printing/printing_context_mac.h4
-rw-r--r--printing/printing_context_mac.mm30
-rw-r--r--printing/printing_context_no_system_dialog.cc43
-rw-r--r--printing/printing_context_no_system_dialog.h4
-rw-r--r--printing/printing_context_win.cc79
-rw-r--r--printing/printing_context_win.h4
-rw-r--r--printing/units.h21
18 files changed, 160 insertions, 114 deletions
diff --git a/printing/print_dialog_gtk_interface.h b/printing/print_dialog_gtk_interface.h
index 3b3fcdd..e3506dd 100644
--- a/printing/print_dialog_gtk_interface.h
+++ b/printing/print_dialog_gtk_interface.h
@@ -24,11 +24,7 @@ class PrintDialogGtkInterface {
// Updates the dialog to use |settings|. Only used when printing without the
// system print dialog. E.g. for Print Preview. Returns false on error.
- // |target_is_pdf| is true if implementation needs to generate PDF without
- // actual printing. In this case implementation may avoid setup of native
- // print system. Ex. "save to pdf" or Cloud Print.
- virtual bool UpdateSettings(bool target_is_pdf,
- PrintSettings* settings) = 0;
+ virtual bool UpdateSettings(PrintSettings* settings) = 0;
// Shows the dialog and handles the response with |callback|. Only used when
// printing with the native print dialog.
diff --git a/printing/print_settings.cc b/printing/print_settings.cc
index 9e2a251..f2dc425 100644
--- a/printing/print_settings.cc
+++ b/printing/print_settings.cc
@@ -140,10 +140,10 @@ void PrintSettings::Clear() {
}
void PrintSettings::SetPrinterPrintableArea(
- gfx::Size const& physical_size_device_units,
- gfx::Rect const& printable_area_device_units,
- int units_per_inch,
+ const gfx::Size& physical_size_device_units,
+ const gfx::Rect& printable_area_device_units,
bool landscape_needs_flip) {
+ int units_per_inch = device_units_per_inch();
int header_footer_text_height = 0;
if (display_header_footer_) {
// Hard-code text_height = 0.5cm = ~1/5 of inch.
diff --git a/printing/print_settings.h b/printing/print_settings.h
index b80d354..b18d860 100644
--- a/printing/print_settings.h
+++ b/printing/print_settings.h
@@ -48,7 +48,6 @@ class PRINTING_EXPORT PrintSettings {
// to false on those platforms to avoid double flipping.
void SetPrinterPrintableArea(const gfx::Size& physical_size_device_units,
const gfx::Rect& printable_area_device_units,
- int units_per_inch,
bool landscape_needs_flip);
const PageSetup& page_setup_device_units() const {
return page_setup_device_units_;
diff --git a/printing/print_settings_initializer_gtk.cc b/printing/print_settings_initializer_gtk.cc
index 793fdb8..53cb9bb 100644
--- a/printing/print_settings_initializer_gtk.cc
+++ b/printing/print_settings_initializer_gtk.cc
@@ -43,8 +43,8 @@ void PrintSettingsInitializerGtk::InitPrintSettings(
} else {
// Use default values if we cannot get valid values from the print dialog.
dpi = kPixelsPerInch;
- double page_width_in_pixel = 8.5 * dpi;
- double page_height_in_pixel = 11.0 * dpi;
+ double page_width_in_pixel = kLetterWidthInch * dpi;
+ double page_height_in_pixel = kLetterHeightInch * dpi;
physical_size_device_units.SetSize(
static_cast<int>(page_width_in_pixel),
static_cast<int>(page_height_in_pixel));
@@ -67,10 +67,10 @@ void PrintSettingsInitializerGtk::InitPrintSettings(
GtkPageOrientation orientation = gtk_print_settings_get_orientation(settings);
// Set before SetPrinterPrintableArea to make it flip area if necessary.
print_settings->SetOrientation(orientation == GTK_PAGE_ORIENTATION_LANDSCAPE);
-
+ DCHECK_EQ(print_settings->device_units_per_inch(), dpi);
print_settings->SetPrinterPrintableArea(physical_size_device_units,
printable_area_device_units,
- dpi, true);
+ true);
}
const double PrintSettingsInitializerGtk::kTopMarginInInch = 0.25;
diff --git a/printing/print_settings_initializer_mac.cc b/printing/print_settings_initializer_mac.cc
index 9333ec9..7dc41a6 100644
--- a/printing/print_settings_initializer_mac.cc
+++ b/printing/print_settings_initializer_mac.cc
@@ -6,6 +6,7 @@
#include "base/strings/sys_string_conversions.h"
#include "printing/print_settings.h"
+#include "printing/units.h"
namespace printing {
@@ -54,9 +55,10 @@ void PrintSettingsInitializerMac::InitPrintSettings(
(page_rect.right - page_rect.left),
(page_rect.bottom - page_rect.top));
+ DCHECK_EQ(print_settings->device_units_per_inch(), kPointsPerInch);
print_settings->SetPrinterPrintableArea(physical_size_device_units,
printable_area_device_units,
- 72, false);
+ false);
}
} // namespace printing
diff --git a/printing/print_settings_initializer_win.cc b/printing/print_settings_initializer_win.cc
index ef46f8d..c10562b 100644
--- a/printing/print_settings_initializer_win.cc
+++ b/printing/print_settings_initializer_win.cc
@@ -48,10 +48,10 @@ void PrintSettingsInitializerWin::InitPrintSettings(
printable_area_device_units)) {
printable_area_device_units = gfx::Rect(physical_size_device_units);
}
-
+ DCHECK_EQ(print_settings->device_units_per_inch(), dpi);
print_settings->SetPrinterPrintableArea(physical_size_device_units,
printable_area_device_units,
- dpi, false);
+ false);
}
} // namespace printing
diff --git a/printing/printing_context.cc b/printing/printing_context.cc
index 9b3b8ae..40342e9 100644
--- a/printing/printing_context.cc
+++ b/printing/printing_context.cc
@@ -9,9 +9,14 @@
#include "printing/page_setup.h"
#include "printing/page_size_margins.h"
#include "printing/print_settings_initializer.h"
+#include "printing/units.h"
namespace printing {
+namespace {
+const float kCloudPrintMarginInch = 0.25;
+}
+
PrintingContext::PrintingContext(const std::string& app_locale)
: dialog_box_dismissed_(false),
in_print_job_(false),
@@ -66,9 +71,24 @@ PrintingContext::Result PrintingContext::UpdatePrintSettings(
bool open_in_external_preview =
job_settings.HasKey(kSettingOpenPDFInPreview);
- return UpdatePrinterSettings(
- print_to_pdf || is_cloud_dialog || print_to_cloud,
- open_in_external_preview);
+ if (!open_in_external_preview &&
+ (print_to_pdf || print_to_cloud || is_cloud_dialog)) {
+ settings_.set_dpi(kDefaultPdfDpi);
+ // Cloud print should get size and rect from capabilities received from
+ // server.
+ gfx::Size paper_size(GetPdfPaperSizeDeviceUnits());
+ gfx::Rect paper_rect(0, 0, paper_size.width(), paper_size.height());
+ if (print_to_cloud) {
+ paper_rect.Inset(
+ kCloudPrintMarginInch * settings_.device_units_per_inch(),
+ kCloudPrintMarginInch * settings_.device_units_per_inch());
+ }
+ DCHECK_EQ(settings_.device_units_per_inch(), kDefaultPdfDpi);
+ settings_.SetPrinterPrintableArea(paper_size, paper_rect, true);
+ return OK;
+ }
+
+ return UpdatePrinterSettings(open_in_external_preview);
}
} // namespace printing
diff --git a/printing/printing_context.h b/printing/printing_context.h
index 7fa90d2..7a0a8c8 100644
--- a/printing/printing_context.h
+++ b/printing/printing_context.h
@@ -51,14 +51,13 @@ class PRINTING_EXPORT PrintingContext {
// default device settings.
virtual Result UseDefaultSettings() = 0;
+ // Returns paper size to be used for PDF or Cloud Print in device units.
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() = 0;
+
// Updates printer settings.
- // |target_is_pdf| is true if implementation needs to generate PDF without
- // actual printing. In this case implementation may avoid setup of native
- // print system. Ex. "save to pdf" or Cloud Print.
// |external_preview| is true if pdf is going to be opened in external
// preview. Used by MacOS only now to open Preview.app.
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) = 0;
+ virtual Result UpdatePrinterSettings(bool external_preview) = 0;
// Updates Print Settings. |job_settings| contains all print job
// settings information. |ranges| has the new page range settings.
diff --git a/printing/printing_context_android.h b/printing/printing_context_android.h
index 67d68eb..b198e7b 100644
--- a/printing/printing_context_android.h
+++ b/printing/printing_context_android.h
@@ -37,8 +37,8 @@ class PRINTING_EXPORT PrintingContextAndroid : public PrintingContext {
bool has_selection,
const PrintSettingsCallback& callback) OVERRIDE;
virtual Result UseDefaultSettings() OVERRIDE;
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) OVERRIDE;
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
+ virtual Result UpdatePrinterSettings(bool external_preview) OVERRIDE;
virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
virtual Result NewPage() OVERRIDE;
diff --git a/printing/printing_context_gtk.cc b/printing/printing_context_gtk.cc
index 6cf0015..d757df7 100644
--- a/printing/printing_context_gtk.cc
+++ b/printing/printing_context_gtk.cc
@@ -78,8 +78,21 @@ PrintingContext::Result PrintingContextGtk::UseDefaultSettings() {
return OK;
}
+gfx::Size PrintingContextGtk::GetPdfPaperSizeDeviceUnits() {
+ GtkPageSetup* page_setup = gtk_page_setup_new();
+
+ gfx::SizeF paper_size(
+ gtk_page_setup_get_paper_width(page_setup, GTK_UNIT_INCH),
+ gtk_page_setup_get_paper_height(page_setup, GTK_UNIT_INCH));
+
+ g_object_unref(page_setup);
+
+ return gfx::Size(
+ paper_size.width() * settings_.device_units_per_inch(),
+ paper_size.height() * settings_.device_units_per_inch());
+}
+
PrintingContext::Result PrintingContextGtk::UpdatePrinterSettings(
- bool target_is_pdf,
bool external_preview) {
DCHECK(!in_print_job_);
DCHECK(!external_preview) << "Not implemented";
@@ -89,7 +102,7 @@ PrintingContext::Result PrintingContextGtk::UpdatePrinterSettings(
print_dialog_->AddRefToDialog();
}
- if (!print_dialog_->UpdateSettings(target_is_pdf, &settings_))
+ if (!print_dialog_->UpdateSettings(&settings_))
return OnError();
return OK;
diff --git a/printing/printing_context_gtk.h b/printing/printing_context_gtk.h
index 1977893..8476bfb 100644
--- a/printing/printing_context_gtk.h
+++ b/printing/printing_context_gtk.h
@@ -37,9 +37,9 @@ class PRINTING_EXPORT PrintingContextGtk : public PrintingContext {
int max_pages,
bool has_selection,
const PrintSettingsCallback& callback) OVERRIDE;
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
virtual Result UseDefaultSettings() OVERRIDE;
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) OVERRIDE;
+ virtual Result UpdatePrinterSettings(bool external_preview) OVERRIDE;
virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
virtual Result NewPage() OVERRIDE;
diff --git a/printing/printing_context_mac.h b/printing/printing_context_mac.h
index 8e7e510..9257510 100644
--- a/printing/printing_context_mac.h
+++ b/printing/printing_context_mac.h
@@ -31,8 +31,8 @@ class PRINTING_EXPORT PrintingContextMac : public PrintingContext {
bool has_selection,
const PrintSettingsCallback& callback) OVERRIDE;
virtual Result UseDefaultSettings() OVERRIDE;
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) OVERRIDE;
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
+ virtual Result UpdatePrinterSettings(bool external_preview) OVERRIDE;
virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
virtual Result NewPage() OVERRIDE;
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index 9ed31dd..d91ce6f 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -18,6 +18,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "printing/print_settings_initializer_mac.h"
+#include "printing/units.h"
namespace printing {
@@ -106,6 +107,25 @@ void PrintingContextMac::AskUserForSettings(
}
}
+gfx::Size PrintingContextMac::GetPdfPaperSizeDeviceUnits() {
+ // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start
+ // with a clean slate.
+ print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
+ UpdatePageFormatWithPaperInfo();
+
+ PMPageFormat page_format =
+ static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ PMRect paper_rect;
+ PMGetAdjustedPaperRect(page_format, &paper_rect);
+
+ // Device units are in points. Units per inch is 72.
+ gfx::Size physical_size_device_units(
+ (paper_rect.right - paper_rect.left),
+ (paper_rect.bottom - paper_rect.top));
+ DCHECK(settings_.device_units_per_inch() == kPointsPerInch);
+ return physical_size_device_units;
+}
+
PrintingContext::Result PrintingContextMac::UseDefaultSettings() {
DCHECK(!in_print_job_);
@@ -117,7 +137,6 @@ PrintingContext::Result PrintingContextMac::UseDefaultSettings() {
}
PrintingContext::Result PrintingContextMac::UpdatePrinterSettings(
- bool target_is_pdf,
bool external_preview) {
DCHECK(!in_print_job_);
@@ -125,7 +144,11 @@ PrintingContext::Result PrintingContextMac::UpdatePrinterSettings(
// with a clean slate.
print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
- if (!target_is_pdf) {
+ if (external_preview) {
+ if (!SetPrintPreviewJob())
+ return OnError();
+ } else {
+ // Don't need this for preview.
if (!SetPrinter(UTF16ToUTF8(settings_.device_name())) ||
!SetCopiesInPrintSettings(settings_.copies()) ||
!SetCollateInPrintSettings(settings_.collate()) ||
@@ -135,8 +158,7 @@ PrintingContext::Result PrintingContextMac::UpdatePrinterSettings(
}
}
- if ((external_preview && !SetPrintPreviewJob()) ||
- !UpdatePageFormatWithPaperInfo() ||
+ if (!UpdatePageFormatWithPaperInfo() ||
!SetOrientationIsLandscape(settings_.landscape())) {
return OnError();
}
diff --git a/printing/printing_context_no_system_dialog.cc b/printing/printing_context_no_system_dialog.cc
index 869620f..4768e4d 100644
--- a/printing/printing_context_no_system_dialog.cc
+++ b/printing/printing_context_no_system_dialog.cc
@@ -41,13 +41,16 @@ PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() {
DCHECK(!in_print_job_);
ResetSettings();
- // TODO(abodenha): Fetch these settings from the OS where possible. See
- // bug 102583.
- // TODO(sanjeevr): We need a better feedback loop between the cloud print
- // dialog and this code.
- int dpi = 300;
- gfx::Size physical_size_device_units;
- gfx::Rect printable_area_device_units;
+ settings_.set_dpi(kDefaultPdfDpi);
+ gfx::Size physical_size = GetPdfPaperSizeDeviceUnits();
+ // Assume full page is printable for now.
+ gfx::Rect printable_area(0, 0, physical_size.width(), physical_size.height());
+ DCHECK_EQ(settings_.device_units_per_inch(), kDefaultPdfDpi);
+ settings_.SetPrinterPrintableArea(physical_size, printable_area, true);
+ return OK;
+}
+
+gfx::Size PrintingContextNoSystemDialog::GetPdfPaperSizeDeviceUnits() {
int32_t width = 0;
int32_t height = 0;
UErrorCode error = U_ZERO_ERROR;
@@ -56,30 +59,22 @@ PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() {
// If the call failed, assume a paper size of 8.5 x 11 inches.
LOG(WARNING) << "ulocdata_getPaperSize failed, using 8.5 x 11, error: "
<< error;
- width = static_cast<int>(8.5 * dpi);
- height = static_cast<int>(11 * dpi);
+ width = static_cast<int>(
+ kLetterWidthInch * settings_.device_units_per_inch());
+ height = static_cast<int>(
+ kLetterHeightInch * settings_.device_units_per_inch());
} else {
// ulocdata_getPaperSize returns the width and height in mm.
// Convert this to pixels based on the dpi.
- width = static_cast<int>(ConvertUnitDouble(width, 25.4, 1.0) * dpi);
- height = static_cast<int>(ConvertUnitDouble(height, 25.4, 1.0) * dpi);
+ float multiplier = 100 * settings_.device_units_per_inch();
+ multiplier /= kHundrethsMMPerInch;
+ width *= multiplier;
+ height *= multiplier;
}
-
- physical_size_device_units.SetSize(width, height);
-
- // Assume full page is printable for now.
- printable_area_device_units.SetRect(0, 0, width, height);
-
- settings_.set_dpi(dpi);
- settings_.SetPrinterPrintableArea(physical_size_device_units,
- printable_area_device_units,
- dpi, true);
-
- return OK;
+ return gfx::Size(width, height);
}
PrintingContext::Result PrintingContextNoSystemDialog::UpdatePrinterSettings(
- bool target_is_pdf,
bool external_preview) {
if (settings_.dpi() == 0)
diff --git a/printing/printing_context_no_system_dialog.h b/printing/printing_context_no_system_dialog.h
index f45fb46..5472a81 100644
--- a/printing/printing_context_no_system_dialog.h
+++ b/printing/printing_context_no_system_dialog.h
@@ -27,8 +27,8 @@ class PRINTING_EXPORT PrintingContextNoSystemDialog : public PrintingContext {
bool has_selection,
const PrintSettingsCallback& callback) OVERRIDE;
virtual Result UseDefaultSettings() OVERRIDE;
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) OVERRIDE;
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
+ virtual Result UpdatePrinterSettings(bool external_preview) OVERRIDE;
virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
virtual Result NewPage() OVERRIDE;
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index 9de7cdb..76d96bf 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -36,21 +36,6 @@ 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;
-
HWND GetRootWindow(gfx::NativeView view) {
HWND window = NULL;
#if defined(USE_AURA)
@@ -307,45 +292,41 @@ PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
return FAILED;
}
+gfx::Size PrintingContextWin::GetPdfPaperSizeDeviceUnits() {
+ // Default fallback to Letter size.
+ gfx::SizeF paper_size(kLetterWidthInch, kLetterHeightInch);
+
+ // Get settings from locale. Paper type buffer length is at most 4.
+ const int paper_type_buffer_len = 4;
+ wchar_t paper_type_buffer[paper_type_buffer_len] = {0};
+ GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE, paper_type_buffer,
+ paper_type_buffer_len);
+ if (wcslen(paper_type_buffer)) { // The call succeeded.
+ int paper_code = _wtoi(paper_type_buffer);
+ switch (paper_code) {
+ case DMPAPER_LEGAL:
+ paper_size.SetSize(kLegalWidthInch, kLegalHeightInch);
+ break;
+ case DMPAPER_A4:
+ paper_size.SetSize(kA4WidthInch, kA4HeightInch);
+ break;
+ case DMPAPER_A3:
+ paper_size.SetSize(kA3WidthInch, kA3HeightInch);
+ break;
+ default: // DMPAPER_LETTER is used for default fallback.
+ break;
+ }
+ }
+ return gfx::Size(
+ paper_size.width() * settings_.device_units_per_inch(),
+ paper_size.height() * settings_.device_units_per_inch());
+}
+
PrintingContext::Result PrintingContextWin::UpdatePrinterSettings(
- bool target_is_pdf,
bool external_preview) {
DCHECK(!in_print_job_);
DCHECK(!external_preview) << "Not implemented";
- if (target_is_pdf) {
- // Default fallback to Letter size.
- gfx::Size paper_size;
- gfx::Rect paper_rect;
- paper_size.SetSize(kPDFLetterWidth, kPDFLetterHeight);
-
- // Get settings from locale. Paper type buffer length is at most 4.
- const int paper_type_buffer_len = 4;
- wchar_t paper_type_buffer[paper_type_buffer_len] = {0};
- GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE, paper_type_buffer,
- paper_type_buffer_len);
- 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);
- break;
- case DMPAPER_A4:
- paper_size.SetSize(kPDFA4Width, kPDFA4Height);
- break;
- case DMPAPER_A3:
- paper_size.SetSize(kPDFA3Width, kPDFA3Height);
- break;
- default: // DMPAPER_LETTER is used for default fallback.
- break;
- }
- }
- paper_rect.SetRect(0, 0, paper_size.width(), paper_size.height());
- settings_.SetPrinterPrintableArea(paper_size, paper_rect, kPDFDpi, true);
- settings_.set_dpi(kPDFDpi);
- return OK;
- }
-
ScopedPrinterHandle printer;
LPWSTR device_name_wide =
const_cast<wchar_t*>(settings_.device_name().c_str());
diff --git a/printing/printing_context_win.h b/printing/printing_context_win.h
index 37e5b04..3be4917 100644
--- a/printing/printing_context_win.h
+++ b/printing/printing_context_win.h
@@ -32,8 +32,8 @@ class PRINTING_EXPORT PrintingContextWin
bool has_selection,
const PrintSettingsCallback& callback) OVERRIDE;
virtual Result UseDefaultSettings() OVERRIDE;
- virtual Result UpdatePrinterSettings(bool target_is_pdf,
- bool external_preview) OVERRIDE;
+ virtual gfx::Size GetPdfPaperSizeDeviceUnits() OVERRIDE;
+ virtual Result UpdatePrinterSettings(bool external_preview) OVERRIDE;
virtual Result InitWithSettings(const PrintSettings& settings) OVERRIDE;
virtual Result NewDocument(const base::string16& document_name) OVERRIDE;
virtual Result NewPage() OVERRIDE;
diff --git a/printing/units.h b/printing/units.h
index 8f02832..0e6cfd2 100644
--- a/printing/units.h
+++ b/printing/units.h
@@ -9,7 +9,7 @@
namespace printing {
-// Length of a thousanth of inches in 0.01mm unit.
+// Length of a thousandth of inches in 0.01mm unit.
const int kHundrethsMMPerInch = 2540;
// Length of an inch in CSS's 1pt unit.
@@ -20,6 +20,25 @@ const int kPointsPerInch = 72;
// http://dev.w3.org/csswg/css3-values/#the-px-unit
const int kPixelsPerInch = 96;
+// Dpi used to save to PDF or Cloud Print.
+const int kDefaultPdfDpi = 300;
+
+// LETTER: 8.5 x 11 inches
+const float kLetterWidthInch = 8.5f;
+const float kLetterHeightInch = 11.0f;
+
+// LEGAL: 8.5 x 14 inches
+const float kLegalWidthInch = 8.5f;
+const float kLegalHeightInch = 14.0f;
+
+// A4: 8.27 x 11.69 inches
+const float kA4WidthInch = 8.27f;
+const float kA4HeightInch = 11.69f;
+
+// A3: 11.69 x 16.54 inches
+const float kA3WidthInch = 11.69f;
+const float kA3HeightInch = 16.54f;
+
// Converts from one unit system to another using integer arithmetics.
PRINTING_EXPORT int ConvertUnit(int value, int old_unit, int new_unit);