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(
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
template <>
......@@ -142,6 +166,7 @@ TypeConverter<lorgnette::ScanSettings, mojo_ipc::ScanSettingsPtr>::Convert(
lorgnette_settings.set_color_mode(
mojo::ConvertTo<lorgnette::ColorMode>(mojo_settings->color_mode));
lorgnette_settings.set_resolution(mojo_settings->resolution_dpi);
SetScanRegion(mojo_settings->page_size, lorgnette_settings);
return lorgnette_settings;
}
......
......@@ -29,6 +29,9 @@ struct ScannerCapabilitiesTestParams {
struct ScanSettingsTestParams {
mojo_ipc::ColorMode mojom_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.
......@@ -67,12 +70,14 @@ lorgnette::ScannerCapabilities CreateLorgnetteScannerCapabilities(
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::ColorMode color_mode) {
mojo_ipc::ColorMode color_mode,
mojo_ipc::PageSize page_size) {
mojo_ipc::ScanSettings settings;
settings.source_name = kDocumentSourceName;
settings.color_mode = color_mode;
settings.page_size = page_size;
settings.resolution_dpi = kFirstResolution;
return settings.Clone();
}
......@@ -142,6 +147,9 @@ INSTANTIATE_TEST_SUITE_P(
// ScanSettingsTestParams):
// * |mojom_color_mode| - the mojo_ipc::ColorMode to convert.
// * |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
: public testing::Test,
public testing::WithParamInterface<ScanSettingsTestParams> {
......@@ -154,21 +162,38 @@ class ScanSettingsTest
// lorgnette::ScanSettings proto.
TEST_P(ScanSettingsTest, MojomSettingsToLorgnette) {
lorgnette::ScanSettings lorgnette_settings =
mojo::ConvertTo<lorgnette::ScanSettings>(
CreateMojomScanSettings(params().mojom_color_mode));
mojo::ConvertTo<lorgnette::ScanSettings>(CreateMojomScanSettings(
params().mojom_color_mode, params().mojom_page_size));
EXPECT_EQ(lorgnette_settings.source_name(), kDocumentSourceName);
EXPECT_EQ(lorgnette_settings.color_mode(), params().lorgnette_color_mode);
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(
,
ScanSettingsTest,
testing::Values(ScanSettingsTestParams{mojo_ipc::ColorMode::kBlackAndWhite,
lorgnette::MODE_LINEART},
lorgnette::MODE_LINEART,
mojo_ipc::PageSize::kIsoA4, 210,
297},
ScanSettingsTestParams{mojo_ipc::ColorMode::kGrayscale,
lorgnette::MODE_GRAYSCALE},
lorgnette::MODE_GRAYSCALE,
mojo_ipc::PageSize::kNaLetter, 216,
279},
ScanSettingsTestParams{mojo_ipc::ColorMode::kColor,
lorgnette::MODE_COLOR}));
lorgnette::MODE_COLOR,
mojo_ipc::PageSize::kMax, 0, 0}));
} // namespace chromeos
......@@ -72,6 +72,8 @@ struct ScanSettings {
FileType file_type;
// The color mode with which to scan.
ColorMode color_mode;
// The page size with which to scan.
PageSize page_size;
// The resolution with which to scan in DPI.
uint32 resolution_dpi;
};
......
......@@ -191,11 +191,12 @@ Polymer({
this.scanButtonDisabled_ = true;
// 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 = {
'sourceName': this.selectedSource,
'fileType': chromeos.scanning.mojom.FileType.kPng,
'colorMode': colorModeFromString(this.selectedColorMode),
'pageSize': chromeos.scanning.mojom.PageSize.kNaLetter,
'resolutionDpi': Number(this.selectedResolution),
};
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