#define OPTION_COUNT 47
#define OFFSET_X_MAX_INCH 75
+#define OFFSET_Y_MAX_INCH 390
void _kds_s2000w_handler_opts_write_string_value(json_object* value_object, void* value)
{
range->quant = kds_s2000w_handler_opts_calc_pixel_quant(dpi);
}
+void _kds_s2000w_handler_opts_set_offset_y_range(json_object* config)
+{
+ SANE_Option_Descriptor* image_offset_x = kds_s2000w_option_descriptors_get_by_name(SANE_NAME_SCAN_TL_Y);
+
+ 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_Y_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(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_offset_y = kds_s2000w_option_descriptors_get_by_name(SANE_NAME_SCAN_TL_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);
+ _kds_s2000w_handler_opts_set_offset_y_range(config);
if (strcmp(cropping_image_value, "PartialDocument") == 0) {
image_offset_x->cap |= SANE_CAP_SOFT_SELECT;
color_drop_out_aggressiveness->cap &= ~SANE_CAP_SOFT_SELECT;
}
-void _kds_s2000w_handler_opts_get_offset_x_value(json_object* config, void* value)
+void _kds_s2000w_handler_opts_get_pixel_value_from_inch(json_object* config, const char* option_name, 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");
+ object_value = json_object_object_get(config, option_name);
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)
+void _kds_s2000w_handler_opts_set_inch_value_from_pixel(json_object* config, const char* option_name, 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");
+ object_value = json_object_object_get(config, option_name);
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);
_kds_s2000w_handler_opts_write_string_value(value_object, value);
break;
case 9:
- _kds_s2000w_handler_opts_get_offset_x_value(config, value);
+ _kds_s2000w_handler_opts_get_pixel_value_from_inch(config, "ImageOffsetX", value);
break;
case 10:
value_object = json_object_object_get(config, "ImageOffsetY");
*info = RELOAD_OPTIONS;
break;
case 9:
- _kds_s2000w_handler_opts_set_offset_x_value(config, value);
+ _kds_s2000w_handler_opts_set_inch_value_from_pixel(config, "ImageOffsetX", value);
break;
case 10:
- value_object = json_object_object_get(config, "ImageOffsetY");
- _kds_s2000w_handler_opts_write_int_value_to_json(value_object, value);
+ _kds_s2000w_handler_opts_set_inch_value_from_pixel(config, "ImageOffsetY", value);
break;
case 11:
value_object = json_object_object_get(config, "ImageWidth");
{
SANE_Option_Descriptor* option = kds_s2000w_option_descriptors_get(10);
- assert_string_equal("image-offset-y", option->name);
- assert_string_equal("Image Offset Y", option->title);
- assert_string_equal("Image Offset Y", option->desc);
+ assert_string_equal(SANE_NAME_SCAN_TL_Y, option->name);
+ assert_string_equal(SANE_TITLE_SCAN_TL_Y, option->title);
+ assert_string_equal(SANE_DESC_SCAN_TL_Y, 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, 390);
- assert_int_equal(option->constraint.range->quant, 1);
+ assert_int_equal(option->constraint.range->max, 7800);
+ assert_int_equal(option->constraint.range->quant, 20);
}
void kds_s2000w_option_get_descriptor_eleven_test()