summaryrefslogtreecommitdiffstats
path: root/chrome/service/cloud_print/cdd_conversion_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/service/cloud_print/cdd_conversion_win.cc')
-rw-r--r--chrome/service/cloud_print/cdd_conversion_win.cc113
1 files changed, 113 insertions, 0 deletions
diff --git a/chrome/service/cloud_print/cdd_conversion_win.cc b/chrome/service/cloud_print/cdd_conversion_win.cc
new file mode 100644
index 0000000..2c7a9a4
--- /dev/null
+++ b/chrome/service/cloud_print/cdd_conversion_win.cc
@@ -0,0 +1,113 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/service/cloud_print/cdd_conversion_win.h"
+
+#include "components/cloud_devices/printer_description.h"
+#include "printing/backend/print_backend.h"
+#include "printing/backend/win_helper.h"
+
+namespace cloud_print {
+
+std::string CapabilitiesToCdd(
+ const printing::PrinterSemanticCapsAndDefaults& semantic_info) {
+ using namespace cloud_devices::printer;
+ cloud_devices::CloudDeviceDescription description;
+
+ ContentTypesCapability content_types;
+ content_types.AddOption("application/pdf");
+ content_types.SaveTo(&description);
+
+ ColorCapability color;
+ if (semantic_info.color_default || semantic_info.color_changeable) {
+ color.AddDefaultOption(Color(STANDARD_COLOR), semantic_info.color_default);
+ }
+
+ if (!semantic_info.color_default || semantic_info.color_changeable) {
+ color.AddDefaultOption(Color(STANDARD_MONOCHROME),
+ !semantic_info.color_default);
+ }
+ color.SaveTo(&description);
+
+ if (semantic_info.duplex_capable) {
+ DuplexCapability duplex;
+ duplex.AddDefaultOption(
+ NO_DUPLEX, semantic_info.duplex_default == printing::SIMPLEX);
+ duplex.AddDefaultOption(
+ LONG_EDGE, semantic_info.duplex_default == printing::LONG_EDGE);
+ duplex.AddDefaultOption(
+ SHORT_EDGE, semantic_info.duplex_default == printing::SHORT_EDGE);
+ duplex.SaveTo(&description);
+ }
+
+ if (!semantic_info.papers.empty()) {
+ Media default_media(semantic_info.default_paper.name,
+ semantic_info.default_paper.size_um.width(),
+ semantic_info.default_paper.size_um.height());
+ default_media.MatchBySize();
+
+ MediaCapability media;
+ bool is_default_set = false;
+ for (size_t i = 0; i < semantic_info.papers.size(); ++i) {
+ gfx::Size paper_size = semantic_info.papers[i].size_um;
+ if (paper_size.width() > paper_size.height())
+ paper_size.SetSize(paper_size.height(), paper_size.width());
+ Media new_media(semantic_info.papers[i].name, paper_size.width(),
+ paper_size.height());
+ new_media.MatchBySize();
+ if (new_media.IsValid() && !media.Contains(new_media)) {
+ if (!default_media.IsValid())
+ default_media = new_media;
+ media.AddDefaultOption(new_media, new_media == default_media);
+ is_default_set = is_default_set || (new_media == default_media);
+ }
+ }
+ if (!is_default_set && default_media.IsValid())
+ media.AddDefaultOption(default_media, true);
+
+ if (media.IsValid()) {
+ media.SaveTo(&description);
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ if (semantic_info.collate_capable) {
+ CollateCapability collate;
+ collate.set_default_value(semantic_info.collate_default);
+ collate.SaveTo(&description);
+ }
+
+ if (semantic_info.copies_capable) {
+ CopiesCapability copies;
+ copies.SaveTo(&description);
+ }
+
+ if (!semantic_info.dpis.empty()) {
+ DpiCapability dpi;
+ Dpi default_dpi(semantic_info.default_dpi.width(),
+ semantic_info.default_dpi.height());
+ bool is_default_set = false;
+ for (size_t i = 0; i < semantic_info.dpis.size(); ++i) {
+ Dpi new_dpi(semantic_info.dpis[i].width(),
+ semantic_info.dpis[i].height());
+ if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) {
+ if (!default_dpi.IsValid())
+ default_dpi = new_dpi;
+ dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi);
+ is_default_set = is_default_set || (new_dpi == default_dpi);
+ }
+ }
+ if (!is_default_set && default_dpi.IsValid())
+ dpi.AddDefaultOption(default_dpi, true);
+ if (dpi.IsValid()) {
+ dpi.SaveTo(&description);
+ } else {
+ NOTREACHED();
+ }
+ }
+ return description.ToString();
+}
+
+} // namespace cloud_print