From 42a58387b6847ab820dbd80ab1a54597eb04db96 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sat, 2 Nov 2019 17:13:19 +0200 Subject: [PATCH] genesys: Extract conversion of ScanColorMode to separate functions --- backend/genesys/enums.cpp | 25 +++++++++++++++++++++++++ backend/genesys/enums.h | 2 ++ backend/genesys/genesys.cpp | 10 +--------- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/backend/genesys/enums.cpp b/backend/genesys/enums.cpp index 6869d78b6..155c87b80 100644 --- a/backend/genesys/enums.cpp +++ b/backend/genesys/enums.cpp @@ -70,4 +70,29 @@ ScanMethod option_string_to_scan_method(const std::string& str) throw SaneException("Unknown scan method option %s", str.c_str()); } +const char* scan_color_mode_to_option_string(ScanColorMode mode) +{ + switch (mode) { + case ScanColorMode::COLOR_SINGLE_PASS: return SANE_VALUE_SCAN_MODE_COLOR; + case ScanColorMode::GRAY: return SANE_VALUE_SCAN_MODE_GRAY; + case ScanColorMode::HALFTONE: return SANE_VALUE_SCAN_MODE_HALFTONE; + case ScanColorMode::LINEART: return SANE_VALUE_SCAN_MODE_LINEART; + } + throw SaneException("Unknown scan mode %d", static_cast(mode)); +} + +ScanColorMode option_string_to_scan_color_mode(const std::string& str) +{ + if (str == SANE_VALUE_SCAN_MODE_COLOR) { + return ScanColorMode::COLOR_SINGLE_PASS; + } else if (str == SANE_VALUE_SCAN_MODE_GRAY) { + return ScanColorMode::GRAY; + } else if (str == SANE_VALUE_SCAN_MODE_HALFTONE) { + return ScanColorMode::HALFTONE; + } else if (str == SANE_VALUE_SCAN_MODE_LINEART) { + return ScanColorMode::LINEART; + } + throw SaneException("Unknown scan color mode %s", str.c_str()); +} + } // namespace genesys diff --git a/backend/genesys/enums.h b/backend/genesys/enums.h index f1d322194..f825e31c5 100644 --- a/backend/genesys/enums.h +++ b/backend/genesys/enums.h @@ -94,6 +94,8 @@ inline void serialize(std::ostream& str, ScanColorMode& x) serialize(str, value); } +const char* scan_color_mode_to_option_string(ScanColorMode mode); +ScanColorMode option_string_to_scan_color_mode(const std::string& str); enum class ColorFilter : unsigned { RED = 0, diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 528772ac8..799391a30 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3511,15 +3511,7 @@ static void calc_parameters(Genesys_Scanner* s) bytes_per_line *= 3; } - if (s->mode == SANE_VALUE_SCAN_MODE_COLOR) { - s->dev->settings.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; - } else if (s->mode == SANE_VALUE_SCAN_MODE_GRAY) { - s->dev->settings.scan_mode = ScanColorMode::GRAY; - } else if (s->mode == SANE_TITLE_HALFTONE) { - s->dev->settings.scan_mode = ScanColorMode::HALFTONE; - } else { /* Lineart */ - s->dev->settings.scan_mode = ScanColorMode::LINEART; - } + s->dev->settings.scan_mode = option_string_to_scan_color_mode(s->mode); s->dev->settings.lines = s->params.lines; s->dev->settings.pixels = pixels_per_line;