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))); |
} |