]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change offset x with pixel
authorBastian Dehn <hhaalo@arcor.de>
Sun, 23 Feb 2025 10:22:40 +0000 (11:22 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Thu, 6 Mar 2025 20:44:40 +0000 (21:44 +0100)
src/kds_s2000w_handler_opts.c
src/kds_s2000w_option_descriptors.c
src/kds_s2000w_option_descriptors.h
tests/kds_s2000w_option_descriptor_tests.c

index 7737c66c03033dbb6d7a608acb37d2e97c96a727..d8a82e5a2fd5ae4dce949f7115104fb92e0226b7 100644 (file)
@@ -1,6 +1,7 @@
 #include <string.h>
 #include <json-c/json.h>
 #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");
index dfc2bc16fabcc4d38d38861008f0114a092789c5..93e5a0bfff823272408908ac5b7669cfa02994d5 100644 (file)
@@ -1,6 +1,5 @@
 #include <stdlib.h>
 #include <string.h>
-#include <sane/saneopts.h>
 #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,
index b99e4abd628452bedb845941e2800d9bab7610ec..feddcf1c9c48a4ffdafecf9eab2d8cad72f5493a 100644 (file)
@@ -2,6 +2,7 @@
 #define KDS_S2000W_OPTION_DESCRIPTORS_H
 #include <stdint.h>
 #include <sane/sane.h>
+#include <sane/saneopts.h>
 
 void kds_s2000w_option_descriptors_init();
 void kds_s2000w_option_descriptors_free();
index e6b4d32f3d45aa50ede866c8d6f86ffd109609d0..78795a79505fffffd1d1fd896ad66dbf389309dd 100644 (file)
@@ -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);
 }