Improve PPD color parsing for some HP printers.
Some HP printers use the "HPColorMode" attribute instead of the "Color" attribute. Bug: 1035009 Change-Id: I75804e86680e3e50f9456f414bfc5bb13ef3956a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1972057 Reviewed-by: Luum Habtemariam <luum@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org> Cr-Commit-Position: refs/heads/master@{#729538}
This commit is contained in:
printing/backend
@ -50,6 +50,11 @@ constexpr char kBrotherDuplex[] = "BRDuplex";
|
||||
constexpr char kBrotherMonoColor[] = "BRMonoColor";
|
||||
constexpr char kBrotherPrintQuality[] = "BRPrintQuality";
|
||||
|
||||
// HP printer specific options.
|
||||
constexpr char kHpColorMode[] = "HPColorMode";
|
||||
constexpr char kHpColorPrint[] = "ColorPrint";
|
||||
constexpr char kHpGrayscalePrint[] = "GrayscalePrint";
|
||||
|
||||
// Samsung printer specific options.
|
||||
constexpr char kSamsungColorTrue[] = "True";
|
||||
constexpr char kSamsungColorFalse[] = "False";
|
||||
@ -318,7 +323,7 @@ bool GetHPColorSettings(ppd_file_t* ppd,
|
||||
ColorModel* color_model_for_black,
|
||||
ColorModel* color_model_for_color,
|
||||
bool* color_is_default) {
|
||||
// HP printers use "Color/Color Model" attribute in their PPDs.
|
||||
// Some HP printers use "Color/Color Model" attribute in their PPDs.
|
||||
ppd_option_t* color_mode_option = ppdFindOption(ppd, kColor);
|
||||
if (!color_mode_option)
|
||||
return false;
|
||||
@ -339,6 +344,32 @@ bool GetHPColorSettings(ppd_file_t* ppd,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetHPColorModeSettings(ppd_file_t* ppd,
|
||||
ColorModel* color_model_for_black,
|
||||
ColorModel* color_model_for_color,
|
||||
bool* color_is_default) {
|
||||
// Some HP printers use "HPColorMode/Mode" attribute in their PPDs.
|
||||
ppd_option_t* color_mode_option = ppdFindOption(ppd, kHpColorMode);
|
||||
if (!color_mode_option)
|
||||
return false;
|
||||
|
||||
if (ppdFindChoice(color_mode_option, kHpColorPrint))
|
||||
*color_model_for_color = HP_COLOR_COLOR;
|
||||
if (ppdFindChoice(color_mode_option, kHpGrayscalePrint))
|
||||
*color_model_for_black = HP_COLOR_BLACK;
|
||||
|
||||
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kHpColorMode);
|
||||
if (!mode_choice) {
|
||||
mode_choice =
|
||||
ppdFindChoice(color_mode_option, color_mode_option->defchoice);
|
||||
}
|
||||
if (mode_choice) {
|
||||
*color_is_default =
|
||||
EqualsCaseInsensitiveASCII(mode_choice->choice, kHpColorPrint);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetProcessColorModelSettings(ppd_file_t* ppd,
|
||||
ColorModel* color_model_for_black,
|
||||
ColorModel* color_model_for_color,
|
||||
@ -384,6 +415,7 @@ bool GetColorModelSettings(ppd_file_t* ppd,
|
||||
GetPrintOutModeColorSettings(ppd, cm_black, cm_color, is_color) ||
|
||||
GetColorModeSettings(ppd, cm_black, cm_color, is_color) ||
|
||||
GetHPColorSettings(ppd, cm_black, cm_color, is_color) ||
|
||||
GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) ||
|
||||
GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) ||
|
||||
GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color);
|
||||
}
|
||||
|
@ -318,6 +318,28 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
|
||||
{
|
||||
constexpr char kTestPpdData[] =
|
||||
R"(*PPD-Adobe: "4.3"
|
||||
*ColorDevice: True
|
||||
*OpenUI *HPColorMode/Mode: PickOne
|
||||
*DefaultHPColorMode: ColorPrint
|
||||
*HPColorMode ColorPrint/Color: "
|
||||
<< /ProcessColorModel /DeviceCMYK >> setpagedevice"
|
||||
*HPColorMode GrayscalePrint/Grayscale: "
|
||||
<< /ProcessColorModel /DeviceGray >> setpagedevice"
|
||||
*CloseUI: *HPColorMode)";
|
||||
|
||||
PrinterSemanticCapsAndDefaults caps;
|
||||
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
|
||||
EXPECT_TRUE(caps.color_changeable);
|
||||
EXPECT_TRUE(caps.color_default);
|
||||
EXPECT_EQ(HP_COLOR_COLOR, caps.color_model);
|
||||
EXPECT_EQ(HP_COLOR_BLACK, caps.bw_model);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
|
||||
{
|
||||
constexpr char kTestPpdData[] =
|
||||
|
Reference in New Issue
Block a user