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

Unified Diff: printing/print_settings_conversion.cc

Issue 329683002: Improvements in --debug-print switch implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Thu 06/12/2014 2:53:06.07 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 | « printing/print_settings_conversion.h ('k') | printing/print_settings_initializer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: printing/print_settings_conversion.cc
diff --git a/printing/print_settings_initializer.cc b/printing/print_settings_conversion.cc
similarity index 40%
rename from printing/print_settings_initializer.cc
rename to printing/print_settings_conversion.cc
index df6a32e40e5a56575e562637e6e021f1a120d56e..2dbb8d91a30466a758359837201d9a86de5ee12b 100644
--- a/printing/print_settings_initializer.cc
+++ b/printing/print_settings_conversion.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "printing/print_settings_initializer.h"
+#include "printing/print_settings_conversion.h"
#include <algorithm>
#include <cmath>
@@ -19,10 +19,59 @@
namespace printing {
-bool PrintSettingsInitializer::InitSettings(
- const base::DictionaryValue& job_settings,
- const PageRanges& ranges,
- PrintSettings* settings) {
+namespace {
+
+void GetCustomMarginsFromJobSettings(const base::DictionaryValue& settings,
+ PageSizeMargins* page_size_margins) {
+ const base::DictionaryValue* custom_margins;
+ if (!settings.GetDictionary(kSettingMarginsCustom, &custom_margins) ||
+ !custom_margins->GetDouble(kSettingMarginTop,
+ &page_size_margins->margin_top) ||
+ !custom_margins->GetDouble(kSettingMarginBottom,
+ &page_size_margins->margin_bottom) ||
+ !custom_margins->GetDouble(kSettingMarginLeft,
+ &page_size_margins->margin_left) ||
+ !custom_margins->GetDouble(kSettingMarginRight,
+ &page_size_margins->margin_right)) {
+ NOTREACHED();
+ }
+}
+
+void SetMarginsToJobSettings(const std::string& json_path,
+ const PageMargins& margins,
+ base::DictionaryValue* job_settings) {
+ base::DictionaryValue* dict = new base::DictionaryValue;
+ job_settings->Set(json_path, dict);
+ dict->SetInteger(kSettingMarginTop, margins.top);
+ dict->SetInteger(kSettingMarginBottom, margins.bottom);
+ dict->SetInteger(kSettingMarginLeft, margins.left);
+ dict->SetInteger(kSettingMarginRight, margins.right);
+}
+
+void SetSizeToJobSettings(const std::string& json_path,
+ const gfx::Size& size,
+ base::DictionaryValue* job_settings) {
+ base::DictionaryValue* dict = new base::DictionaryValue;
+ job_settings->Set(json_path, dict);
+ dict->SetInteger("width", size.width());
+ dict->SetInteger("height", size.height());
+}
+
+void SetRectToJobSettings(const std::string& json_path,
+ const gfx::Rect& rect,
+ base::DictionaryValue* job_settings) {
+ base::DictionaryValue* dict = new base::DictionaryValue;
+ job_settings->Set(json_path, dict);
+ dict->SetInteger("x", rect.x());
+ dict->SetInteger("y", rect.y());
+ dict->SetInteger("width", rect.width());
+ dict->SetInteger("height", rect.height());
+}
+
+} // namespace
+
+bool PrintSettingsFromJobSettings(const base::DictionaryValue& job_settings,
+ PrintSettings* settings) {
bool display_header_footer = false;
if (!job_settings.GetBoolean(kSettingHeaderFooterEnabled,
&display_header_footer)) {
@@ -94,7 +143,28 @@ bool PrintSettingsInitializer::InitSettings(
settings->SetCustomMargins(margins_in_points);
}
- settings->set_ranges(ranges);
+ PageRanges new_ranges;
+ const base::ListValue* page_range_array = NULL;
+ if (job_settings.GetList(kSettingPageRange, &page_range_array)) {
+ for (size_t index = 0; index < page_range_array->GetSize(); ++index) {
+ const base::DictionaryValue* dict;
+ if (!page_range_array->GetDictionary(index, &dict))
+ continue;
+
+ PageRange range;
+ if (!dict->GetInteger(kSettingPageRangeFrom, &range.from) ||
+ !dict->GetInteger(kSettingPageRangeTo, &range.to)) {
+ continue;
+ }
+
+ // Page numbers are 1-based in the dictionary.
+ // Page numbers are 0-based for the printing context.
+ range.from--;
+ range.to--;
+ new_ranges.push_back(range);
+ }
+ }
+ settings->set_ranges(new_ranges);
int color = 0;
bool landscape = false;
@@ -122,4 +192,58 @@ bool PrintSettingsInitializer::InitSettings(
return true;
}
+void PrintSettingsToJobSettingsDebug(const PrintSettings& settings,
+ base::DictionaryValue* job_settings) {
+ job_settings->SetBoolean(kSettingHeaderFooterEnabled,
+ settings.display_header_footer());
+ job_settings->SetString(kSettingHeaderFooterTitle, settings.title());
+ job_settings->SetString(kSettingHeaderFooterURL, settings.url());
+ job_settings->SetBoolean(kSettingShouldPrintBackgrounds,
+ settings.should_print_backgrounds());
+ job_settings->SetBoolean(kSettingShouldPrintSelectionOnly,
+ settings.selection_only());
+ job_settings->SetInteger(kSettingMarginsType, settings.margin_type());
+ if (!settings.ranges().empty()) {
+ base::ListValue* page_range_array = new base::ListValue;
+ job_settings->Set(kSettingPageRange, page_range_array);
+ for (size_t i = 0; i < settings.ranges().size(); ++i) {
+ base::DictionaryValue* dict = new base::DictionaryValue;
+ page_range_array->Append(dict);
+ dict->SetInteger(kSettingPageRangeFrom, settings.ranges()[i].from + 1);
+ dict->SetInteger(kSettingPageRangeTo, settings.ranges()[i].to + 1);
+ }
+ }
+
+ job_settings->SetBoolean(kSettingCollate, settings.collate());
+ job_settings->SetInteger(kSettingCopies, settings.copies());
+ job_settings->SetInteger(kSettingColor, settings.color());
+ job_settings->SetInteger(kSettingDuplexMode, settings.duplex_mode());
+ job_settings->SetBoolean(kSettingLandscape, settings.landscape());
+ job_settings->SetString(kSettingDeviceName, settings.device_name());
+
+ // Following values are not read form JSON by InitSettings, so do not have
+ // common public constants. So just serialize in "debug" section.
+ base::DictionaryValue* debug = new base::DictionaryValue;
+ job_settings->Set("debug", debug);
+ debug->SetDouble("minShrink", settings.min_shrink());
+ debug->SetDouble("maxShrink", settings.max_shrink());
+ debug->SetInteger("desiredDpi", settings.desired_dpi());
+ debug->SetInteger("dpi", settings.dpi());
+ debug->SetInteger("deviceUnitsPerInch", settings.device_units_per_inch());
+ debug->SetBoolean("support_alpha_blend", settings.should_print_backgrounds());
+ debug->SetString("media_vendor_od", settings.requested_media().vendor_id);
+ SetSizeToJobSettings(
+ "media_size", settings.requested_media().size_microns, debug);
+ SetMarginsToJobSettings("requested_custom_margins_in_points",
+ settings.requested_custom_margins_in_points(),
+ debug);
+ const PageSetup& page_setup = settings.page_setup_device_units();
+ SetMarginsToJobSettings(
+ "effective_margins", page_setup.effective_margins(), debug);
+ SetSizeToJobSettings("physical_size", page_setup.physical_size(), debug);
+ SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug);
+ SetRectToJobSettings("content_area", page_setup.content_area(), debug);
+ SetRectToJobSettings("printable_area", page_setup.printable_area(), debug);
+}
+
} // namespace printing
« no previous file with comments | « printing/print_settings_conversion.h ('k') | printing/print_settings_initializer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698