From cf6af1d0e1ccfcc99837e8fbd80c61980b0cf504 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Sat, 31 Dec 2022 15:44:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8C=BA=E9=97=B4=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=9A=84=E6=AD=A5=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgsane/sane_hg_mdw.cpp | 29 ++++++++++++++++++++--------- hgsane/sane_hg_mdw.h | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 95bebe6..1763fcf 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -572,7 +572,7 @@ SANE_Option_Descriptor* hg_sane_middleware::string_option_to_SANE_descriptor(con return sod; } SANE_Option_Descriptor* hg_sane_middleware::number_option_to_SANE_descriptor(const char* name, const char* title, const char* desc - , bool double_val, double* lower, double* upper) + , bool double_val, double* lower, double* upper, double* step) { int bytes = sizeof(SANE_Option_Descriptor) + sizeof(SANE_Range); SANE_Option_Descriptor *sod = NULL; @@ -625,6 +625,13 @@ SANE_Option_Descriptor* hg_sane_middleware::number_option_to_SANE_descriptor(con (*(SANE_Range*)str).max = (SANE_Word)*upper; } (*(SANE_Range*)str).quant = 0; + if (step) + { + if(double_val) + (*(SANE_Range*)str).quant = hg_sane_middleware::double_2_sane_fixed(*step); + else + (*(SANE_Range*)str).quant = (SANE_Word)(*step); + } str = (char*)((SANE_Range*)str + 1); } @@ -795,7 +802,7 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st { std::string title(""), desc(""), val(""); std::vector constraints; - double lower = .0f, upper = .0f; + double lower = .0f, upper = .0f, step = .0f; bool db_val = false; jsn->get_value("title", title); @@ -839,12 +846,14 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st int l = 0; if (range->get_value("min", l)) { - int u = 0; + int u = 0, s = 1; range->get_value("max", u); + range->get_value("step", s); lower = l; upper = u; + step = s; ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , false, &lower, &upper); + , false, &lower, &upper, &step); } else { @@ -866,8 +875,10 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st if (range->get_value("min", lower)) { range->get_value("max", upper); + step = (upper - lower) / 10.0f; + range->get_value("step", step); ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , true, &lower, &upper); + , true, &lower, &upper, &step); } else { @@ -889,25 +900,25 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st else { ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , false, NULL, NULL); + , false, NULL, NULL, NULL); } } else if (val == "bool") { ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , false, NULL, NULL); + , false, NULL, NULL, NULL); ret->type = SANE_TYPE_BOOL; } else if (val == "button") { ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , false, NULL, NULL); + , false, NULL, NULL, NULL); ret->type = SANE_TYPE_BUTTON; } else if (val == "group") { ret = hg_sane_middleware::number_option_to_SANE_descriptor(name.c_str(), title.c_str(), desc.c_str() - , false, NULL, NULL); + , false, NULL, NULL, NULL); ret->type = SANE_TYPE_GROUP; } diff --git a/hgsane/sane_hg_mdw.h b/hgsane/sane_hg_mdw.h index 7f3fe16..acf8474 100644 --- a/hgsane/sane_hg_mdw.h +++ b/hgsane/sane_hg_mdw.h @@ -170,7 +170,7 @@ public: static SANE_Option_Descriptor* string_option_to_SANE_descriptor(const char* name, const char* title, const char* desc , const std::vector& values); static SANE_Option_Descriptor* number_option_to_SANE_descriptor(const char* name, const char* title, const char* desc - , bool double_val, double* lower, double* upper); // NO constraint if lower or upper were NULL + , bool double_val, double* lower, double* upper, double* step); // NO constraint if lower or upper were NULL static SANE_Option_Descriptor* number_option_to_SANE_descriptor(const char* name, const char* title, const char* desc , const std::vector& values); // NO constraint if values was empty static SANE_Option_Descriptor* number_option_to_SANE_descriptor(const char* name, const char* title, const char* desc