Chromium Code Reviews| Index: chrome/browser/local_discovery/privet_http_impl.cc |
| diff --git a/chrome/browser/local_discovery/privet_http_impl.cc b/chrome/browser/local_discovery/privet_http_impl.cc |
| index 6ae0e7c81bbfa0408148cd3f17ff4f77589247bc..81feb8b333b524275b7bcb35d0971680e926cbeb 100644 |
| --- a/chrome/browser/local_discovery/privet_http_impl.cc |
| +++ b/chrome/browser/local_discovery/privet_http_impl.cc |
| @@ -16,6 +16,7 @@ |
| #include "chrome/browser/local_discovery/privet_constants.h" |
| #include "components/cloud_devices/printer_description.h" |
| #include "net/base/url_util.h" |
| +#include "printing/bitmap_transform_settings.h" |
| #include "printing/units.h" |
| #include "ui/gfx/text_elider.h" |
| #include "url/gurl.h" |
| @@ -535,6 +536,14 @@ void PrivetLocalPrintOperationImpl::DoCreatejob() { |
| &PrivetLocalPrintOperationImpl::OnCreatejobResponse, |
| base::Unretained(this)); |
| + // Add PWG raster settings to ticket if they are supplied by the printer. |
| + cloud_devices::printer::PwgRasterConfigCapability raster_capability; |
| + cloud_devices::printer::PwgRasterConfigTicketItem raster_ticket_item; |
| + if (raster_capability.LoadFrom(capabilities_)) { |
| + raster_ticket_item.set_value(raster_capability.value()); |
| + raster_ticket_item.SaveTo(&ticket_); |
| + } |
| + |
| url_fetcher_= privet_client_->CreateURLFetcher( |
| CreatePrivetURL(kPrivetCreatejobPath), net::URLFetcher::POST, this); |
| url_fetcher_->SetUploadData(kPrivetContentTypeCJT, ticket_.ToString()); |
| @@ -605,9 +614,61 @@ void PrivetLocalPrintOperationImpl::StartPrinting() { |
| } |
| } |
| +void PrivetLocalPrintOperationImpl::FillBitmapTransformSettings( |
| + printing::BitmapTransformSettings* transform_settings) { |
| + cloud_devices::printer::PwgRasterConfigCapability raster_capability; |
|
Vitaly Buka (NO REVIEWS)
2014/03/26 00:31:12
using namespace cloud_devices::printer;
Noam Samuel
2014/03/26 18:54:29
Done.
|
| + // If the raster capability fails to load, raster_capability will contain |
| + // the default value. |
| + raster_capability.LoadFrom(capabilities_); |
| + |
| + cloud_devices::printer::DuplexTicketItem duplex_item; |
| + cloud_devices::printer::DuplexType duplex_value = |
| + cloud_devices::printer::NO_DUPLEX; |
| + |
| + cloud_devices::printer::DocumentSheetBack document_sheet_back = |
| + raster_capability.value().document_sheet_back; |
| + |
| + if (duplex_item.LoadFrom(ticket_)) { |
| + duplex_value = duplex_item.value(); |
| + } |
| + |
| + transform_settings->odd_page_transform = printing::TRANSFORM_NORMAL; |
| + switch (duplex_value) { |
| + case cloud_devices::printer::NO_DUPLEX: |
| + transform_settings->odd_page_transform = printing::TRANSFORM_NORMAL; |
| + break; |
| + case cloud_devices::printer::LONG_EDGE: |
| + if (document_sheet_back == cloud_devices::printer::ROTATED) { |
| + transform_settings->odd_page_transform = printing::TRANSFORM_ROTATE_180; |
| + } else if (document_sheet_back == cloud_devices::printer::FLIPPED) { |
| + transform_settings->odd_page_transform = |
| + printing::TRANSFORM_FLIP_VERTICAL; |
| + } |
| + break; |
| + case cloud_devices::printer::SHORT_EDGE: |
| + if (document_sheet_back == cloud_devices::printer::MANUAL_TUMBLE) { |
| + transform_settings->odd_page_transform = printing::TRANSFORM_ROTATE_180; |
| + } else if (document_sheet_back == cloud_devices::printer::FLIPPED) { |
| + transform_settings->odd_page_transform = |
| + printing::TRANSFORM_FLIP_HORIZONTAL; |
| + } |
| + } |
| + |
| + transform_settings->rotate_all_pages = |
| + raster_capability.value().rotate_all_pages; |
| + |
| + transform_settings->reverse_page_order = |
| + raster_capability.value().reverse_order_streaming; |
| +} |
| + |
| void PrivetLocalPrintOperationImpl::StartConvertToPWG() { |
| + printing::BitmapTransformSettings transform_settings; |
| + |
| + FillBitmapTransformSettings(&transform_settings); |
| + |
| if (!pwg_raster_converter_) |
| pwg_raster_converter_ = PWGRasterConverter::CreateDefault(); |
| + |
| double scale = dpi_; |
| scale /= printing::kPointsPerInch; |
| // Make vertical rectangle to optimize streaming to printer. Fix orientation |
| @@ -615,7 +676,9 @@ void PrivetLocalPrintOperationImpl::StartConvertToPWG() { |
| gfx::Rect area(std::min(page_size_.width(), page_size_.height()) * scale, |
| std::max(page_size_.width(), page_size_.height()) * scale); |
| pwg_raster_converter_->Start( |
| - data_, printing::PdfRenderSettings(area, dpi_, true), |
| + data_, |
| + printing::PdfRenderSettings(area, dpi_, true), |
| + transform_settings, |
| base::Bind(&PrivetLocalPrintOperationImpl::OnPWGRasterConverted, |
| base::Unretained(this))); |
| } |