Commit 68142560 authored by Jesse Schettler's avatar Jesse Schettler Committed by Commit Bot

scanning: Add page size to ScanSettings

Add page size to ScanSettings and use it to set the scan region.

Bug: 1059779
Change-Id: I980c34ef7218ab0f79b69e4ad6a9d8e7cacde57e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2487815
Commit-Queue: Jesse Schettler <jschettler@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819934}
parent 575550da
...@@ -52,6 +52,30 @@ std::vector<mojo_ipc::PageSize> GetSupportedPageSizes( ...@@ -52,6 +52,30 @@ std::vector<mojo_ipc::PageSize> GetSupportedPageSizes(
return page_sizes; return page_sizes;
} }
// Sets the scan region based on the given |page_size|. If |page_size| is
// PageSize::kMax, the scan resion is left unset, which will cause the scanner
// to scan the entire scannable area.
void SetScanRegion(const mojo_ipc::PageSize page_size,
lorgnette::ScanSettings& settings_out) {
// The default top-left and bottom-right coordinates are (0,0), so only the
// bottom-right coordinates need to be set.
lorgnette::ScanRegion region;
switch (page_size) {
case mojo_ipc::PageSize::kIsoA4:
region.set_bottom_right_x(kIsoA4PageSize.width);
region.set_bottom_right_y(kIsoA4PageSize.height);
break;
case mojo_ipc::PageSize::kNaLetter:
region.set_bottom_right_x(kNaLetterPageSize.width);
region.set_bottom_right_y(kNaLetterPageSize.height);
break;
case mojo_ipc::PageSize::kMax:
return;
}
*settings_out.mutable_scan_region() = std::move(region);
}
} // namespace } // namespace
template <> template <>
...@@ -142,6 +166,7 @@ TypeConverter<lorgnette::ScanSettings, mojo_ipc::ScanSettingsPtr>::Convert( ...@@ -142,6 +166,7 @@ TypeConverter<lorgnette::ScanSettings, mojo_ipc::ScanSettingsPtr>::Convert(
lorgnette_settings.set_color_mode( lorgnette_settings.set_color_mode(
mojo::ConvertTo<lorgnette::ColorMode>(mojo_settings->color_mode)); mojo::ConvertTo<lorgnette::ColorMode>(mojo_settings->color_mode));
lorgnette_settings.set_resolution(mojo_settings->resolution_dpi); lorgnette_settings.set_resolution(mojo_settings->resolution_dpi);
SetScanRegion(mojo_settings->page_size, lorgnette_settings);
return lorgnette_settings; return lorgnette_settings;
} }
......
...@@ -29,6 +29,9 @@ struct ScannerCapabilitiesTestParams { ...@@ -29,6 +29,9 @@ struct ScannerCapabilitiesTestParams {
struct ScanSettingsTestParams { struct ScanSettingsTestParams {
mojo_ipc::ColorMode mojom_color_mode; mojo_ipc::ColorMode mojom_color_mode;
lorgnette::ColorMode lorgnette_color_mode; lorgnette::ColorMode lorgnette_color_mode;
mojo_ipc::PageSize mojom_page_size;
double bottom_right_x;
double bottom_right_y;
}; };
// Document source name used for tests. // Document source name used for tests.
...@@ -67,12 +70,14 @@ lorgnette::ScannerCapabilities CreateLorgnetteScannerCapabilities( ...@@ -67,12 +70,14 @@ lorgnette::ScannerCapabilities CreateLorgnetteScannerCapabilities(
return caps; return caps;
} }
// Returns a ScanSettingsPtr with the given |color_mode|. // Returns a ScanSettingsPtr with the given |color_mode| and |page_size|.
mojo_ipc::ScanSettingsPtr CreateMojomScanSettings( mojo_ipc::ScanSettingsPtr CreateMojomScanSettings(
mojo_ipc::ColorMode color_mode) { mojo_ipc::ColorMode color_mode,
mojo_ipc::PageSize page_size) {
mojo_ipc::ScanSettings settings; mojo_ipc::ScanSettings settings;
settings.source_name = kDocumentSourceName; settings.source_name = kDocumentSourceName;
settings.color_mode = color_mode; settings.color_mode = color_mode;
settings.page_size = page_size;
settings.resolution_dpi = kFirstResolution; settings.resolution_dpi = kFirstResolution;
return settings.Clone(); return settings.Clone();
} }
...@@ -142,6 +147,9 @@ INSTANTIATE_TEST_SUITE_P( ...@@ -142,6 +147,9 @@ INSTANTIATE_TEST_SUITE_P(
// ScanSettingsTestParams): // ScanSettingsTestParams):
// * |mojom_color_mode| - the mojo_ipc::ColorMode to convert. // * |mojom_color_mode| - the mojo_ipc::ColorMode to convert.
// * |lorgnette_color_mode| - the expected lorgnette::ColorMode. // * |lorgnette_color_mode| - the expected lorgnette::ColorMode.
// * |mojom_page_size| - the mojo_ipc::PageSize to convert.
// * |bottom_right_x| - the expected bottom-right x-coordinate.
// * |bottom_right_y| - the expected bottom-right y-coordinate.
class ScanSettingsTest class ScanSettingsTest
: public testing::Test, : public testing::Test,
public testing::WithParamInterface<ScanSettingsTestParams> { public testing::WithParamInterface<ScanSettingsTestParams> {
...@@ -154,21 +162,38 @@ class ScanSettingsTest ...@@ -154,21 +162,38 @@ class ScanSettingsTest
// lorgnette::ScanSettings proto. // lorgnette::ScanSettings proto.
TEST_P(ScanSettingsTest, MojomSettingsToLorgnette) { TEST_P(ScanSettingsTest, MojomSettingsToLorgnette) {
lorgnette::ScanSettings lorgnette_settings = lorgnette::ScanSettings lorgnette_settings =
mojo::ConvertTo<lorgnette::ScanSettings>( mojo::ConvertTo<lorgnette::ScanSettings>(CreateMojomScanSettings(
CreateMojomScanSettings(params().mojom_color_mode)); params().mojom_color_mode, params().mojom_page_size));
EXPECT_EQ(lorgnette_settings.source_name(), kDocumentSourceName); EXPECT_EQ(lorgnette_settings.source_name(), kDocumentSourceName);
EXPECT_EQ(lorgnette_settings.color_mode(), params().lorgnette_color_mode); EXPECT_EQ(lorgnette_settings.color_mode(), params().lorgnette_color_mode);
EXPECT_EQ(lorgnette_settings.resolution(), kFirstResolution); EXPECT_EQ(lorgnette_settings.resolution(), kFirstResolution);
if (params().mojom_page_size == mojo_ipc::PageSize::kMax) {
EXPECT_FALSE(lorgnette_settings.has_scan_region());
} else {
ASSERT_TRUE(lorgnette_settings.has_scan_region());
EXPECT_EQ(lorgnette_settings.scan_region().top_left_x(), 0);
EXPECT_EQ(lorgnette_settings.scan_region().top_left_y(), 0);
EXPECT_EQ(lorgnette_settings.scan_region().bottom_right_x(),
params().bottom_right_x);
EXPECT_EQ(lorgnette_settings.scan_region().bottom_right_y(),
params().bottom_right_y);
}
} }
INSTANTIATE_TEST_SUITE_P( INSTANTIATE_TEST_SUITE_P(
, ,
ScanSettingsTest, ScanSettingsTest,
testing::Values(ScanSettingsTestParams{mojo_ipc::ColorMode::kBlackAndWhite, testing::Values(ScanSettingsTestParams{mojo_ipc::ColorMode::kBlackAndWhite,
lorgnette::MODE_LINEART}, lorgnette::MODE_LINEART,
mojo_ipc::PageSize::kIsoA4, 210,
297},
ScanSettingsTestParams{mojo_ipc::ColorMode::kGrayscale, ScanSettingsTestParams{mojo_ipc::ColorMode::kGrayscale,
lorgnette::MODE_GRAYSCALE}, lorgnette::MODE_GRAYSCALE,
mojo_ipc::PageSize::kNaLetter, 216,
279},
ScanSettingsTestParams{mojo_ipc::ColorMode::kColor, ScanSettingsTestParams{mojo_ipc::ColorMode::kColor,
lorgnette::MODE_COLOR})); lorgnette::MODE_COLOR,
mojo_ipc::PageSize::kMax, 0, 0}));
} // namespace chromeos } // namespace chromeos
...@@ -72,6 +72,8 @@ struct ScanSettings { ...@@ -72,6 +72,8 @@ struct ScanSettings {
FileType file_type; FileType file_type;
// The color mode with which to scan. // The color mode with which to scan.
ColorMode color_mode; ColorMode color_mode;
// The page size with which to scan.
PageSize page_size;
// The resolution with which to scan in DPI. // The resolution with which to scan in DPI.
uint32 resolution_dpi; uint32 resolution_dpi;
}; };
......
...@@ -191,11 +191,12 @@ Polymer({ ...@@ -191,11 +191,12 @@ Polymer({
this.scanButtonDisabled_ = true; this.scanButtonDisabled_ = true;
// TODO(jschettler): Use the selected file type when ScanService supports // TODO(jschettler): Use the selected file type when ScanService supports
// it. // it. Use the selected page size when the corresponding dropdown is added.
const settings = { const settings = {
'sourceName': this.selectedSource, 'sourceName': this.selectedSource,
'fileType': chromeos.scanning.mojom.FileType.kPng, 'fileType': chromeos.scanning.mojom.FileType.kPng,
'colorMode': colorModeFromString(this.selectedColorMode), 'colorMode': colorModeFromString(this.selectedColorMode),
'pageSize': chromeos.scanning.mojom.PageSize.kNaLetter,
'resolutionDpi': Number(this.selectedResolution), 'resolutionDpi': Number(this.selectedResolution),
}; };
this.scanService_ this.scanService_
......
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