From ee7f02494b2d25567fe6699ba1957bc39c427033 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 23 Feb 2025 11:22:40 +0100 Subject: [PATCH] change offset x with pixel --- src/kds_s2000w_handler_opts.c | 47 ++++++++++++++++++++-- src/kds_s2000w_option_descriptors.c | 11 +++-- src/kds_s2000w_option_descriptors.h | 1 + tests/kds_s2000w_option_descriptor_tests.c | 10 ++--- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 7737c66..d8a82e5 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -1,6 +1,7 @@ #include #include #include "kds_s2000w_handler_opts.h" +#include "kds_s2000w_handler_opts_calc.h" #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_client.h" #include "kds_s2000w_debug.h" @@ -8,6 +9,8 @@ #define AUTOSTART_ON 1 #define OPTION_COUNT 47 +#define OFFSET_X_MAX_INCH 75 + void _kds_s2000w_handler_opts_write_string_value(json_object* value_object, void* value) { const char* json_value = json_object_get_string(value_object); @@ -118,16 +121,32 @@ void _kds_s2000w_handler_opts_set_enable_cropping_image(json_object* config) cropping_image->cap |= SANE_CAP_SOFT_SELECT; } +void _kds_s2000w_handler_opts_set_offset_x_range(json_object* config) +{ + SANE_Option_Descriptor* image_offset_x = kds_s2000w_option_descriptors_get_by_name(SANE_NAME_SCAN_TL_X); + + json_object* object_value = json_object_object_get(config, "DPI"); + int32_t dpi = json_object_get_int(object_value); + + SANE_Range* range = (SANE_Range*) image_offset_x->constraint.range; + + range->min = 0; + range->max = kds_s2000w_handler_opts_calc_inch_to_pixel(dpi, OFFSET_X_MAX_INCH); + range->quant = kds_s2000w_handler_opts_calc_pixel_quant(dpi); +} + void _kds_s2000w_handler_opts_set_enable_suboptions_cropping_image(json_object* config) { json_object* cropping_image = json_object_object_get(config, "CroppingImage");; const char* cropping_image_value = json_object_get_string(cropping_image); - SANE_Option_Descriptor* image_offset_x = kds_s2000w_option_descriptors_get_by_name("image-offset-x"); + SANE_Option_Descriptor* image_offset_x = kds_s2000w_option_descriptors_get_by_name(SANE_NAME_SCAN_TL_X); SANE_Option_Descriptor* image_offset_y = kds_s2000w_option_descriptors_get_by_name("image-offset-y"); SANE_Option_Descriptor* image_width = kds_s2000w_option_descriptors_get_by_name("image-width"); SANE_Option_Descriptor* image_height = kds_s2000w_option_descriptors_get_by_name("image-height"); + _kds_s2000w_handler_opts_set_offset_x_range(config); + if (strcmp(cropping_image_value, "PartialDocument") == 0) { image_offset_x->cap |= SANE_CAP_SOFT_SELECT; image_offset_y->cap |= SANE_CAP_SOFT_SELECT; @@ -241,6 +260,29 @@ void _kds_s2000w_handler_opts_set_enable_color_drop_out_aggressiveness(json_obje color_drop_out_aggressiveness->cap &= ~SANE_CAP_SOFT_SELECT; } +void _kds_s2000w_handler_opts_get_offset_x_value(json_object* config, void* value) +{ + int32_t* pixel = (int32_t*) value; + + json_object* object_value = json_object_object_get(config, "DPI"); + int32_t dpi = json_object_get_int(object_value); + object_value = json_object_object_get(config, "ImageOffsetX"); + int32_t inch = json_object_get_int(object_value); + + *pixel = kds_s2000w_handler_opts_calc_inch_to_pixel(dpi, inch); +} + +void _kds_s2000w_handler_opts_set_offset_x_value(json_object* config, void* value) +{ + int32_t* pixel = (int32_t*) value; + + json_object* object_value = json_object_object_get(config, "DPI"); + int32_t dpi = json_object_get_int(object_value); + object_value = json_object_object_get(config, "ImageOffsetX"); + int32_t inch = kds_s2000w_handler_opts_calc_pixel_to_inch(dpi, *pixel); + + _kds_s2000w_handler_opts_write_int_value_to_json(object_value, &inch); +} void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value, int32_t* info) { @@ -298,8 +340,7 @@ void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value _kds_s2000w_handler_opts_write_string_value(value_object, value); break; case 9: - value_object = json_object_object_get(config, "ImageOffsetX"); - _kds_s2000w_handler_opts_write_int_value(value_object, value); + _kds_s2000w_handler_opts_get_offset_x_value(config, value); break; case 10: value_object = json_object_object_get(config, "ImageOffsetY"); diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index dfc2bc1..93e5a0b 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -1,6 +1,5 @@ #include #include -#include #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_debug.h" @@ -947,15 +946,15 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_image_offset_x() SANE_Range* constraint = malloc(sizeof(SANE_Range)); constraint->min = 0; - constraint->max = 75; + constraint->max = 1905; constraint->quant = 1; SANE_Option_Descriptor descriptor = { - "image-offset-x", - "Image Offset X", - "Image Offset X", + SANE_NAME_SCAN_TL_X, + SANE_TITLE_SCAN_TL_X, + SANE_DESC_SCAN_TL_X, SANE_TYPE_INT, - SANE_UNIT_NONE, + SANE_UNIT_PIXEL, sizeof(SANE_Int), SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, SANE_CONSTRAINT_RANGE, diff --git a/src/kds_s2000w_option_descriptors.h b/src/kds_s2000w_option_descriptors.h index b99e4ab..feddcf1 100644 --- a/src/kds_s2000w_option_descriptors.h +++ b/src/kds_s2000w_option_descriptors.h @@ -2,6 +2,7 @@ #define KDS_S2000W_OPTION_DESCRIPTORS_H #include #include +#include void kds_s2000w_option_descriptors_init(); void kds_s2000w_option_descriptors_free(); diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c index e6b4d32..78795a7 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -174,16 +174,16 @@ void kds_s2000w_option_get_descriptor_nine_test() { SANE_Option_Descriptor* option = kds_s2000w_option_descriptors_get(9); - assert_string_equal("image-offset-x", option->name); - assert_string_equal("Image Offset X", option->title); - assert_string_equal("Image Offset X", option->desc); + assert_string_equal(SANE_NAME_SCAN_TL_X, option->name); + assert_string_equal(SANE_TITLE_SCAN_TL_X, option->title); + assert_string_equal(SANE_DESC_SCAN_TL_X, option->desc); assert_int_equal(SANE_TYPE_INT, option->type); - assert_int_equal(SANE_UNIT_NONE, option->unit); + assert_int_equal(SANE_UNIT_PIXEL, option->unit); assert_int_equal(sizeof(SANE_Int), option->size); assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap); assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type); assert_int_equal(option->constraint.range->min, 0); - assert_int_equal(option->constraint.range->max, 75); + assert_int_equal(option->constraint.range->max, 1905); assert_int_equal(option->constraint.range->quant, 1); } -- 2.39.5