Commit 72ddef97 authored by alekseys@chromium.org's avatar alekseys@chromium.org

Changes in printer settings:

* add vendor id and custom display name to media selection
* propagate selected media size in PrintSettings Related 
Сhanges in JS:
* Use media custom diaply name received from the native layer 
* Make sure media size selection is propagated to the native layer

BUG=239879
NOTRY=true

Review URL: https://codereview.chromium.org/325313003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276578 0039d316-1c4b-4281-b951-d872f2087c98
parent d60aa1c6
...@@ -210,7 +210,10 @@ cr.define('print_preview', function() { ...@@ -210,7 +210,10 @@ cr.define('print_preview', function() {
'NA_LEDGER': 'Tabloid' 'NA_LEDGER': 'Tabloid'
}; };
for (var i = 0, media; media = mediaSize.option[i]; i++) { for (var i = 0, media; media = mediaSize.option[i]; i++) {
media.custom_display_name = mediaDisplayNames[media.name] || media.name; media.custom_display_name =
media.custom_display_name ||
mediaDisplayNames[media.name] ||
media.name;
} }
} }
return capabilities; return capabilities;
......
...@@ -277,6 +277,7 @@ cr.define('print_preview', function() { ...@@ -277,6 +277,7 @@ cr.define('print_preview', function() {
var ticket = { var ticket = {
'pageRange': printTicketStore.pageRange.getDocumentPageRanges(), 'pageRange': printTicketStore.pageRange.getDocumentPageRanges(),
'mediaSize': printTicketStore.mediaSize.getValue(),
'pageCount': printTicketStore.pageRange.getPageNumberSet().size, 'pageCount': printTicketStore.pageRange.getPageNumberSet().size,
'landscape': printTicketStore.landscape.getValue(), 'landscape': printTicketStore.landscape.getValue(),
'color': this.getNativeColorModel_(destination, printTicketStore.color), 'color': this.getNativeColorModel_(destination, printTicketStore.color),
......
...@@ -77,16 +77,17 @@ cr.define('print_preview', function() { ...@@ -77,16 +77,17 @@ cr.define('print_preview', function() {
indexToSelect = index; indexToSelect = index;
} }
}); });
} else { }
var valueToSelect = JSON.stringify(this.ticketItem_.getValue()); // Try to select current ticket item.
for (var i = 0, option; option = select.options[i]; i++) { var valueToSelect = JSON.stringify(this.ticketItem_.getValue());
if (option.value == valueToSelect) { for (var i = 0, option; option = select.options[i]; i++) {
indexToSelect = i; if (option.value == valueToSelect) {
break; indexToSelect = i;
} break;
} }
} }
select.selectedIndex = indexToSelect; select.selectedIndex = indexToSelect;
this.onSelectChange_();
}, },
/** /**
......
...@@ -330,7 +330,7 @@ scoped_ptr<base::DictionaryValue> GetPdfCapabilitiesOnFileThread( ...@@ -330,7 +330,7 @@ scoped_ptr<base::DictionaryValue> GetPdfCapabilitiesOnFileThread(
}; };
const gfx::Size default_media_size = GetDefaultPdfMediaSizeMicrons(); const gfx::Size default_media_size = GetDefaultPdfMediaSizeMicrons();
Media default_media( Media default_media(
"", default_media_size.width(), default_media_size.height()); "", "", default_media_size.width(), default_media_size.height());
if (!default_media.MatchBySize() || if (!default_media.MatchBySize() ||
std::find(kPdfMedia, std::find(kPdfMedia,
kPdfMedia + arraysize(kPdfMedia), kPdfMedia + arraysize(kPdfMedia),
......
...@@ -54,9 +54,9 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd( ...@@ -54,9 +54,9 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd(
} }
color.SaveTo(&description); color.SaveTo(&description);
#if defined(OS_WIN)
if (!semantic_info.papers.empty()) { if (!semantic_info.papers.empty()) {
Media default_media(semantic_info.default_paper.name, Media default_media(semantic_info.default_paper.name,
"",
semantic_info.default_paper.size_um.width(), semantic_info.default_paper.size_um.width(),
semantic_info.default_paper.size_um.height()); semantic_info.default_paper.size_um.height());
default_media.MatchBySize(); default_media.MatchBySize();
...@@ -67,7 +67,9 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd( ...@@ -67,7 +67,9 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd(
gfx::Size paper_size = semantic_info.papers[i].size_um; gfx::Size paper_size = semantic_info.papers[i].size_um;
if (paper_size.width() > paper_size.height()) if (paper_size.width() > paper_size.height())
paper_size.SetSize(paper_size.height(), paper_size.width()); paper_size.SetSize(paper_size.height(), paper_size.width());
Media new_media(semantic_info.papers[i].name, paper_size.width(), Media new_media(semantic_info.papers[i].name,
"",
paper_size.width(),
paper_size.height()); paper_size.height());
new_media.MatchBySize(); new_media.MatchBySize();
if (new_media.IsValid() && !media.Contains(new_media)) { if (new_media.IsValid() && !media.Contains(new_media)) {
...@@ -110,7 +112,6 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd( ...@@ -110,7 +112,6 @@ scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd(
NOTREACHED(); NOTREACHED();
} }
} }
#endif
OrientationCapability orientation; OrientationCapability orientation;
orientation.AddDefaultOption(PORTRAIT, true); orientation.AddDefaultOption(PORTRAIT, true);
......
...@@ -460,13 +460,15 @@ Media::Media(MediaType type, int32 width_um, int32 height_um) ...@@ -460,13 +460,15 @@ Media::Media(MediaType type, int32 width_um, int32 height_um)
} }
Media::Media(const std::string& custom_display_name, Media::Media(const std::string& custom_display_name,
const std::string& vendor_id,
int32 width_um, int32 width_um,
int32 height_um) int32 height_um)
: type(CUSTOM_MEDIA), : type(CUSTOM_MEDIA),
width_um(width_um), width_um(width_um),
height_um(height_um), height_um(height_um),
is_continuous_feed(width_um <= 0 || height_um <= 0), is_continuous_feed(width_um <= 0 || height_um <= 0),
custom_display_name(custom_display_name) { custom_display_name(custom_display_name),
vendor_id(vendor_id) {
} }
bool Media::MatchBySize() { bool Media::MatchBySize() {
...@@ -474,7 +476,6 @@ bool Media::MatchBySize() { ...@@ -474,7 +476,6 @@ bool Media::MatchBySize() {
if (!media) if (!media)
return false; return false;
type = media->id; type = media->id;
custom_display_name.clear();
return true; return true;
} }
...@@ -758,6 +759,7 @@ class MediaTraits : public ItemsTraits<kOptionMediaSize> { ...@@ -758,6 +759,7 @@ class MediaTraits : public ItemsTraits<kOptionMediaSize> {
dict.GetInteger(kMediaHeight, &option->height_um); dict.GetInteger(kMediaHeight, &option->height_um);
dict.GetBoolean(kMediaIsContinuous, &option->is_continuous_feed); dict.GetBoolean(kMediaIsContinuous, &option->is_continuous_feed);
dict.GetString(kCustomName, &option->custom_display_name); dict.GetString(kCustomName, &option->custom_display_name);
dict.GetString(kKeyVendorId, &option->vendor_id);
return true; return true;
} }
...@@ -766,6 +768,8 @@ class MediaTraits : public ItemsTraits<kOptionMediaSize> { ...@@ -766,6 +768,8 @@ class MediaTraits : public ItemsTraits<kOptionMediaSize> {
dict->SetString(kKeyName, TypeToString(kMediaDefinitions, option.type)); dict->SetString(kKeyName, TypeToString(kMediaDefinitions, option.type));
if (!option.custom_display_name.empty() || option.type == CUSTOM_MEDIA) if (!option.custom_display_name.empty() || option.type == CUSTOM_MEDIA)
dict->SetString(kCustomName, option.custom_display_name); dict->SetString(kCustomName, option.custom_display_name);
if (!option.vendor_id.empty())
dict->SetString(kKeyVendorId, option.vendor_id);
if (option.width_um > 0) if (option.width_um > 0)
dict->SetInteger(kMediaWidth, option.width_um); dict->SetInteger(kMediaWidth, option.width_um);
if (option.height_um > 0) if (option.height_um > 0)
......
...@@ -292,6 +292,7 @@ struct Media { ...@@ -292,6 +292,7 @@ struct Media {
Media(MediaType type, int32 width_um, int32 height_um); Media(MediaType type, int32 width_um, int32 height_um);
Media(const std::string& custom_display_name, Media(const std::string& custom_display_name,
const std::string& vendor_id,
int32 width_um, int32 width_um,
int32 height_um); int32 height_um);
...@@ -306,6 +307,7 @@ struct Media { ...@@ -306,6 +307,7 @@ struct Media {
int32 height_um; int32 height_um;
bool is_continuous_feed; bool is_continuous_feed;
std::string custom_display_name; std::string custom_display_name;
std::string vendor_id;
}; };
struct Interval { struct Interval {
......
...@@ -138,7 +138,8 @@ const char kCdd[] = ...@@ -138,7 +138,8 @@ const char kCdd[] =
" }, {" " }, {"
" 'width_microns': 1111," " 'width_microns': 1111,"
" 'is_continuous_feed': true," " 'is_continuous_feed': true,"
" 'custom_display_name': 'FEED'" " 'custom_display_name': 'Feed',"
" 'vendor_id': 'FEED'"
" } ]" " } ]"
" }," " },"
" 'collate': {" " 'collate': {"
...@@ -364,7 +365,7 @@ TEST(PrinterDescriptionTest, CddSetAll) { ...@@ -364,7 +365,7 @@ TEST(PrinterDescriptionTest, CddSetAll) {
media.AddDefaultOption(Media(NA_LETTER, 2222, 3333), true); media.AddDefaultOption(Media(NA_LETTER, 2222, 3333), true);
media.AddOption(Media(ISO_A6, 4444, 5555)); media.AddOption(Media(ISO_A6, 4444, 5555));
media.AddOption(Media(JPN_YOU4, 6666, 7777)); media.AddOption(Media(JPN_YOU4, 6666, 7777));
media.AddOption(Media("FEED", 1111, 0)); media.AddOption(Media("Feed", "FEED", 1111, 0));
collate.set_default_value(false); collate.set_default_value(false);
reverse.set_default_value(true); reverse.set_default_value(true);
...@@ -463,7 +464,7 @@ TEST(PrinterDescriptionTest, CddGetAll) { ...@@ -463,7 +464,7 @@ TEST(PrinterDescriptionTest, CddGetAll) {
EXPECT_TRUE(media.Contains(Media(NA_LETTER, 2222, 3333))); EXPECT_TRUE(media.Contains(Media(NA_LETTER, 2222, 3333)));
EXPECT_TRUE(media.Contains(Media(ISO_A6, 4444, 5555))); EXPECT_TRUE(media.Contains(Media(ISO_A6, 4444, 5555)));
EXPECT_TRUE(media.Contains(Media(JPN_YOU4, 6666, 7777))); EXPECT_TRUE(media.Contains(Media(JPN_YOU4, 6666, 7777)));
EXPECT_TRUE(media.Contains(Media("FEED", 1111, 0))); EXPECT_TRUE(media.Contains(Media("Feed", "FEED", 1111, 0)));
EXPECT_EQ(Media(NA_LETTER, 2222, 3333), media.GetDefault()); EXPECT_EQ(Media(NA_LETTER, 2222, 3333), media.GetDefault());
EXPECT_FALSE(collate.default_value()); EXPECT_FALSE(collate.default_value());
......
...@@ -86,6 +86,9 @@ const char kSettingMediaSizeHeightMicrons[] = "height_microns"; ...@@ -86,6 +86,9 @@ const char kSettingMediaSizeHeightMicrons[] = "height_microns";
// Key that specifies the requested media width in microns. // Key that specifies the requested media width in microns.
const char kSettingMediaSizeWidthMicrons[] = "width_microns"; const char kSettingMediaSizeWidthMicrons[] = "width_microns";
// Key that specifies the requested media platform specific vendor id.
const char kSettingMediaSizeVendorId[] = "vendor_id";
// Key that specifies the bottom margin of the page. // Key that specifies the bottom margin of the page.
const char kSettingMarginBottom[] = "marginBottom"; const char kSettingMarginBottom[] = "marginBottom";
......
...@@ -35,6 +35,7 @@ PRINTING_EXPORT extern const char kSettingLandscape[]; ...@@ -35,6 +35,7 @@ PRINTING_EXPORT extern const char kSettingLandscape[];
PRINTING_EXPORT extern const char kSettingMediaSize[]; PRINTING_EXPORT extern const char kSettingMediaSize[];
PRINTING_EXPORT extern const char kSettingMediaSizeHeightMicrons[]; PRINTING_EXPORT extern const char kSettingMediaSizeHeightMicrons[];
PRINTING_EXPORT extern const char kSettingMediaSizeWidthMicrons[]; PRINTING_EXPORT extern const char kSettingMediaSizeWidthMicrons[];
PRINTING_EXPORT extern const char kSettingMediaSizeVendorId[];
PRINTING_EXPORT extern const char kSettingMarginBottom[]; PRINTING_EXPORT extern const char kSettingMarginBottom[];
PRINTING_EXPORT extern const char kSettingMarginLeft[]; PRINTING_EXPORT extern const char kSettingMarginLeft[];
PRINTING_EXPORT extern const char kSettingMarginRight[]; PRINTING_EXPORT extern const char kSettingMarginRight[];
......
...@@ -128,6 +128,7 @@ void PrintSettings::Clear() { ...@@ -128,6 +128,7 @@ void PrintSettings::Clear() {
url_ = base::string16(); url_ = base::string16();
display_header_footer_ = false; display_header_footer_ = false;
device_name_.clear(); device_name_.clear();
requested_media_ = RequestedMedia();
page_setup_device_units_.Clear(); page_setup_device_units_.Clear();
dpi_ = 0; dpi_ = 0;
landscape_ = false; landscape_ = false;
......
...@@ -29,6 +29,19 @@ PRINTING_EXPORT void GetColorModelForMode(int color_mode, ...@@ -29,6 +29,19 @@ PRINTING_EXPORT void GetColorModelForMode(int color_mode,
// OS-independent print settings. // OS-independent print settings.
class PRINTING_EXPORT PrintSettings { class PRINTING_EXPORT PrintSettings {
public: public:
// Media properties requested by the user. Default instance represents
// default media selection.
struct RequestedMedia {
// Size of the media, in microns.
gfx::Size size_microns;
// Platform specific id to map it back to the particular media.
std::string vendor_id;
bool IsDefault() const {
return size_microns.IsEmpty() && vendor_id.empty();
}
};
PrintSettings(); PrintSettings();
~PrintSettings(); ~PrintSettings();
...@@ -43,6 +56,16 @@ class PRINTING_EXPORT PrintSettings { ...@@ -43,6 +56,16 @@ class PRINTING_EXPORT PrintSettings {
void SetOrientation(bool landscape); void SetOrientation(bool landscape);
bool landscape() const { return landscape_; } bool landscape() const { return landscape_; }
// Updates user requested media.
void set_requested_media(const RequestedMedia& media) {
requested_media_ = media;
}
// Media properties requested by the user. Translated into device media by the
// platform specific layers.
const RequestedMedia& requested_media() const {
return requested_media_;
}
// Set printer printable area in in device units. // Set printer printable area in in device units.
// Some platforms already provide flipped area. Set |landscape_needs_flip| // Some platforms already provide flipped area. Set |landscape_needs_flip|
// to false on those platforms to avoid double flipping. // to false on those platforms to avoid double flipping.
...@@ -174,6 +197,9 @@ class PRINTING_EXPORT PrintSettings { ...@@ -174,6 +197,9 @@ class PRINTING_EXPORT PrintSettings {
// Printer device name as opened by the OS. // Printer device name as opened by the OS.
base::string16 device_name_; base::string16 device_name_;
// Media requested by the user.
RequestedMedia requested_media_;
// Page setup in device units. // Page setup in device units.
PageSetup page_setup_device_units_; PageSetup page_setup_device_units_;
......
...@@ -51,6 +51,25 @@ bool PrintSettingsInitializer::InitSettings( ...@@ -51,6 +51,25 @@ bool PrintSettingsInitializer::InitSettings(
settings->set_should_print_backgrounds(backgrounds); settings->set_should_print_backgrounds(backgrounds);
settings->set_selection_only(selection_only); settings->set_selection_only(selection_only);
PrintSettings::RequestedMedia requested_media;
const base::DictionaryValue* media_size_value = NULL;
if (job_settings.GetDictionary(kSettingMediaSize, &media_size_value)) {
int width_microns = 0;
int height_microns = 0;
if (media_size_value->GetInteger(kSettingMediaSizeWidthMicrons,
&width_microns) &&
media_size_value->GetInteger(kSettingMediaSizeHeightMicrons,
&height_microns)) {
requested_media.size_microns = gfx::Size(width_microns, height_microns);
}
std::string vendor_id;
if (media_size_value->GetString(kSettingMediaSizeVendorId, &vendor_id) &&
!vendor_id.empty()) {
requested_media.vendor_id = vendor_id;
}
}
settings->set_requested_media(requested_media);
int margin_type = DEFAULT_MARGINS; int margin_type = DEFAULT_MARGINS;
if (!job_settings.GetInteger(kSettingMarginsType, &margin_type) || if (!job_settings.GetInteger(kSettingMarginsType, &margin_type) ||
(margin_type != DEFAULT_MARGINS && (margin_type != DEFAULT_MARGINS &&
......
...@@ -96,19 +96,13 @@ PrintingContext::Result PrintingContext::UpdatePrintSettings( ...@@ -96,19 +96,13 @@ PrintingContext::Result PrintingContext::UpdatePrintSettings(
is_cloud_dialog || print_with_privet)) { is_cloud_dialog || print_with_privet)) {
settings_.set_dpi(kDefaultPdfDpi); settings_.set_dpi(kDefaultPdfDpi);
gfx::Size paper_size(GetPdfPaperSizeDeviceUnits()); gfx::Size paper_size(GetPdfPaperSizeDeviceUnits());
const base::DictionaryValue* media_size = NULL; if (!settings_.requested_media().size_microns.IsEmpty()) {
if (job_settings.GetDictionary(kSettingMediaSize, &media_size)) { float deviceMicronsPerDeviceUnit =
int width_microns = 0; (kHundrethsMMPerInch * 10.0f) / settings_.device_units_per_inch();
int height_microns = 0; paper_size = gfx::Size(settings_.requested_media().size_microns.width() /
if (media_size->GetInteger(kSettingMediaSizeWidthMicrons, deviceMicronsPerDeviceUnit,
&width_microns) && settings_.requested_media().size_microns.height() /
media_size->GetInteger(kSettingMediaSizeHeightMicrons, deviceMicronsPerDeviceUnit);
&height_microns)) {
float deviceMicronsPerDeviceUnit =
(kHundrethsMMPerInch * 10.0f) / settings_.device_units_per_inch();
paper_size = gfx::Size(width_microns / deviceMicronsPerDeviceUnit,
height_microns / deviceMicronsPerDeviceUnit);
}
} }
gfx::Rect paper_rect(0, 0, paper_size.width(), paper_size.height()); gfx::Rect paper_rect(0, 0, paper_size.width(), paper_size.height());
if (print_to_cloud || print_with_privet) { if (print_to_cloud || print_with_privet) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment