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

Unified Diff: printing/printing_context_mac.mm

Issue 345493003: Apply paper size selection for local printers on OSX. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tue 06/17/2014 23:50:55.73 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: printing/printing_context_mac.mm
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index 8b40da34cd2ebb06354368c2a796a596ece10d4d..f17d17a2815e5aa5bc3fbf09fbfa5347b2cd4734 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -25,13 +25,38 @@ namespace printing {
namespace {
// Return true if PPD name of paper is equal.
-bool IsPaperNameEqual(const PMPaper& paper1, const PMPaper& paper2) {
- CFStringRef name1 = NULL;
+bool IsPaperNameEqual(CFStringRef name1, const PMPaper& paper2) {
CFStringRef name2 = NULL;
- return (PMPaperGetPPDPaperName(paper1, &name1) == noErr) &&
- (PMPaperGetPPDPaperName(paper2, &name2) == noErr) &&
- (CFStringCompare(name1, name2,
- kCFCompareCaseInsensitive) == kCFCompareEqualTo);
+ return (PMPaperGetPPDPaperName(paper2, &name2) == noErr) &&
+ (CFStringCompare(name1, name2, kCFCompareCaseInsensitive) ==
+ kCFCompareEqualTo);
+}
+
+PMPaper MatchPaper(CFArrayRef paper_list,
+ CFStringRef name,
+ double width,
+ double height) {
+ double best_match = std::numeric_limits<double>::max();
+ PMPaper best_matching_paper = kPMNoData;
+ int num_papers = CFArrayGetCount(paper_list);
+ for (int i = 0; i < num_papers; ++i) {
+ PMPaper paper = (PMPaper)[(NSArray*)paper_list objectAtIndex : i];
+ double paper_width = 0.0;
+ double paper_height = 0.0;
+ PMPaperGetWidth(paper, &paper_width);
+ PMPaperGetHeight(paper, &paper_height);
+ double current_match =
+ std::max(fabs(width - paper_width), fabs(height - paper_height));
+ // Ignore paper sizes that are very different.
+ if (current_match > 2)
+ continue;
+ current_match += IsPaperNameEqual(name, paper) ? 0 : 1;
+ if (current_match < best_match) {
+ best_matching_paper = paper;
+ best_match = current_match;
+ }
+ }
+ return best_matching_paper;
}
} // namespace
@@ -229,18 +254,6 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() {
PMPageFormat default_page_format =
static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
- PMPaper default_paper;
- if (PMGetPageFormatPaper(default_page_format, &default_paper) != noErr)
- return false;
-
- double default_page_width = 0.0;
- double default_page_height = 0.0;
- if (PMPaperGetWidth(default_paper, &default_page_width) != noErr)
- return false;
-
- if (PMPaperGetHeight(default_paper, &default_page_height) != noErr)
- return false;
-
PMPrinter current_printer = NULL;
if (PMSessionGetCurrentPrinter(print_session, &current_printer) != noErr)
return false;
@@ -252,45 +265,45 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() {
if (PMPrinterGetPaperList(current_printer, &paper_list) != noErr)
return false;
Aleksey Shlyapnikov 2014/06/18 17:45:02 Move down to the first use.
Vitaly Buka (NO REVIEWS) 2014/06/19 00:39:09 Done.
- double best_match = std::numeric_limits<double>::max();
- PMPaper best_matching_paper = kPMNoData;
- int num_papers = CFArrayGetCount(paper_list);
- for (int i = 0; i < num_papers; ++i) {
- PMPaper paper = (PMPaper)[(NSArray*)paper_list objectAtIndex: i];
- double paper_width = 0.0;
- double paper_height = 0.0;
- PMPaperGetWidth(paper, &paper_width);
- PMPaperGetHeight(paper, &paper_height);
- double current_match = std::max(fabs(default_page_width - paper_width),
- fabs(default_page_height - paper_height));
- // Ignore paper sizes that are very different.
- if (current_match > 2)
- continue;
- current_match += IsPaperNameEqual(paper, default_paper) ? 0 : 1;
- if (current_match < best_match) {
- best_matching_paper = paper;
- best_match = current_match;
+ const PrintSettings::RequestedMedia& media = settings_.requested_media();
+
+ double page_width = 0.0;
+ double page_height = 0.0;
+ CFStringRef paper_name = NULL;
+ PMPaperMargins margins = {0};
+
+ if (media.size_microns.IsEmpty()) {
+ PMPaper default_paper;
+ if (PMGetPageFormatPaper(default_page_format, &default_paper) != noErr ||
+ PMPaperGetPPDPaperName(default_paper, &paper_name) != noErr ||
+ PMPaperGetWidth(default_paper, &page_width) != noErr ||
+ PMPaperGetHeight(default_paper, &page_height) != noErr ||
+ PMPaperGetMargins(default_paper, &margins) != noErr) {
+ return false;
}
+ } else {
+ const double kMutiplier = kPointsPerInch / (10.0f * kHundrethsMMPerInch);
+ page_width = media.size_microns.width() * kMutiplier;
+ page_height = media.size_microns.height() * kMutiplier;
+ paper_name = base::SysUTF8ToCFStringRef(media.vendor_id);
}
+ PMPaper best_matching_paper =
+ MatchPaper(paper_list, paper_name, page_width, page_height);
+
if (best_matching_paper == kPMNoData) {
PMPaper paper = kPMNoData;
- // Create a custom paper for the specified default page size.
- PMPaperMargins default_margins;
- if (PMPaperGetMargins(default_paper, &default_margins) != noErr)
- return false;
-
- const PMPaperMargins margins =
- {default_margins.top, default_margins.left, default_margins.bottom,
- default_margins.right};
CFStringRef paper_id = CFSTR("Custom paper ID");
CFStringRef paper_name = CFSTR("Custom paper");
- if (PMPaperCreateCustom(current_printer, paper_id, paper_name,
- default_page_width, default_page_height, &margins, &paper) !=
- noErr) {
+ if (PMPaperCreateCustom(current_printer,
+ paper_id,
+ paper_name,
+ page_width,
+ page_height,
+ &margins,
+ &paper) != noErr) {
Aleksey Shlyapnikov 2014/06/18 17:45:01 What for paper is created here? It's released on t
Vitaly Buka (NO REVIEWS) 2014/06/19 00:39:08 Done.
return false;
}
- [print_info_.get() updateFromPMPageFormat];
PMRelease(paper);
} else {
PMPageFormat chosen_page_format = NULL;
@@ -308,9 +321,9 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() {
PMRelease(chosen_page_format);
return false;
}
- [print_info_.get() updateFromPMPageFormat];
PMRelease(chosen_page_format);
}
+ [print_info_.get() updateFromPMPageFormat];
return true;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698