Chromium Code Reviews| Index: printing/print_settings_initializer_win.cc |
| diff --git a/printing/print_settings_initializer_win.cc b/printing/print_settings_initializer_win.cc |
| index c10562b86c5854284da58a7cc0bae93723ff1857..9c3727e73768daf539cd42e36eeb08fecec4bf71 100644 |
| --- a/printing/print_settings_initializer_win.cc |
| +++ b/printing/print_settings_initializer_win.cc |
| @@ -10,6 +10,31 @@ |
| namespace printing { |
| +namespace { |
| + |
| +bool IsPrinterXPS(HDC hdc) { |
| + int device_type = ::GetDeviceCaps(hdc, TECHNOLOGY); |
| + if (device_type != DT_RASPRINTER) |
| + return false; |
| + |
| + const int escape = GETTECHNOLOGY; |
|
scottmg
2016/10/05 23:21:40
nit; DWORD since that's what the docs say.
https:
Lei Zhang
2016/10/05 23:37:56
Done.
|
| + const char* escape_ptr = reinterpret_cast<const char*>(&escape); |
| + int ret = |
| + ExtEscape(hdc, QUERYESCSUPPORT, sizeof(escape), escape_ptr, 0, nullptr); |
| + if (ret <= 0) |
| + return false; |
| + |
| + char buffer[256] = {'\0'}; |
| + ret = ExtEscape(hdc, GETTECHNOLOGY, 0, nullptr, sizeof(buffer), buffer); |
| + if (ret <= 0) |
| + return false; |
| + |
| + static const char kXPSDriver[] = "http://schemas.microsoft.com/xps/2005/06"; |
| + return strcmp(buffer, kXPSDriver) == 0; |
| +} |
| + |
| +} // namespace |
| + |
| // static |
| void PrintSettingsInitializerWin::InitPrintSettings( |
| HDC hdc, |
| @@ -17,23 +42,26 @@ void PrintSettingsInitializerWin::InitPrintSettings( |
| PrintSettings* print_settings) { |
| DCHECK(hdc); |
| DCHECK(print_settings); |
| + |
| print_settings->SetOrientation(dev_mode.dmOrientation == DMORIENT_LANDSCAPE); |
| int dpi = GetDeviceCaps(hdc, LOGPIXELSX); |
| print_settings->set_dpi(dpi); |
| + |
| const int kAlphaCaps = SB_CONST_ALPHA | SB_PIXEL_ALPHA; |
| print_settings->set_supports_alpha_blend( |
| (GetDeviceCaps(hdc, SHADEBLENDCAPS) & kAlphaCaps) == kAlphaCaps); |
| + |
| // No printer device is known to advertise different dpi in X and Y axis; even |
| // the fax device using the 200x100 dpi setting. It's ought to break so many |
| - // applications that it's not even needed to care about. WebKit doesn't |
| - // support different dpi settings in X and Y axis. |
| + // applications that it's not even needed to care about. Blink doesn't support |
| + // different dpi settings in X and Y axis. |
| DCHECK_EQ(dpi, GetDeviceCaps(hdc, LOGPIXELSY)); |
| DCHECK_EQ(GetDeviceCaps(hdc, SCALINGFACTORX), 0); |
| DCHECK_EQ(GetDeviceCaps(hdc, SCALINGFACTORY), 0); |
| - // Initialize page_setup_device_units_. |
| + // Initialize |page_setup_device_units_|. |
| gfx::Size physical_size_device_units(GetDeviceCaps(hdc, PHYSICALWIDTH), |
| GetDeviceCaps(hdc, PHYSICALHEIGHT)); |
| gfx::Rect printable_area_device_units(GetDeviceCaps(hdc, PHYSICALOFFSETX), |
| @@ -52,6 +80,8 @@ void PrintSettingsInitializerWin::InitPrintSettings( |
| print_settings->SetPrinterPrintableArea(physical_size_device_units, |
| printable_area_device_units, |
| false); |
| + |
| + print_settings->set_printer_is_xps(IsPrinterXPS(hdc)); |
| } |
| } // namespace printing |