Commit f42aff05 authored by Daniel Hosseinian's avatar Daniel Hosseinian Committed by Commit Bot

Support Epson PPD color parsing

Epson printers use the "Ink" attribute instead of other commonly used
attributes like "ColorModel".

Remove unnecessary scoping in some unit tests.

Bug: 1043255
Change-Id: I3a71c0354de266cf41b99d06372e883e8b200eb8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2014101Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734136}
parent d5252bd9
......@@ -31,13 +31,14 @@ namespace printing {
// This section contains helper code for PPD parsing for semantic capabilities.
namespace {
const char kColorDevice[] = "ColorDevice";
const char kColorModel[] = "ColorModel";
const char kColorMode[] = "ColorMode";
const char kProcessColorModel[] = "ProcessColorModel";
const char kPrintoutMode[] = "PrintoutMode";
const char kDraftGray[] = "Draft.Gray";
const char kHighGray[] = "High.Gray";
constexpr char kColorDevice[] = "ColorDevice";
constexpr char kColorModel[] = "ColorModel";
constexpr char kColorMode[] = "ColorMode";
constexpr char kInk[] = "Ink";
constexpr char kProcessColorModel[] = "ProcessColorModel";
constexpr char kPrintoutMode[] = "PrintoutMode";
constexpr char kDraftGray[] = "Draft.Gray";
constexpr char kHighGray[] = "High.Gray";
constexpr char kDuplex[] = "Duplex";
constexpr char kDuplexNone[] = "None";
......@@ -370,6 +371,32 @@ bool GetHPColorModeSettings(ppd_file_t* ppd,
return true;
}
bool GetEpsonInkSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
ColorModel* color_model_for_color,
bool* color_is_default) {
// Epson printers use "Ink" attribute in their PPDs.
ppd_option_t* color_mode_option = ppdFindOption(ppd, kInk);
if (!color_mode_option)
return false;
if (ppdFindChoice(color_mode_option, kColor))
*color_model_for_color = EPSON_INK_COLOR;
if (ppdFindChoice(color_mode_option, kMono))
*color_model_for_black = EPSON_INK_MONO;
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kInk);
if (!mode_choice) {
mode_choice =
ppdFindChoice(color_mode_option, color_mode_option->defchoice);
}
if (mode_choice) {
*color_is_default = EqualsCaseInsensitiveASCII(mode_choice->choice, kColor);
}
return true;
}
bool GetProcessColorModelSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
ColorModel* color_model_for_color,
......@@ -417,6 +444,7 @@ bool GetColorModelSettings(ppd_file_t* ppd,
GetHPColorSettings(ppd, cm_black, cm_color, is_color) ||
GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) ||
GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) ||
GetEpsonInkSettings(ppd, cm_black, cm_color, is_color) ||
GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color);
}
......
......@@ -319,9 +319,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) {
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
{
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
*OpenUI *HPColorMode/Mode: PickOne
*DefaultHPColorMode: ColorPrint
......@@ -331,19 +330,39 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
<< /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);
}
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, TestPpdParsingEpsonPrinters) {
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
*OpenUI *Ink/Ink: PickOne
*DefaultInk: COLOR
*Ink COLOR/Color: "
<</cupsBitsPerColor 8 /cupsColorOrder 0
/cupsColorSpace 1 /cupsCompression 1>> setpagedevice"
*Ink MONO/Monochrome: "
<</cupsBitsPerColor 8 /cupsColorOrder 0
/cupsColorSpace 0 /cupsCompression 1>> setpagedevice"
*CloseUI: *Ink)";
PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default);
EXPECT_EQ(EPSON_INK_COLOR, caps.color_model);
EXPECT_EQ(EPSON_INK_MONO, caps.bw_model);
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
{
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
*OpenUI *ColorMode/Color Mode: Boolean
*DefaultColorMode: True
......@@ -351,13 +370,12 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
*ColorMode True/Color: ""
*CloseUI: *ColorMode)";
PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default);
EXPECT_EQ(COLORMODE_COLOR, caps.color_model);
EXPECT_EQ(COLORMODE_MONOCHROME, caps.bw_model);
}
PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default);
EXPECT_EQ(COLORMODE_COLOR, caps.color_model);
EXPECT_EQ(COLORMODE_MONOCHROME, caps.bw_model);
}
} // namespace printing
......@@ -142,6 +142,8 @@ enum ColorModel {
BROTHER_CUPS_MONO, // Used in Brother color laser printer PPDs.
BROTHER_BRSCRIPT3_COLOR, // Used in Brother BRScript3 color printer PPDs.
BROTHER_BRSCRIPT3_BLACK, // Used in Brother BRScript3 color printer PPDs.
EPSON_INK_COLOR, // Used in Epson printer PPDs.
EPSON_INK_MONO, // Used in Epson printer PPDs.
};
// What kind of margins to use.
......
......@@ -31,6 +31,7 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "ColorModel";
constexpr char kCUPSPrintoutMode[] = "PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "ProcessColorModel";
constexpr char kCUPSInk[] = "Ink";
constexpr char kCUPSBrotherMonoColor[] = "BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "BRPrintQuality";
#else
......@@ -38,6 +39,7 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "cups-ColorModel";
constexpr char kCUPSPrintoutMode[] = "cups-PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "cups-ProcessColorModel";
constexpr char kCUPSInk[] = "cups-Ink";
constexpr char kCUPSBrotherMonoColor[] = "cups-BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "cups-BRPrintQuality";
#endif // defined(OS_MACOSX)
......@@ -129,6 +131,14 @@ void GetColorModelForMode(int color_mode,
color_setting_name->assign(kCUPSBrotherPrintQuality);
color_value->assign(kBlack);
break;
case EPSON_INK_COLOR:
color_setting_name->assign(kCUPSInk);
color_value->assign(kColor);
break;
case EPSON_INK_MONO:
color_setting_name->assign(kCUPSInk);
color_value->assign(kMono);
break;
default:
color_value->assign(kGrayscale);
break;
......
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