Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: chrome/service/cloud_print/cdd_conversion_win.cc

Issue 313723002: Convert local printer capabilites to CDD format to unify with cloud printers and PDF printer. This … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix clang reported errors. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/service/cloud_print/cdd_conversion_win.h" 5 #include "chrome/service/cloud_print/cdd_conversion_win.h"
6 6
7 #include "components/cloud_devices/common/printer_description.h" 7 #include "components/cloud_devices/common/printer_description.h"
8 #include "printing/backend/print_backend.h"
9 #include "printing/backend/win_helper.h" 8 #include "printing/backend/win_helper.h"
10 9
11 namespace cloud_print { 10 namespace cloud_print {
12 11
13 bool IsValidCjt(const std::string& print_ticket_data) { 12 bool IsValidCjt(const std::string& print_ticket_data) {
14 cloud_devices::CloudDeviceDescription description; 13 cloud_devices::CloudDeviceDescription description;
15 return description.InitFromString(print_ticket_data); 14 return description.InitFromString(print_ticket_data);
16 } 15 }
17 16
18 scoped_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode( 17 scoped_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 117 }
119 if (height > 0) { 118 if (height > 0) {
120 dev_mode->dmFields |= DM_PAPERLENGTH; 119 dev_mode->dmFields |= DM_PAPERLENGTH;
121 dev_mode->dmPaperLength = height; 120 dev_mode->dmPaperLength = height;
122 } 121 }
123 } 122 }
124 123
125 return printing::CreateDevMode(printer, dev_mode.get()); 124 return printing::CreateDevMode(printer, dev_mode.get());
126 } 125 }
127 126
128 std::string CapabilitiesToCdd(
129 const printing::PrinterSemanticCapsAndDefaults& semantic_info) {
130 using namespace cloud_devices::printer;
131 cloud_devices::CloudDeviceDescription description;
132
133 ContentTypesCapability content_types;
134 content_types.AddOption("application/pdf");
135 content_types.SaveTo(&description);
136
137 ColorCapability color;
138 if (semantic_info.color_default || semantic_info.color_changeable) {
139 color.AddDefaultOption(Color(STANDARD_COLOR), semantic_info.color_default);
140 }
141
142 if (!semantic_info.color_default || semantic_info.color_changeable) {
143 color.AddDefaultOption(Color(STANDARD_MONOCHROME),
144 !semantic_info.color_default);
145 }
146 color.SaveTo(&description);
147
148 if (semantic_info.duplex_capable) {
149 DuplexCapability duplex;
150 duplex.AddDefaultOption(
151 NO_DUPLEX, semantic_info.duplex_default == printing::SIMPLEX);
152 duplex.AddDefaultOption(
153 LONG_EDGE, semantic_info.duplex_default == printing::LONG_EDGE);
154 duplex.AddDefaultOption(
155 SHORT_EDGE, semantic_info.duplex_default == printing::SHORT_EDGE);
156 duplex.SaveTo(&description);
157 }
158
159 if (!semantic_info.papers.empty()) {
160 Media default_media(semantic_info.default_paper.name,
161 semantic_info.default_paper.size_um.width(),
162 semantic_info.default_paper.size_um.height());
163 default_media.MatchBySize();
164
165 MediaCapability media;
166 bool is_default_set = false;
167 for (size_t i = 0; i < semantic_info.papers.size(); ++i) {
168 gfx::Size paper_size = semantic_info.papers[i].size_um;
169 if (paper_size.width() > paper_size.height())
170 paper_size.SetSize(paper_size.height(), paper_size.width());
171 Media new_media(semantic_info.papers[i].name, paper_size.width(),
172 paper_size.height());
173 new_media.MatchBySize();
174 if (new_media.IsValid() && !media.Contains(new_media)) {
175 if (!default_media.IsValid())
176 default_media = new_media;
177 media.AddDefaultOption(new_media, new_media == default_media);
178 is_default_set = is_default_set || (new_media == default_media);
179 }
180 }
181 if (!is_default_set && default_media.IsValid())
182 media.AddDefaultOption(default_media, true);
183
184 if (media.IsValid()) {
185 media.SaveTo(&description);
186 } else {
187 NOTREACHED();
188 }
189 }
190
191 if (semantic_info.collate_capable) {
192 CollateCapability collate;
193 collate.set_default_value(semantic_info.collate_default);
194 collate.SaveTo(&description);
195 }
196
197 if (semantic_info.copies_capable) {
198 CopiesCapability copies;
199 copies.SaveTo(&description);
200 }
201
202 if (!semantic_info.dpis.empty()) {
203 DpiCapability dpi;
204 Dpi default_dpi(semantic_info.default_dpi.width(),
205 semantic_info.default_dpi.height());
206 bool is_default_set = false;
207 for (size_t i = 0; i < semantic_info.dpis.size(); ++i) {
208 Dpi new_dpi(semantic_info.dpis[i].width(),
209 semantic_info.dpis[i].height());
210 if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) {
211 if (!default_dpi.IsValid())
212 default_dpi = new_dpi;
213 dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi);
214 is_default_set = is_default_set || (new_dpi == default_dpi);
215 }
216 }
217 if (!is_default_set && default_dpi.IsValid())
218 dpi.AddDefaultOption(default_dpi, true);
219 if (dpi.IsValid()) {
220 dpi.SaveTo(&description);
221 } else {
222 NOTREACHED();
223 }
224 }
225
226 OrientationCapability orientation;
227 orientation.AddDefaultOption(PORTRAIT, true);
228 orientation.AddOption(LANDSCAPE);
229 orientation.AddOption(AUTO_ORIENTATION);
230 orientation.SaveTo(&description);
231
232 return description.ToString();
233 }
234
235 } // namespace cloud_print 127 } // namespace cloud_print
OLDNEW
« no previous file with comments | « chrome/service/cloud_print/cdd_conversion_win.h ('k') | chrome/service/cloud_print/print_system_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698