Use DPI from Print Preview on Windows, handle non square
- On Windows, use DPI set in print preview to set the printer DPI. Print
preview DPI was previously only used for extension/cloud printers.
- Fix handling of non-square DPI - use x and y DPI to compute the
correct page size to report from the printer instead of assuming
both resolutions are the same when computing page size. Assuming both
are identical results in incorrect page sizes for non square DPI.
- Note that we have to use only 1 DPI for rendering in both
dimensions, this CL just fixes the bad page size behavior.
BUG=648774
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation
Review-Url: https://codereview.chromium.org/2795453002
Cr-Commit-Position: refs/heads/master@{#461799}
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index 1a54439..5cd5c99 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -188,6 +188,15 @@
dev_mode->dmOrientation = settings_.landscape() ? DMORIENT_LANDSCAPE :
DMORIENT_PORTRAIT;
+ if (settings_.dpi_horizontal() > 0) {
+ dev_mode->dmPrintQuality = settings_.dpi_horizontal();
+ dev_mode->dmFields |= DM_PRINTQUALITY;
+ }
+ if (settings_.dpi_vertical() > 0) {
+ dev_mode->dmYResolution = settings_.dpi_vertical();
+ dev_mode->dmFields |= DM_YRESOLUTION;
+ }
+
const PrintSettings::RequestedMedia& requested_media =
settings_.requested_media();
static const int kFromUm = 100; // Windows uses 0.1mm.