diff --git a/binding/api_model.py b/binding/api_model.py index f17ae02..8197733 100644 --- a/binding/api_model.py +++ b/binding/api_model.py @@ -585,6 +585,17 @@ def _public_struct_name(struct: CStruct) -> str: return "" +def _struct_method_name(function_name: str, struct_c_name: str) -> str: + """The name the runtimes give a struct method: the part of the function + name after the last ``_`` it shares with the struct's C name, so + lv_grad_linear_init on lv_grad_dsc_t is ``linear_init`` + (analyze.noncommon_part; lvgl-bindings#39).""" + n = len(commonprefix([function_name, struct_c_name])) - 1 + while n > 0 and function_name[n] != "_": + n -= 1 + return function_name[n + 1 :] + + def _method_name(function_name: str, receiver: str, module_prefix: str) -> str: plain = _strip_prefix(function_name, module_prefix) stems = [receiver] @@ -902,12 +913,14 @@ def build_api_model( for struct in declarations.structs } struct_receivers = {} + struct_c_receivers = {} for struct in declarations.structs: receiver = struct_names[id(struct)] for function in index.struct_functions(receiver): struct_receivers.setdefault( function.name, struct_python_names[id(struct)] ) + struct_c_receivers.setdefault(function.name, receiver) constructors = {} for function in declarations.functions: @@ -963,6 +976,10 @@ def build_api_model( python_name=( "create" if role == "constructor" + else _struct_method_name( + function.name, struct_c_receivers[function.name] + ) + if role == "struct_method" else _method_name(function.name, receiver, module_prefix) if receiver is not None else plain diff --git a/binding/emit_cpython_glue.py b/binding/emit_cpython_glue.py index ff65323..739b9b0 100644 --- a/binding/emit_cpython_glue.py +++ b/binding/emit_cpython_glue.py @@ -399,6 +399,17 @@ def finish_py_module(max_phase): name=py_name, san=san ) ) + if registration.struct_names: + # Structs that aren't exported, such as the type of an anonymous + # union field, are still returned by field reads, so their types + # must be ready (lvgl-bindings#39). + for struct_name, generated in generated_structs.items(): + if generated and struct_name not in registration.struct_names: + print( + ' if (PyType_Ready(&py_{san}_type) < 0) return NULL;'.format( + san=sanitize(struct_name) + ) + ) for global_name in cpython_global_types: global_type = cpython_global_types.get(global_name) diff --git a/binding/emit_cpython_native.py b/binding/emit_cpython_native.py index 49cd789..69a8895 100644 --- a/binding/emit_cpython_native.py +++ b/binding/emit_cpython_native.py @@ -276,8 +276,27 @@ def try_generate_struct_cpython(struct_name, struct): ) for decl in flatten_struct_decls: - try_generate_type(decl.type) + converted = try_generate_type(decl.type) type_name = get_type_fn(decl.type, remove_quals=True) + if ( + not converted + and ("\n" in type_name or "{" in type_name) + and isinstance(decl.type, c_ast.TypeDecl) + and is_struct(decl.type.type) + ): + # An anonymous struct or union member (lv_grad_dsc_t.params): + # name its type and bind it as a struct, as MicroPython does + # (lvgl-bindings#39). + type_name = "%s_%s_t" % (struct_name[:-2], decl.type.declname) + print( + "typedef __typeof__( (({tag}{parent}*)(0))->{child} ) {new};".format( + tag=struct_tag, + parent=struct_name, + child=decl.type.declname, + new=type_name, + ) + ) + try_generate_struct_cpython(type_name, decl.type.type) if "\n" in type_name or "{" in type_name: continue if not is_struct(decl.type.type): diff --git a/generated/api.json b/generated/api.json index f10d37c..0089f43 100644 --- a/generated/api.json +++ b/generated/api.json @@ -1,5 +1,5 @@ { - "api_hash": "41a53e83f38560d1eec5d8cbe6133db5decfdefd2027a5bf48ef591740444268", + "api_hash": "f6f18df630dbff7f78808bb702151933750f376dbbaeb91d7b70d2b7f1c2553f", "constants": [ { "available_on": [ @@ -23059,7 +23059,7 @@ } } ], - "python_name": "cache_create", + "python_name": "create", "receiver": "cache_class_t", "return_type": { "kind": "pointer", @@ -41858,7 +41858,7 @@ } } ], - "python_name": "draw_buf_align_ex", + "python_name": "align_ex", "receiver": "draw_buf_handlers_t", "return_type": { "kind": "pointer", @@ -42355,7 +42355,7 @@ } } ], - "python_name": "draw_buf_create_ex", + "python_name": "create_ex", "receiver": "draw_buf_handlers_t", "return_type": { "kind": "pointer", @@ -42546,7 +42546,7 @@ } } ], - "python_name": "draw_buf_dup_ex", + "python_name": "dup_ex", "receiver": "draw_buf_handlers_t", "return_type": { "kind": "pointer", @@ -43379,7 +43379,7 @@ } } ], - "python_name": "draw_buf_init_with_default_handlers", + "python_name": "init_with_default_handlers", "receiver": "draw_buf_handlers_t", "return_type": { "kind": "primitive", @@ -44098,7 +44098,7 @@ } } ], - "python_name": "draw_buf_width_to_stride_ex", + "python_name": "width_to_stride_ex", "receiver": "draw_buf_handlers_t", "return_type": { "kind": "identifier", @@ -44815,7 +44815,7 @@ } } ], - "python_name": "draw_get_dependent_count", + "python_name": "get_dependent_count", "receiver": "draw_task_t", "return_type": { "kind": "identifier", @@ -45275,7 +45275,7 @@ } } ], - "python_name": "draw_image_normal_helper", + "python_name": "image_normal_helper", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -45413,7 +45413,7 @@ } } ], - "python_name": "draw_image_tiled_helper", + "python_name": "image_tiled_helper", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -45707,7 +45707,7 @@ } } ], - "python_name": "draw_label_iterate_characters", + "python_name": "label_iterate_characters", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -46727,7 +46727,7 @@ } } ], - "python_name": "draw_line_iterate", + "python_name": "line_iterate", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47100,7 +47100,7 @@ } } ], - "python_name": "draw_sw_arc", + "python_name": "sw_arc", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47175,7 +47175,7 @@ } } ], - "python_name": "draw_sw_blend", + "python_name": "sw_blend", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47273,7 +47273,7 @@ } } ], - "python_name": "draw_sw_blur", + "python_name": "sw_blur", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47371,7 +47371,7 @@ } } ], - "python_name": "draw_sw_border", + "python_name": "sw_border", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47469,7 +47469,7 @@ } } ], - "python_name": "draw_sw_box_shadow", + "python_name": "sw_box_shadow", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -47594,7 +47594,7 @@ } } ], - "python_name": "draw_sw_fill", + "python_name": "sw_fill", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48143,7 +48143,7 @@ } } ], - "python_name": "draw_sw_image", + "python_name": "sw_image", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48271,7 +48271,7 @@ } } ], - "python_name": "draw_sw_label", + "python_name": "sw_label", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48369,7 +48369,7 @@ } } ], - "python_name": "draw_sw_layer", + "python_name": "sw_layer", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48467,7 +48467,7 @@ } } ], - "python_name": "draw_sw_letter", + "python_name": "sw_letter", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48542,7 +48542,7 @@ } } ], - "python_name": "draw_sw_line", + "python_name": "sw_line", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -48662,7 +48662,7 @@ } } ], - "python_name": "draw_sw_mask_angle_init", + "python_name": "init", "receiver": "draw_sw_mask_angle_param_t", "return_type": { "kind": "primitive", @@ -48993,7 +48993,7 @@ } } ], - "python_name": "draw_sw_mask_fade_init", + "python_name": "init", "receiver": "draw_sw_mask_fade_param_t", "return_type": { "kind": "primitive", @@ -49194,7 +49194,7 @@ } } ], - "python_name": "draw_sw_mask_line_angle_init", + "python_name": "angle_init", "receiver": "draw_sw_mask_line_param_t", "return_type": { "kind": "primitive", @@ -49331,7 +49331,7 @@ } } ], - "python_name": "draw_sw_mask_line_points_init", + "python_name": "points_init", "receiver": "draw_sw_mask_line_param_t", "return_type": { "kind": "primitive", @@ -49429,7 +49429,7 @@ } } ], - "python_name": "draw_sw_mask_map_init", + "python_name": "init", "receiver": "draw_sw_mask_map_param_t", "return_type": { "kind": "primitive", @@ -49538,7 +49538,7 @@ } } ], - "python_name": "draw_sw_mask_radius_init", + "python_name": "init", "receiver": "draw_sw_mask_radius_param_t", "return_type": { "kind": "primitive", @@ -49613,7 +49613,7 @@ } } ], - "python_name": "draw_sw_mask_rect", + "python_name": "sw_mask_rect", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -49665,7 +49665,7 @@ } } ], - "python_name": "draw_sw_register_blend_handler", + "python_name": "register_blend_handler", "receiver": "draw_sw_custom_blend_handler_t", "return_type": { "kind": "primitive", @@ -50195,7 +50195,7 @@ } } ], - "python_name": "draw_sw_triangle", + "python_name": "sw_triangle", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -51259,7 +51259,7 @@ } } ], - "python_name": "draw_unit_draw_letter", + "python_name": "unit_draw_letter", "receiver": "draw_task_t", "return_type": { "kind": "primitive", @@ -53114,7 +53114,7 @@ } } ], - "python_name": "event_add", + "python_name": "add", "receiver": "event_list_t", "return_type": { "kind": "pointer", @@ -53434,7 +53434,7 @@ } } ], - "python_name": "event_get_count", + "python_name": "get_count", "receiver": "event_list_t", "return_type": { "kind": "identifier", @@ -53726,7 +53726,7 @@ } } ], - "python_name": "event_get_dsc", + "python_name": "get_dsc", "receiver": "event_list_t", "return_type": { "kind": "pointer", @@ -55086,7 +55086,7 @@ } } ], - "python_name": "event_push_and_send", + "python_name": "push_and_send", "receiver": "event_list_t", "return_type": { "kind": "identifier", @@ -55185,7 +55185,7 @@ } } ], - "python_name": "event_remove", + "python_name": "remove", "receiver": "event_list_t", "return_type": { "kind": "primitive", @@ -55237,7 +55237,7 @@ } } ], - "python_name": "event_remove_all", + "python_name": "remove_all", "receiver": "event_list_t", "return_type": { "kind": "primitive", @@ -55309,7 +55309,7 @@ } } ], - "python_name": "event_remove_dsc", + "python_name": "remove_dsc", "receiver": "event_list_t", "return_type": { "kind": "primitive", @@ -55398,7 +55398,7 @@ } } ], - "python_name": "event_send", + "python_name": "send", "receiver": "event_list_t", "return_type": { "kind": "identifier", @@ -55794,7 +55794,7 @@ } } ], - "python_name": "font_get_bitmap_fmt_txt", + "python_name": "get_bitmap_fmt_txt", "receiver": "font_glyph_dsc_t", "return_type": { "kind": "pointer", @@ -55908,7 +55908,7 @@ } } ], - "python_name": "font_get_glyph_bitmap", + "python_name": "get_glyph_bitmap", "receiver": "font_glyph_dsc_t", "return_type": { "kind": "pointer", @@ -56184,7 +56184,7 @@ } } ], - "python_name": "font_get_glyph_static_bitmap", + "python_name": "get_glyph_static_bitmap", "receiver": "font_glyph_dsc_t", "return_type": { "kind": "pointer", @@ -56386,7 +56386,7 @@ } } ], - "python_name": "font_glyph_release_draw_data", + "python_name": "release_draw_data", "receiver": "font_glyph_dsc_t", "return_type": { "kind": "primitive", @@ -56742,7 +56742,7 @@ } } ], - "python_name": "fs_close", + "python_name": "close", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -57187,7 +57187,7 @@ } } ], - "python_name": "fs_get_buffer_from_path", + "python_name": "get_buffer_from_path", "receiver": "fs_path_ex_t", "return_type": { "kind": "identifier", @@ -57484,7 +57484,7 @@ } } ], - "python_name": "fs_get_size", + "python_name": "get_size", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -57862,7 +57862,7 @@ } } ], - "python_name": "fs_make_path_from_buffer", + "python_name": "make_path_from_buffer", "receiver": "fs_path_ex_t", "return_type": { "kind": "primitive", @@ -57984,7 +57984,7 @@ } } ], - "python_name": "fs_open", + "python_name": "open", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -58281,7 +58281,7 @@ } } ], - "python_name": "fs_read", + "python_name": "read", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -58415,7 +58415,7 @@ } } ], - "python_name": "fs_seek", + "python_name": "seek", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -58487,7 +58487,7 @@ } } ], - "python_name": "fs_tell", + "python_name": "tell", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -58653,7 +58653,7 @@ } } ], - "python_name": "fs_write", + "python_name": "write", "receiver": "fs_file_t", "return_type": { "kind": "identifier", @@ -59620,7 +59620,7 @@ } } ], - "python_name": "grad_conical_init", + "python_name": "conical_init", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -59672,7 +59672,7 @@ } } ], - "python_name": "grad_horizontal_init", + "python_name": "horizontal_init", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -59819,7 +59819,7 @@ } } ], - "python_name": "grad_init_stops", + "python_name": "init_stops", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -59956,7 +59956,7 @@ } } ], - "python_name": "grad_linear_init", + "python_name": "linear_init", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -60093,7 +60093,7 @@ } } ], - "python_name": "grad_radial_init", + "python_name": "radial_init", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -60196,7 +60196,7 @@ } } ], - "python_name": "grad_radial_set_focal", + "python_name": "radial_set_focal", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -60248,7 +60248,7 @@ } } ], - "python_name": "grad_vertical_init", + "python_name": "vertical_init", "receiver": "grad_dsc_t", "return_type": { "kind": "primitive", @@ -67290,7 +67290,7 @@ } } ], - "python_name": "indev_gesture_detect_pinch", + "python_name": "detect_pinch", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -67379,7 +67379,7 @@ } } ], - "python_name": "indev_gesture_detect_rotation", + "python_name": "detect_rotation", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -67468,7 +67468,7 @@ } } ], - "python_name": "indev_gesture_detect_two_fingers_swipe", + "python_name": "detect_two_fingers_swipe", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -68081,7 +68081,7 @@ } } ], - "python_name": "indev_get_gesture_center_point", + "python_name": "get_gesture_center_point", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -68208,7 +68208,7 @@ } } ], - "python_name": "indev_get_gesture_primary_point", + "python_name": "get_gesture_primary_point", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -69231,7 +69231,7 @@ } } ], - "python_name": "indev_recognizer_is_active", + "python_name": "recognizer_is_active", "receiver": "indev_gesture_recognizer_t", "return_type": { "kind": "primitive", @@ -70303,7 +70303,7 @@ } } ], - "python_name": "indev_set_gesture_data", + "python_name": "set_gesture_data", "receiver": "indev_data_t", "return_type": { "kind": "primitive", @@ -74779,7 +74779,7 @@ } } ], - "python_name": "layout_create", + "python_name": "create", "receiver": "layout_callbacks_t", "return_type": { "kind": "identifier", @@ -78069,7 +78069,7 @@ } } ], - "python_name": "mem_monitor", + "python_name": "monitor", "receiver": "mem_monitor_t", "return_type": { "kind": "primitive", @@ -121392,7 +121392,7 @@ } } ], - "python_name": "point_from_precise", + "python_name": "from_precise", "receiver": "point_precise_t", "return_type": { "kind": "identifier", @@ -123127,7 +123127,7 @@ } } ], - "python_name": "rb_maximum_from", + "python_name": "maximum_from", "receiver": "rb_node_t", "return_type": { "kind": "pointer", @@ -123237,7 +123237,7 @@ } } ], - "python_name": "rb_minimum_from", + "python_name": "minimum_from", "receiver": "rb_node_t", "return_type": { "kind": "pointer", @@ -156971,7 +156971,7 @@ } } ], - "python_name": "tree_node_create", + "python_name": "node_create", "receiver": "tree_class_t", "return_type": { "kind": "pointer", @@ -157169,7 +157169,7 @@ } } ], - "python_name": "tree_walk", + "python_name": "walk", "receiver": "tree_node_t", "return_type": { "kind": "primitive", @@ -162258,7 +162258,7 @@ "line": 5257 }, "methods": [ - "cache_create" + "create" ], "python_name": "cache_class_t", "typedef_names": [ @@ -165308,12 +165308,12 @@ "line": 5226 }, "methods": [ - "draw_buf_align_ex", - "draw_buf_create_ex", - "draw_buf_dup_ex", - "draw_buf_init_with_default_handlers", - "draw_buf_width_to_stride_ex", - "init" + "align_ex", + "create_ex", + "dup_ex", + "init", + "init_with_default_handlers", + "width_to_stride_ex" ], "python_name": "draw_buf_handlers_t", "typedef_names": [ @@ -168268,7 +168268,7 @@ "line": 5073 }, "methods": [ - "draw_sw_register_blend_handler" + "register_blend_handler" ], "python_name": "draw_sw_custom_blend_handler_t", "typedef_names": [ @@ -168352,7 +168352,7 @@ "line": 5423 }, "methods": [ - "draw_sw_mask_angle_init" + "init" ], "python_name": "draw_sw_mask_angle_param_t", "typedef_names": [ @@ -168447,7 +168447,7 @@ "line": 5443 }, "methods": [ - "draw_sw_mask_fade_init" + "init" ], "python_name": "draw_sw_mask_fade_param_t", "typedef_names": [ @@ -168581,8 +168581,8 @@ "line": 5408 }, "methods": [ - "draw_sw_mask_line_angle_init", - "draw_sw_mask_line_points_init" + "angle_init", + "points_init" ], "python_name": "draw_sw_mask_line_param_t", "typedef_names": [ @@ -168630,7 +168630,7 @@ "line": 5453 }, "methods": [ - "draw_sw_mask_map_init" + "init" ], "python_name": "draw_sw_mask_map_param_t", "typedef_names": [ @@ -168812,7 +168812,7 @@ "line": 5434 }, "methods": [ - "draw_sw_mask_radius_init" + "init" ], "python_name": "draw_sw_mask_radius_param_t", "typedef_names": [ @@ -169179,30 +169179,12 @@ "line": 5346 }, "methods": [ - "draw_get_dependent_count", - "draw_image_normal_helper", - "draw_image_tiled_helper", - "draw_label_iterate_characters", - "draw_line_iterate", - "draw_sw_arc", - "draw_sw_blend", - "draw_sw_blur", - "draw_sw_border", - "draw_sw_box_shadow", - "draw_sw_fill", - "draw_sw_image", - "draw_sw_label", - "draw_sw_layer", - "draw_sw_letter", - "draw_sw_line", - "draw_sw_mask_rect", - "draw_sw_triangle", - "draw_unit_draw_letter", "get_arc_dsc", "get_area", "get_blur_dsc", "get_border_dsc", "get_box_shadow_dsc", + "get_dependent_count", "get_draw_dsc", "get_fill_dsc", "get_image_dsc", @@ -169210,7 +169192,25 @@ "get_line_dsc", "get_mask_rect_dsc", "get_triangle_dsc", - "get_type" + "get_type", + "image_normal_helper", + "image_tiled_helper", + "label_iterate_characters", + "line_iterate", + "sw_arc", + "sw_blend", + "sw_blur", + "sw_border", + "sw_box_shadow", + "sw_fill", + "sw_image", + "sw_label", + "sw_layer", + "sw_letter", + "sw_line", + "sw_mask_rect", + "sw_triangle", + "unit_draw_letter" ], "python_name": "draw_task_t", "typedef_names": [ @@ -169975,14 +169975,14 @@ "line": 1926 }, "methods": [ - "event_add", - "event_get_count", - "event_get_dsc", - "event_push_and_send", - "event_remove", - "event_remove_all", - "event_remove_dsc", - "event_send" + "add", + "get_count", + "get_dsc", + "push_and_send", + "remove", + "remove_all", + "remove_dsc", + "send" ], "python_name": "event_list_t", "typedef_names": [ @@ -171186,10 +171186,10 @@ "line": 1217 }, "methods": [ - "font_get_bitmap_fmt_txt", - "font_get_glyph_bitmap", - "font_get_glyph_static_bitmap", - "font_glyph_release_draw_data" + "get_bitmap_fmt_txt", + "get_glyph_bitmap", + "get_glyph_static_bitmap", + "release_draw_data" ], "python_name": "font_glyph_dsc_t", "typedef_names": [ @@ -172776,13 +172776,13 @@ "line": 3232 }, "methods": [ - "fs_close", - "fs_get_size", - "fs_open", - "fs_read", - "fs_seek", - "fs_tell", - "fs_write" + "close", + "get_size", + "open", + "read", + "seek", + "tell", + "write" ], "python_name": "fs_file_t", "typedef_names": [ @@ -172825,8 +172825,8 @@ "line": 3241 }, "methods": [ - "fs_get_buffer_from_path", - "fs_make_path_from_buffer" + "get_buffer_from_path", + "make_path_from_buffer" ], "python_name": "fs_path_ex_t", "typedef_names": [ @@ -173579,13 +173579,13 @@ "line": 1338 }, "methods": [ - "grad_conical_init", - "grad_horizontal_init", - "grad_init_stops", - "grad_linear_init", - "grad_radial_init", - "grad_radial_set_focal", - "grad_vertical_init" + "conical_init", + "horizontal_init", + "init_stops", + "linear_init", + "radial_init", + "radial_set_focal", + "vertical_init" ], "python_name": "grad_dsc_t", "typedef_names": [ @@ -175301,7 +175301,7 @@ "line": 3705 }, "methods": [ - "indev_set_gesture_data" + "set_gesture_data" ], "python_name": "indev_data_t", "typedef_names": [ @@ -175474,12 +175474,12 @@ "line": 3979 }, "methods": [ - "indev_gesture_detect_pinch", - "indev_gesture_detect_rotation", - "indev_gesture_detect_two_fingers_swipe", - "indev_get_gesture_center_point", - "indev_get_gesture_primary_point", - "indev_recognizer_is_active" + "detect_pinch", + "detect_rotation", + "detect_two_fingers_swipe", + "get_gesture_center_point", + "get_gesture_primary_point", + "recognizer_is_active" ], "python_name": "indev_gesture_recognizer_t", "typedef_names": [ @@ -176721,7 +176721,7 @@ "line": 1375 }, "methods": [ - "layout_create" + "create" ], "python_name": "layout_callbacks_t", "typedef_names": [ @@ -177241,7 +177241,7 @@ }, "methods": [ "core", - "mem_monitor" + "monitor" ], "python_name": "mem_monitor_t", "typedef_names": [ @@ -179546,7 +179546,7 @@ "line": 690 }, "methods": [ - "point_from_precise", + "from_precise", "set", "swap" ], @@ -179793,8 +179793,8 @@ "line": 6074 }, "methods": [ - "rb_maximum_from", - "rb_minimum_from" + "maximum_from", + "minimum_from" ], "python_name": "rb_node_t", "typedef_names": [ @@ -183237,7 +183237,7 @@ "line": 1107 }, "methods": [ - "tree_node_create" + "node_create" ], "python_name": "tree_class_t", "typedef_names": [ @@ -183338,7 +183338,7 @@ }, "methods": [ "delete", - "tree_walk" + "walk" ], "python_name": "tree_node_t", "typedef_names": [ diff --git a/generated/lvgl.pyi b/generated/lvgl.pyi index a2caf67..8a4a36c 100644 --- a/generated/lvgl.pyi +++ b/generated/lvgl.pyi @@ -1023,7 +1023,7 @@ class cache_class_t(_Struct): get_victim_cb: Callable[[cache_t, Any], cache_entry_t] reserve_cond_cb: Callable[[cache_t, Any, int, Any], CACHE_RESERVE_COND | int] iter_create_cb: Callable[[cache_t], iter_t] - def cache_create(self, node_size: int, max_size: int, ops: cache_ops_t) -> cache_t: ... + def create(self, node_size: int, max_size: int, ops: cache_ops_t) -> cache_t: ... class cache_entry_t(_Struct): cache: cache_t @@ -1349,12 +1349,12 @@ class draw_buf_handlers_t(_Struct): invalidate_cache_cb: Callable[[draw_buf_t, area_t], None] flush_cache_cb: Callable[[draw_buf_t, area_t], None] width_to_stride_cb: Callable[[int, COLOR_FORMAT | int], int] - def draw_buf_align_ex(self, buf: Any, color_format: COLOR_FORMAT | int) -> Any: ... - def draw_buf_create_ex(self, w: int, h: int, cf: COLOR_FORMAT | int, stride: int) -> draw_buf_t: ... - def draw_buf_dup_ex(self, draw_buf: draw_buf_t) -> draw_buf_t: ... - def draw_buf_init_with_default_handlers(self) -> None: ... - def draw_buf_width_to_stride_ex(self, w: int, color_format: COLOR_FORMAT | int) -> int: ... + def align_ex(self, buf: Any, color_format: COLOR_FORMAT | int) -> Any: ... + def create_ex(self, w: int, h: int, cf: COLOR_FORMAT | int, stride: int) -> draw_buf_t: ... + def dup_ex(self, draw_buf: draw_buf_t) -> draw_buf_t: ... def init(self, buf_malloc_cb: Callable[[int, COLOR_FORMAT | int], Any], buf_free_cb: Callable[[Any], None], buf_copy_cb: Callable[[draw_buf_t, area_t, draw_buf_t, area_t], None], align_pointer_cb: Callable[[Any, COLOR_FORMAT | int], Any], invalidate_cache_cb: Callable[[draw_buf_t, area_t], None], flush_cache_cb: Callable[[draw_buf_t, area_t], None], width_to_stride_cb: Callable[[int, COLOR_FORMAT | int], int]) -> None: ... + def init_with_default_handlers(self) -> None: ... + def width_to_stride_ex(self, w: int, color_format: COLOR_FORMAT | int) -> int: ... class draw_buf_t(_Struct): header: image_header_t @@ -1573,7 +1573,7 @@ class draw_sw_blend_dsc_t(_Struct): class draw_sw_custom_blend_handler_t(_Struct): dest_cf: COLOR_FORMAT | int handler: Callable[[draw_task_t, draw_sw_blend_dsc_t], None] - def draw_sw_register_blend_handler(self) -> int: ... + def register_blend_handler(self) -> int: ... class draw_sw_mask_angle_param_t(_Struct): dsc: draw_sw_mask_common_dsc_t @@ -1581,7 +1581,7 @@ class draw_sw_mask_angle_param_t(_Struct): start_line: draw_sw_mask_line_param_t end_line: draw_sw_mask_line_param_t delta_deg: int - def draw_sw_mask_angle_init(self, vertex_x: int, vertex_y: int, start_angle: int, end_angle: int) -> None: ... + def init(self, vertex_x: int, vertex_y: int, start_angle: int, end_angle: int) -> None: ... class draw_sw_mask_common_dsc_t(_Struct): cb: Callable[[Any, int, int, int, Any], DRAW_SW_MASK_RES | int] @@ -1590,7 +1590,7 @@ class draw_sw_mask_common_dsc_t(_Struct): class draw_sw_mask_fade_param_t(_Struct): dsc: draw_sw_mask_common_dsc_t cfg: Any - def draw_sw_mask_fade_init(self, coords: area_t, opa_top: int, y_top: int, opa_bottom: int, y_bottom: int) -> None: ... + def init(self, coords: area_t, opa_top: int, y_top: int, opa_bottom: int, y_bottom: int) -> None: ... class draw_sw_mask_line_param_t(_Struct): dsc: draw_sw_mask_common_dsc_t @@ -1602,13 +1602,13 @@ class draw_sw_mask_line_param_t(_Struct): spx: int flat: int inv: int - def draw_sw_mask_line_angle_init(self, px: int, py: int, angle: int, side: DRAW_SW_MASK_LINE_SIDE | int) -> None: ... - def draw_sw_mask_line_points_init(self, p1x: int, p1y: int, p2x: int, p2y: int, side: DRAW_SW_MASK_LINE_SIDE | int) -> None: ... + def angle_init(self, px: int, py: int, angle: int, side: DRAW_SW_MASK_LINE_SIDE | int) -> None: ... + def points_init(self, p1x: int, p1y: int, p2x: int, p2y: int, side: DRAW_SW_MASK_LINE_SIDE | int) -> None: ... class draw_sw_mask_map_param_t(_Struct): dsc: draw_sw_mask_common_dsc_t cfg: Any - def draw_sw_mask_map_init(self, coords: area_t, map: Any) -> None: ... + def init(self, coords: area_t, map: Any) -> None: ... class draw_sw_mask_radius_circle_dsc_t(_Struct): buf: Any @@ -1623,7 +1623,7 @@ class draw_sw_mask_radius_param_t(_Struct): dsc: draw_sw_mask_common_dsc_t cfg: Any circle: draw_sw_mask_radius_circle_dsc_t - def draw_sw_mask_radius_init(self, rect: area_t, radius: int, inv: int) -> None: ... + def init(self, rect: area_t, radius: int, inv: int) -> None: ... class draw_task_t(_Struct): next: draw_task_t @@ -1639,30 +1639,12 @@ class draw_task_t(_Struct): opa: int preferred_draw_unit_id: int preference_score: int - def draw_get_dependent_count(self) -> int: ... - def draw_image_normal_helper(self, draw_dsc: draw_image_dsc_t, coords: area_t, draw_core_cb: Callable[[draw_task_t, draw_image_dsc_t, image_decoder_dsc_t, draw_image_sup_t, area_t, area_t], None], decoder_args: image_decoder_args_t) -> None: ... - def draw_image_tiled_helper(self, draw_dsc: draw_image_dsc_t, coords: area_t, draw_core_cb: Callable[[draw_task_t, draw_image_dsc_t, image_decoder_dsc_t, draw_image_sup_t, area_t, area_t], None], decoder_args: image_decoder_args_t) -> None: ... - def draw_label_iterate_characters(self, dsc: draw_label_dsc_t, coords: area_t, cb: Callable[[draw_task_t, draw_glyph_dsc_t, draw_fill_dsc_t, area_t], None]) -> None: ... - def draw_line_iterate(self, dsc: draw_line_dsc_t, draw_line_cb: Callable[[draw_task_t, draw_line_dsc_t], None]) -> None: ... - def draw_sw_arc(self, dsc: draw_arc_dsc_t, coords: area_t) -> None: ... - def draw_sw_blend(self, dsc: draw_sw_blend_dsc_t) -> None: ... - def draw_sw_blur(self, dsc: draw_blur_dsc_t, coords: area_t) -> None: ... - def draw_sw_border(self, dsc: draw_border_dsc_t, coords: area_t) -> None: ... - def draw_sw_box_shadow(self, dsc: draw_box_shadow_dsc_t, coords: area_t) -> None: ... - def draw_sw_fill(self, dsc: draw_fill_dsc_t, coords: area_t) -> None: ... - def draw_sw_image(self, draw_dsc: draw_image_dsc_t, coords: area_t) -> None: ... - def draw_sw_label(self, dsc: draw_label_dsc_t, coords: area_t) -> None: ... - def draw_sw_layer(self, draw_dsc: draw_image_dsc_t, coords: area_t) -> None: ... - def draw_sw_letter(self, dsc: draw_letter_dsc_t, coords: area_t) -> None: ... - def draw_sw_line(self, dsc: draw_line_dsc_t) -> None: ... - def draw_sw_mask_rect(self, dsc: draw_mask_rect_dsc_t) -> None: ... - def draw_sw_triangle(self, dsc: draw_triangle_dsc_t) -> None: ... - def draw_unit_draw_letter(self, dsc: draw_glyph_dsc_t, pos: point_t, font: font_t, letter: int, cb: Callable[[draw_task_t, draw_glyph_dsc_t, draw_fill_dsc_t, area_t], None]) -> None: ... def get_arc_dsc(self) -> draw_arc_dsc_t: ... def get_area(self, area: area_t) -> None: ... def get_blur_dsc(self) -> draw_blur_dsc_t: ... def get_border_dsc(self) -> draw_border_dsc_t: ... def get_box_shadow_dsc(self) -> draw_box_shadow_dsc_t: ... + def get_dependent_count(self) -> int: ... def get_draw_dsc(self) -> Any: ... def get_fill_dsc(self) -> draw_fill_dsc_t: ... def get_image_dsc(self) -> draw_image_dsc_t: ... @@ -1671,6 +1653,24 @@ class draw_task_t(_Struct): def get_mask_rect_dsc(self) -> draw_mask_rect_dsc_t: ... def get_triangle_dsc(self) -> draw_triangle_dsc_t: ... def get_type(self) -> DRAW_TASK_TYPE | int: ... + def image_normal_helper(self, draw_dsc: draw_image_dsc_t, coords: area_t, draw_core_cb: Callable[[draw_task_t, draw_image_dsc_t, image_decoder_dsc_t, draw_image_sup_t, area_t, area_t], None], decoder_args: image_decoder_args_t) -> None: ... + def image_tiled_helper(self, draw_dsc: draw_image_dsc_t, coords: area_t, draw_core_cb: Callable[[draw_task_t, draw_image_dsc_t, image_decoder_dsc_t, draw_image_sup_t, area_t, area_t], None], decoder_args: image_decoder_args_t) -> None: ... + def label_iterate_characters(self, dsc: draw_label_dsc_t, coords: area_t, cb: Callable[[draw_task_t, draw_glyph_dsc_t, draw_fill_dsc_t, area_t], None]) -> None: ... + def line_iterate(self, dsc: draw_line_dsc_t, draw_line_cb: Callable[[draw_task_t, draw_line_dsc_t], None]) -> None: ... + def sw_arc(self, dsc: draw_arc_dsc_t, coords: area_t) -> None: ... + def sw_blend(self, dsc: draw_sw_blend_dsc_t) -> None: ... + def sw_blur(self, dsc: draw_blur_dsc_t, coords: area_t) -> None: ... + def sw_border(self, dsc: draw_border_dsc_t, coords: area_t) -> None: ... + def sw_box_shadow(self, dsc: draw_box_shadow_dsc_t, coords: area_t) -> None: ... + def sw_fill(self, dsc: draw_fill_dsc_t, coords: area_t) -> None: ... + def sw_image(self, draw_dsc: draw_image_dsc_t, coords: area_t) -> None: ... + def sw_label(self, dsc: draw_label_dsc_t, coords: area_t) -> None: ... + def sw_layer(self, draw_dsc: draw_image_dsc_t, coords: area_t) -> None: ... + def sw_letter(self, dsc: draw_letter_dsc_t, coords: area_t) -> None: ... + def sw_line(self, dsc: draw_line_dsc_t) -> None: ... + def sw_mask_rect(self, dsc: draw_mask_rect_dsc_t) -> None: ... + def sw_triangle(self, dsc: draw_triangle_dsc_t) -> None: ... + def unit_draw_letter(self, dsc: draw_glyph_dsc_t, pos: point_t, font: font_t, letter: int, cb: Callable[[draw_task_t, draw_glyph_dsc_t, draw_fill_dsc_t, area_t], None]) -> None: ... class draw_triangle_dsc_t(_Struct): base: draw_dsc_base_t @@ -1701,14 +1701,14 @@ class event_list_t(_Struct): array: array_t is_traversing: int has_marked_deleting: int - def event_add(self, cb: Callable[[event_t], None], filter: EVENT | int, user_data: Any) -> event_dsc_t: ... - def event_get_count(self) -> int: ... - def event_get_dsc(self, index: int) -> event_dsc_t: ... - def event_push_and_send(self, code: EVENT | int, original_target: Any, param: Any) -> RESULT | int: ... - def event_remove(self, index: int) -> int: ... - def event_remove_all(self) -> None: ... - def event_remove_dsc(self, dsc: event_dsc_t) -> int: ... - def event_send(self, e: event_t, preprocess: int) -> RESULT | int: ... + def add(self, cb: Callable[[event_t], None], filter: EVENT | int, user_data: Any) -> event_dsc_t: ... + def get_count(self) -> int: ... + def get_dsc(self, index: int) -> event_dsc_t: ... + def push_and_send(self, code: EVENT | int, original_target: Any, param: Any) -> RESULT | int: ... + def remove(self, index: int) -> int: ... + def remove_all(self) -> None: ... + def remove_dsc(self, dsc: event_dsc_t) -> int: ... + def send(self, e: event_t, preprocess: int) -> RESULT | int: ... class event_t(_Struct): current_target: Any @@ -1772,10 +1772,10 @@ class font_glyph_dsc_t(_Struct): outline_stroke_width: int gid: Any entry: cache_entry_t - def font_get_bitmap_fmt_txt(self, draw_buf: draw_buf_t) -> Any: ... - def font_get_glyph_bitmap(self, draw_buf: draw_buf_t) -> Any: ... - def font_get_glyph_static_bitmap(self) -> Any: ... - def font_glyph_release_draw_data(self) -> None: ... + def get_bitmap_fmt_txt(self, draw_buf: draw_buf_t) -> Any: ... + def get_glyph_bitmap(self, draw_buf: draw_buf_t) -> Any: ... + def get_glyph_static_bitmap(self) -> Any: ... + def release_draw_data(self) -> None: ... class font_info_t(_Struct): name: str @@ -1841,18 +1841,18 @@ class fs_file_t(_Struct): file_d: Any drv: fs_drv_t cache: fs_file_cache_t - def fs_close(self) -> FS_RES | int: ... - def fs_get_size(self, size_res: Any) -> FS_RES | int: ... - def fs_open(self, path: str, mode: FS_MODE | int) -> FS_RES | int: ... - def fs_read(self, buf: Any, btr: int, br: Any) -> FS_RES | int: ... - def fs_seek(self, pos: int, whence: FS_SEEK | int) -> FS_RES | int: ... - def fs_tell(self, pos: Any) -> FS_RES | int: ... - def fs_write(self, buf: Any, btw: int, bw: Any) -> FS_RES | int: ... + def close(self) -> FS_RES | int: ... + def get_size(self, size_res: Any) -> FS_RES | int: ... + def open(self, path: str, mode: FS_MODE | int) -> FS_RES | int: ... + def read(self, buf: Any, btr: int, br: Any) -> FS_RES | int: ... + def seek(self, pos: int, whence: FS_SEEK | int) -> FS_RES | int: ... + def tell(self, pos: Any) -> FS_RES | int: ... + def write(self, buf: Any, btw: int, bw: Any) -> FS_RES | int: ... class fs_path_ex_t(_Struct): path: Sequence[int] - def fs_get_buffer_from_path(self, buffer: Any, size: Any) -> RESULT | int: ... - def fs_make_path_from_buffer(self, letter: int, buf: Any, size: int, ext: str) -> None: ... + def get_buffer_from_path(self, buffer: Any, size: Any) -> RESULT | int: ... + def make_path_from_buffer(self, letter: int, buf: Any, size: int, ext: str) -> None: ... class grad_dsc_t(_Struct): stops: Sequence[grad_stop_t] @@ -1861,13 +1861,13 @@ class grad_dsc_t(_Struct): extend: GRAD_EXTEND | int params: Any state: Any - def grad_conical_init(self, center_x: int, center_y: int, start_angle: int, end_angle: int, extend: GRAD_EXTEND | int) -> None: ... - def grad_horizontal_init(self) -> None: ... - def grad_init_stops(self, colors: color_t, opa: Sequence[int], fracs: Sequence[int], num_stops: int) -> None: ... - def grad_linear_init(self, from_x: int, from_y: int, to_x: int, to_y: int, extend: GRAD_EXTEND | int) -> None: ... - def grad_radial_init(self, center_x: int, center_y: int, to_x: int, to_y: int, extend: GRAD_EXTEND | int) -> None: ... - def grad_radial_set_focal(self, center_x: int, center_y: int, radius: int) -> None: ... - def grad_vertical_init(self) -> None: ... + def conical_init(self, center_x: int, center_y: int, start_angle: int, end_angle: int, extend: GRAD_EXTEND | int) -> None: ... + def horizontal_init(self) -> None: ... + def init_stops(self, colors: color_t, opa: Sequence[int], fracs: Sequence[int], num_stops: int) -> None: ... + def linear_init(self, from_x: int, from_y: int, to_x: int, to_y: int, extend: GRAD_EXTEND | int) -> None: ... + def radial_init(self, center_x: int, center_y: int, to_x: int, to_y: int, extend: GRAD_EXTEND | int) -> None: ... + def radial_set_focal(self, center_x: int, center_y: int, radius: int) -> None: ... + def vertical_init(self) -> None: ... class grad_stop_t(_Struct): color: color_t @@ -1981,7 +1981,7 @@ class indev_data_t(_Struct): enc_diff: int timestamp: int continue_reading: int - def indev_set_gesture_data(self, recognizer: indev_gesture_recognizer_t, _type: INDEV_GESTURE | int) -> None: ... + def set_gesture_data(self, recognizer: indev_gesture_recognizer_t, _type: INDEV_GESTURE | int) -> None: ... class indev_gesture_configuration_t(_Struct): ... @@ -1997,12 +1997,12 @@ class indev_gesture_recognizer_t(_Struct): two_fingers_swipe_dir: DIR | int config: indev_gesture_configuration_t recog_fn: Callable[[indev_gesture_recognizer_t, indev_touch_data_t, int], None] - def indev_gesture_detect_pinch(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... - def indev_gesture_detect_rotation(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... - def indev_gesture_detect_two_fingers_swipe(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... - def indev_get_gesture_center_point(self, point: point_t) -> None: ... - def indev_get_gesture_primary_point(self, point: point_t) -> None: ... - def indev_recognizer_is_active(self) -> int: ... + def detect_pinch(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... + def detect_rotation(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... + def detect_two_fingers_swipe(self, touches: indev_touch_data_t, touch_cnt: int) -> None: ... + def get_gesture_center_point(self, point: point_t) -> None: ... + def get_gesture_primary_point(self, point: point_t) -> None: ... + def recognizer_is_active(self) -> int: ... class indev_gesture_t(_Struct): ... @@ -2139,7 +2139,7 @@ class layer_t(_Struct): class layout_callbacks_t(_Struct): layout_update_cb: Callable[[obj, Any], None] get_min_size_cb: Callable[[obj, Any, int, Any], int] - def layout_create(self, user_data: Any) -> int: ... + def create(self, user_data: Any) -> int: ... class ll_t(_Struct): n_size: int @@ -2174,7 +2174,7 @@ class mem_monitor_t(_Struct): used_pct: int frag_pct: int def core(self) -> None: ... - def mem_monitor(self) -> None: ... + def monitor(self) -> None: ... class obj_class_t(_Struct): base_class: obj_class_t @@ -2214,7 +2214,7 @@ class observer_t(_Struct): class point_precise_t(_Struct): x: float y: float - def point_from_precise(self) -> point_t: ... + def from_precise(self) -> point_t: ... def set(self, x: float, y: float) -> None: ... def swap(self, p2: point_precise_t) -> None: ... @@ -2233,8 +2233,8 @@ class rb_node_t(_Struct): right: rb_node_t color: RB_COLOR | int data: Any - def rb_maximum_from(self) -> rb_node_t: ... - def rb_minimum_from(self) -> rb_node_t: ... + def maximum_from(self) -> rb_node_t: ... + def minimum_from(self) -> rb_node_t: ... class rb_t(_Struct): root: rb_node_t @@ -2556,7 +2556,7 @@ class tree_class_t(_Struct): instance_size: int constructor_cb: Callable[[tree_class_t, tree_node_t], None] destructor_cb: Callable[[tree_class_t, tree_node_t], None] - def tree_node_create(self, parent: tree_node_t) -> tree_node_t: ... + def node_create(self, parent: tree_node_t) -> tree_node_t: ... class tree_node_t(_Struct): parent: tree_node_t @@ -2565,7 +2565,7 @@ class tree_node_t(_Struct): child_cap: int class_p: tree_class_t def delete(self) -> None: ... - def tree_walk(self, mode: int, cb: Callable[[tree_node_t, Any], int], bcb: Callable[[tree_node_t, Any], int], acb: Callable[[tree_node_t, Any], None], user_data: Any) -> int: ... + def walk(self, mode: int, cb: Callable[[tree_node_t, Any], int], bcb: Callable[[tree_node_t, Any], int], acb: Callable[[tree_node_t, Any], None], user_data: Any) -> int: ... class animimg(obj): def __init__(self, parent: obj | None = ...) -> None: ... diff --git a/generated/lvgl_python.c b/generated/lvgl_python.c index c231c7e..ee7b97d 100644 --- a/generated/lvgl_python.c +++ b/generated/lvgl_python.c @@ -7675,6 +7675,613 @@ static inline PyObject *mp_read_ptr_lv_grad_stop_t(void *field) #define mp_read_lv_grad_stop_t(field) lv_to_mp_struct_own(&py_lv_grad_stop_t_type, copy_buffer(&field, sizeof(lv_grad_stop_t))) #define mp_read_byref_lv_grad_stop_t(field) mp_read_ptr_lv_grad_stop_t(&field) +typedef __typeof__( ((lv_grad_dsc_t*)(0))->params ) lv_grad_dsc_params_t; +typedef __typeof__( ((lv_grad_dsc_params_t*)(0))->linear ) lv_grad_dsc_params_linear_t; + +/* + * Struct lv_point_t (CPython) + */ + +extern PyMethodDef py_lv_point_t_methods[]; + +static PyObject *py_lv_point_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_point_t *data = (lv_point_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "x") == 0) return mp_obj_new_int(data->x); + if (strcmp(attr, "y") == 0) return mp_obj_new_int(data->y); + for (PyMethodDef *m = py_lv_point_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_point_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_point_t *data = (lv_point_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_point_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "x") == 0) { data->x = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "y") == 0) { data->y = (int32_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_point_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_point_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_point_t)); +} + +static void py_lv_point_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_point_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_point_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_point_t_dealloc, + .tp_getattro = (getter)py_lv_point_t_getattro, + .tp_setattro = (setter)py_lv_point_t_setattro, + .tp_new = py_lv_point_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_point_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_point_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_point_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_point_t*)self->data; +} + +static lv_point_t mp_write_scratch_lv_point_t; + +static inline void* mp_write_value_ptr_lv_point_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_point_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_point_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_point_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_point_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_point_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_point_t or dict, got None"); + } + memset(&mp_write_scratch_lv_point_t, 0, sizeof(lv_point_t)); + return &mp_write_scratch_lv_point_t; +} + +#define mp_write_lv_point_t(struct_obj) (*((lv_point_t*)mp_write_value_ptr_lv_point_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_point_t(void *field) +{ + return lv_to_mp_struct(&py_lv_point_t_type, field); +} + +#define mp_read_lv_point_t(field) lv_to_mp_struct_own(&py_lv_point_t_type, copy_buffer(&field, sizeof(lv_point_t))) +#define mp_read_byref_lv_point_t(field) mp_read_ptr_lv_point_t(&field) + + +/* + * Struct lv_grad_dsc_params_linear_t (CPython) + */ + +extern PyMethodDef py_lv_grad_dsc_params_linear_t_methods[]; + +static PyObject *py_lv_grad_dsc_params_linear_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_linear_t *data = (lv_grad_dsc_params_linear_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "start") == 0) return mp_read_byref_lv_point_t(data->start); + if (strcmp(attr, "end") == 0) return mp_read_byref_lv_point_t(data->end); + for (PyMethodDef *m = py_lv_grad_dsc_params_linear_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_grad_dsc_params_linear_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_linear_t *data = (lv_grad_dsc_params_linear_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_grad_dsc_params_linear_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "start") == 0) { data->start = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "end") == 0) { data->end = mp_write_lv_point_t(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_grad_dsc_params_linear_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_grad_dsc_params_linear_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_grad_dsc_params_linear_t)); +} + +static void py_lv_grad_dsc_params_linear_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_grad_dsc_params_linear_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_grad_dsc_params_linear_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_grad_dsc_params_linear_t_dealloc, + .tp_getattro = (getter)py_lv_grad_dsc_params_linear_t_getattro, + .tp_setattro = (setter)py_lv_grad_dsc_params_linear_t_setattro, + .tp_new = py_lv_grad_dsc_params_linear_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_grad_dsc_params_linear_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_grad_dsc_params_linear_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_linear_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_grad_dsc_params_linear_t*)self->data; +} + +static lv_grad_dsc_params_linear_t mp_write_scratch_lv_grad_dsc_params_linear_t; + +static inline void* mp_write_value_ptr_lv_grad_dsc_params_linear_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_grad_dsc_params_linear_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_grad_dsc_params_linear_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_grad_dsc_params_linear_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_grad_dsc_params_linear_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_grad_dsc_params_linear_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_linear_t or dict, got None"); + } + memset(&mp_write_scratch_lv_grad_dsc_params_linear_t, 0, sizeof(lv_grad_dsc_params_linear_t)); + return &mp_write_scratch_lv_grad_dsc_params_linear_t; +} + +#define mp_write_lv_grad_dsc_params_linear_t(struct_obj) (*((lv_grad_dsc_params_linear_t*)mp_write_value_ptr_lv_grad_dsc_params_linear_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_grad_dsc_params_linear_t(void *field) +{ + return lv_to_mp_struct(&py_lv_grad_dsc_params_linear_t_type, field); +} + +#define mp_read_lv_grad_dsc_params_linear_t(field) lv_to_mp_struct_own(&py_lv_grad_dsc_params_linear_t_type, copy_buffer(&field, sizeof(lv_grad_dsc_params_linear_t))) +#define mp_read_byref_lv_grad_dsc_params_linear_t(field) mp_read_ptr_lv_grad_dsc_params_linear_t(&field) + +typedef __typeof__( ((lv_grad_dsc_params_t*)(0))->radial ) lv_grad_dsc_params_radial_t; + +/* + * Struct lv_grad_dsc_params_radial_t (CPython) + */ + +extern PyMethodDef py_lv_grad_dsc_params_radial_t_methods[]; + +static PyObject *py_lv_grad_dsc_params_radial_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_radial_t *data = (lv_grad_dsc_params_radial_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "focal") == 0) return mp_read_byref_lv_point_t(data->focal); + if (strcmp(attr, "focal_extent") == 0) return mp_read_byref_lv_point_t(data->focal_extent); + if (strcmp(attr, "end") == 0) return mp_read_byref_lv_point_t(data->end); + if (strcmp(attr, "end_extent") == 0) return mp_read_byref_lv_point_t(data->end_extent); + for (PyMethodDef *m = py_lv_grad_dsc_params_radial_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_grad_dsc_params_radial_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_radial_t *data = (lv_grad_dsc_params_radial_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_grad_dsc_params_radial_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "focal") == 0) { data->focal = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "focal_extent") == 0) { data->focal_extent = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "end") == 0) { data->end = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "end_extent") == 0) { data->end_extent = mp_write_lv_point_t(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_grad_dsc_params_radial_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_grad_dsc_params_radial_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_grad_dsc_params_radial_t)); +} + +static void py_lv_grad_dsc_params_radial_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_grad_dsc_params_radial_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_grad_dsc_params_radial_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_grad_dsc_params_radial_t_dealloc, + .tp_getattro = (getter)py_lv_grad_dsc_params_radial_t_getattro, + .tp_setattro = (setter)py_lv_grad_dsc_params_radial_t_setattro, + .tp_new = py_lv_grad_dsc_params_radial_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_grad_dsc_params_radial_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_grad_dsc_params_radial_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_radial_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_grad_dsc_params_radial_t*)self->data; +} + +static lv_grad_dsc_params_radial_t mp_write_scratch_lv_grad_dsc_params_radial_t; + +static inline void* mp_write_value_ptr_lv_grad_dsc_params_radial_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_grad_dsc_params_radial_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_grad_dsc_params_radial_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_grad_dsc_params_radial_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_grad_dsc_params_radial_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_grad_dsc_params_radial_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_radial_t or dict, got None"); + } + memset(&mp_write_scratch_lv_grad_dsc_params_radial_t, 0, sizeof(lv_grad_dsc_params_radial_t)); + return &mp_write_scratch_lv_grad_dsc_params_radial_t; +} + +#define mp_write_lv_grad_dsc_params_radial_t(struct_obj) (*((lv_grad_dsc_params_radial_t*)mp_write_value_ptr_lv_grad_dsc_params_radial_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_grad_dsc_params_radial_t(void *field) +{ + return lv_to_mp_struct(&py_lv_grad_dsc_params_radial_t_type, field); +} + +#define mp_read_lv_grad_dsc_params_radial_t(field) lv_to_mp_struct_own(&py_lv_grad_dsc_params_radial_t_type, copy_buffer(&field, sizeof(lv_grad_dsc_params_radial_t))) +#define mp_read_byref_lv_grad_dsc_params_radial_t(field) mp_read_ptr_lv_grad_dsc_params_radial_t(&field) + +typedef __typeof__( ((lv_grad_dsc_params_t*)(0))->conical ) lv_grad_dsc_params_conical_t; + +/* + * Struct lv_grad_dsc_params_conical_t (CPython) + */ + +extern PyMethodDef py_lv_grad_dsc_params_conical_t_methods[]; + +static PyObject *py_lv_grad_dsc_params_conical_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_conical_t *data = (lv_grad_dsc_params_conical_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "center") == 0) return mp_read_byref_lv_point_t(data->center); + if (strcmp(attr, "start_angle") == 0) return mp_obj_new_int(data->start_angle); + if (strcmp(attr, "end_angle") == 0) return mp_obj_new_int(data->end_angle); + for (PyMethodDef *m = py_lv_grad_dsc_params_conical_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_grad_dsc_params_conical_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_conical_t *data = (lv_grad_dsc_params_conical_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_grad_dsc_params_conical_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "center") == 0) { data->center = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "start_angle") == 0) { data->start_angle = (int16_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "end_angle") == 0) { data->end_angle = (int16_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_grad_dsc_params_conical_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_grad_dsc_params_conical_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_grad_dsc_params_conical_t)); +} + +static void py_lv_grad_dsc_params_conical_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_grad_dsc_params_conical_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_grad_dsc_params_conical_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_grad_dsc_params_conical_t_dealloc, + .tp_getattro = (getter)py_lv_grad_dsc_params_conical_t_getattro, + .tp_setattro = (setter)py_lv_grad_dsc_params_conical_t_setattro, + .tp_new = py_lv_grad_dsc_params_conical_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_grad_dsc_params_conical_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_grad_dsc_params_conical_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_conical_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_grad_dsc_params_conical_t*)self->data; +} + +static lv_grad_dsc_params_conical_t mp_write_scratch_lv_grad_dsc_params_conical_t; + +static inline void* mp_write_value_ptr_lv_grad_dsc_params_conical_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_grad_dsc_params_conical_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_grad_dsc_params_conical_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_grad_dsc_params_conical_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_grad_dsc_params_conical_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_grad_dsc_params_conical_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_conical_t or dict, got None"); + } + memset(&mp_write_scratch_lv_grad_dsc_params_conical_t, 0, sizeof(lv_grad_dsc_params_conical_t)); + return &mp_write_scratch_lv_grad_dsc_params_conical_t; +} + +#define mp_write_lv_grad_dsc_params_conical_t(struct_obj) (*((lv_grad_dsc_params_conical_t*)mp_write_value_ptr_lv_grad_dsc_params_conical_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_grad_dsc_params_conical_t(void *field) +{ + return lv_to_mp_struct(&py_lv_grad_dsc_params_conical_t_type, field); +} + +#define mp_read_lv_grad_dsc_params_conical_t(field) lv_to_mp_struct_own(&py_lv_grad_dsc_params_conical_t_type, copy_buffer(&field, sizeof(lv_grad_dsc_params_conical_t))) +#define mp_read_byref_lv_grad_dsc_params_conical_t(field) mp_read_ptr_lv_grad_dsc_params_conical_t(&field) + + +/* + * Struct lv_grad_dsc_params_t (CPython) + */ + +extern PyMethodDef py_lv_grad_dsc_params_t_methods[]; + +static PyObject *py_lv_grad_dsc_params_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_t *data = (lv_grad_dsc_params_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "linear") == 0) return mp_read_byref_lv_grad_dsc_params_linear_t(data->linear); + if (strcmp(attr, "radial") == 0) return mp_read_byref_lv_grad_dsc_params_radial_t(data->radial); + if (strcmp(attr, "conical") == 0) return mp_read_byref_lv_grad_dsc_params_conical_t(data->conical); + for (PyMethodDef *m = py_lv_grad_dsc_params_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_grad_dsc_params_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_grad_dsc_params_t *data = (lv_grad_dsc_params_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_grad_dsc_params_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "linear") == 0) { data->linear = mp_write_lv_grad_dsc_params_linear_t(value); result = 0; } + if (strcmp(attr, "radial") == 0) { data->radial = mp_write_lv_grad_dsc_params_radial_t(value); result = 0; } + if (strcmp(attr, "conical") == 0) { data->conical = mp_write_lv_grad_dsc_params_conical_t(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_grad_dsc_params_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_grad_dsc_params_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_grad_dsc_params_t)); +} + +static void py_lv_grad_dsc_params_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_grad_dsc_params_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_grad_dsc_params_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_grad_dsc_params_t_dealloc, + .tp_getattro = (getter)py_lv_grad_dsc_params_t_getattro, + .tp_setattro = (setter)py_lv_grad_dsc_params_t_setattro, + .tp_new = py_lv_grad_dsc_params_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_grad_dsc_params_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_grad_dsc_params_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_grad_dsc_params_t*)self->data; +} + +static lv_grad_dsc_params_t mp_write_scratch_lv_grad_dsc_params_t; + +static inline void* mp_write_value_ptr_lv_grad_dsc_params_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_grad_dsc_params_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_grad_dsc_params_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_grad_dsc_params_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_grad_dsc_params_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_grad_dsc_params_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_grad_dsc_params_t or dict, got None"); + } + memset(&mp_write_scratch_lv_grad_dsc_params_t, 0, sizeof(lv_grad_dsc_params_t)); + return &mp_write_scratch_lv_grad_dsc_params_t; +} + +#define mp_write_lv_grad_dsc_params_t(struct_obj) (*((lv_grad_dsc_params_t*)mp_write_value_ptr_lv_grad_dsc_params_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_grad_dsc_params_t(void *field) +{ + return lv_to_mp_struct(&py_lv_grad_dsc_params_t_type, field); +} + +#define mp_read_lv_grad_dsc_params_t(field) lv_to_mp_struct_own(&py_lv_grad_dsc_params_t_type, copy_buffer(&field, sizeof(lv_grad_dsc_params_t))) +#define mp_read_byref_lv_grad_dsc_params_t(field) mp_read_ptr_lv_grad_dsc_params_t(&field) + /* * Struct lv_grad_dsc_t (CPython) @@ -7696,6 +8303,7 @@ static PyObject *py_lv_grad_dsc_t_getattro(PyObject *self, PyObject *name) if (strcmp(attr, "stops_count") == 0) return mp_obj_new_int_from_uint(data->stops_count); if (strcmp(attr, "dir") == 0) return mp_obj_new_int(data->dir); if (strcmp(attr, "extend") == 0) return mp_obj_new_int(data->extend); + if (strcmp(attr, "params") == 0) return mp_read_byref_lv_grad_dsc_params_t(data->params); if (strcmp(attr, "state") == 0) return ptr_to_mp((void*)data->state); for (PyMethodDef *m = py_lv_grad_dsc_t_methods; m->ml_name != NULL; m++) { if (strcmp(attr, m->ml_name) == 0) @@ -7725,6 +8333,7 @@ static int py_lv_grad_dsc_t_setattro(PyObject *self, PyObject *name, PyObject *v if (strcmp(attr, "stops_count") == 0) { data->stops_count = (uint8_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "dir") == 0) { data->dir = (int)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "extend") == 0) { data->extend = (int)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "params") == 0) { data->params = mp_write_lv_grad_dsc_params_t(value); result = 0; } if (strcmp(attr, "state") == 0) { data->state = (void*)mp_to_ptr(value); result = 0; } if (PyErr_Occurred()) { memcpy(data, &saved, sizeof(saved)); @@ -10528,6 +11137,247 @@ static inline PyObject *mp_lv_funcptr_lv_anim_get_value_cb_t(void *func){ return static int32_t lv_anim_t_get_value_cb_callback(lv_anim_t *); static int32_t lv_anim_t_path_cb_callback(const lv_anim_t *); +typedef __typeof__( ((lv_anim_t*)(0))->parameter ) lv_anim_parameter_t; + +/* + * Struct lv_anim_bezier3_para_t (CPython) + */ + +extern PyMethodDef py_lv_anim_bezier3_para_t_methods[]; + +static PyObject *py_lv_anim_bezier3_para_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_anim_bezier3_para_t *data = (lv_anim_bezier3_para_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "x1") == 0) return mp_obj_new_int(data->x1); + if (strcmp(attr, "y1") == 0) return mp_obj_new_int(data->y1); + if (strcmp(attr, "x2") == 0) return mp_obj_new_int(data->x2); + if (strcmp(attr, "y2") == 0) return mp_obj_new_int(data->y2); + for (PyMethodDef *m = py_lv_anim_bezier3_para_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_anim_bezier3_para_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_anim_bezier3_para_t *data = (lv_anim_bezier3_para_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_anim_bezier3_para_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "x1") == 0) { data->x1 = (int16_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "y1") == 0) { data->y1 = (int16_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "x2") == 0) { data->x2 = (int16_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "y2") == 0) { data->y2 = (int16_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_anim_bezier3_para_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_anim_bezier3_para_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_anim_bezier3_para_t)); +} + +static void py_lv_anim_bezier3_para_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_anim_bezier3_para_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_anim_bezier3_para_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_anim_bezier3_para_t_dealloc, + .tp_getattro = (getter)py_lv_anim_bezier3_para_t_getattro, + .tp_setattro = (setter)py_lv_anim_bezier3_para_t_setattro, + .tp_new = py_lv_anim_bezier3_para_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_anim_bezier3_para_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_anim_bezier3_para_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_anim_bezier3_para_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_anim_bezier3_para_t*)self->data; +} + +static lv_anim_bezier3_para_t mp_write_scratch_lv_anim_bezier3_para_t; + +static inline void* mp_write_value_ptr_lv_anim_bezier3_para_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_anim_bezier3_para_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_anim_bezier3_para_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_anim_bezier3_para_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_anim_bezier3_para_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_anim_bezier3_para_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_anim_bezier3_para_t or dict, got None"); + } + memset(&mp_write_scratch_lv_anim_bezier3_para_t, 0, sizeof(lv_anim_bezier3_para_t)); + return &mp_write_scratch_lv_anim_bezier3_para_t; +} + +#define mp_write_lv_anim_bezier3_para_t(struct_obj) (*((lv_anim_bezier3_para_t*)mp_write_value_ptr_lv_anim_bezier3_para_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_anim_bezier3_para_t(void *field) +{ + return lv_to_mp_struct(&py_lv_anim_bezier3_para_t_type, field); +} + +#define mp_read_lv_anim_bezier3_para_t(field) lv_to_mp_struct_own(&py_lv_anim_bezier3_para_t_type, copy_buffer(&field, sizeof(lv_anim_bezier3_para_t))) +#define mp_read_byref_lv_anim_bezier3_para_t(field) mp_read_ptr_lv_anim_bezier3_para_t(&field) + + +/* + * Struct lv_anim_parameter_t (CPython) + */ + +extern PyMethodDef py_lv_anim_parameter_t_methods[]; + +static PyObject *py_lv_anim_parameter_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_anim_parameter_t *data = (lv_anim_parameter_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "bezier3") == 0) return mp_read_byref_lv_anim_bezier3_para_t(data->bezier3); + for (PyMethodDef *m = py_lv_anim_parameter_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_anim_parameter_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_anim_parameter_t *data = (lv_anim_parameter_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_anim_parameter_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "bezier3") == 0) { data->bezier3 = mp_write_lv_anim_bezier3_para_t(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_anim_parameter_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_anim_parameter_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_anim_parameter_t)); +} + +static void py_lv_anim_parameter_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_anim_parameter_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_anim_parameter_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_anim_parameter_t_dealloc, + .tp_getattro = (getter)py_lv_anim_parameter_t_getattro, + .tp_setattro = (setter)py_lv_anim_parameter_t_setattro, + .tp_new = py_lv_anim_parameter_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_anim_parameter_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_anim_parameter_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_anim_parameter_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_anim_parameter_t*)self->data; +} + +static lv_anim_parameter_t mp_write_scratch_lv_anim_parameter_t; + +static inline void* mp_write_value_ptr_lv_anim_parameter_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_anim_parameter_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_anim_parameter_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_anim_parameter_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_anim_parameter_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_anim_parameter_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_anim_parameter_t or dict, got None"); + } + memset(&mp_write_scratch_lv_anim_parameter_t, 0, sizeof(lv_anim_parameter_t)); + return &mp_write_scratch_lv_anim_parameter_t; +} + +#define mp_write_lv_anim_parameter_t(struct_obj) (*((lv_anim_parameter_t*)mp_write_value_ptr_lv_anim_parameter_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_anim_parameter_t(void *field) +{ + return lv_to_mp_struct(&py_lv_anim_parameter_t_type, field); +} + +#define mp_read_lv_anim_parameter_t(field) lv_to_mp_struct_own(&py_lv_anim_parameter_t_type, copy_buffer(&field, sizeof(lv_anim_parameter_t))) +#define mp_read_byref_lv_anim_parameter_t(field) mp_read_ptr_lv_anim_parameter_t(&field) + /* * Struct lv_anim_t (CPython) @@ -10563,6 +11413,7 @@ static PyObject *py_lv_anim_t_getattro(PyObject *self, PyObject *name) if (strcmp(attr, "reverse_duration") == 0) return mp_obj_new_int_from_uint(data->reverse_duration); if (strcmp(attr, "repeat_delay") == 0) return mp_obj_new_int_from_uint(data->repeat_delay); if (strcmp(attr, "repeat_cnt") == 0) return mp_obj_new_int_from_uint(data->repeat_cnt); + if (strcmp(attr, "parameter") == 0) return mp_read_byref_lv_anim_parameter_t(data->parameter); if (strcmp(attr, "last_timer_run") == 0) return mp_obj_new_int_from_uint(data->last_timer_run); if (strcmp(attr, "pause_time") == 0) return mp_obj_new_int_from_uint(data->pause_time); if (strcmp(attr, "pause_duration") == 0) return mp_obj_new_int_from_uint(data->pause_duration); @@ -10613,6 +11464,7 @@ static int py_lv_anim_t_setattro(PyObject *self, PyObject *name, PyObject *value if (strcmp(attr, "reverse_duration") == 0) { data->reverse_duration = (uint32_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "repeat_delay") == 0) { data->repeat_delay = (uint32_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "repeat_cnt") == 0) { data->repeat_cnt = (uint32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "parameter") == 0) { data->parameter = mp_write_lv_anim_parameter_t(value); result = 0; } if (strcmp(attr, "last_timer_run") == 0) { data->last_timer_run = (uint32_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "pause_time") == 0) { data->pause_time = (uint32_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "pause_duration") == 0) { data->pause_duration = (uint32_t)mp_obj_get_int(value); result = 0; } @@ -16500,125 +17352,6 @@ static PyMethodDef py_lv_obj_get_transform_def = { }; -/* - * Struct lv_point_t (CPython) - */ - -extern PyMethodDef py_lv_point_t_methods[]; - -static PyObject *py_lv_point_t_getattro(PyObject *self, PyObject *name) -{ - py_lv_struct_t *inst = (py_lv_struct_t *)self; - lv_point_t *data = (lv_point_t*)inst->data; - if (data == NULL) { - PyErr_SetString(PyLvReferenceError, "struct data is NULL"); - return NULL; - } - const char *attr = PyUnicode_AsUTF8(name); - if (attr == NULL) return NULL; - if (strcmp(attr, "x") == 0) return mp_obj_new_int(data->x); - if (strcmp(attr, "y") == 0) return mp_obj_new_int(data->y); - for (PyMethodDef *m = py_lv_point_t_methods; m->ml_name != NULL; m++) { - if (strcmp(attr, m->ml_name) == 0) - return PyCFunction_NewEx(m, self, NULL); - } - return PyObject_GenericGetAttr((PyObject *)self, name); -} - -static int py_lv_point_t_setattro(PyObject *self, PyObject *name, PyObject *value) -{ - if (value == NULL) { - PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); - return -1; - } - py_lv_struct_t *inst = (py_lv_struct_t *)self; - lv_point_t *data = (lv_point_t*)inst->data; - if (data == NULL) { - PyErr_SetString(PyLvReferenceError, "struct data is NULL"); - return -1; - } - const char *attr = PyUnicode_AsUTF8(name); - if (attr == NULL) return -1; - int result = -1; - lv_point_t saved; - memcpy(&saved, data, sizeof(saved)); - if (strcmp(attr, "x") == 0) { data->x = (int32_t)mp_obj_get_int(value); result = 0; } - if (strcmp(attr, "y") == 0) { data->y = (int32_t)mp_obj_get_int(value); result = 0; } - if (PyErr_Occurred()) { - memcpy(data, &saved, sizeof(saved)); - return -1; - } - if (result < 0) { - PyErr_Format(PyExc_AttributeError, "'lv_point_t' object has no attribute '%s'", attr); - } - return result; -} - -static PyObject *py_lv_point_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - return make_new_lv_struct(type, args, kwds, sizeof(lv_point_t)); -} - -static void py_lv_point_t_dealloc(py_lv_struct_t *self) -{ - py_lv_struct_dealloc(self); -} - -PyTypeObject py_lv_point_t_type = { - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = "lvgl.lv_point_t", - .tp_basicsize = sizeof(py_lv_struct_t), - .tp_dealloc = (destructor)py_lv_point_t_dealloc, - .tp_getattro = (getter)py_lv_point_t_getattro, - .tp_setattro = (setter)py_lv_point_t_setattro, - .tp_new = py_lv_point_t_new, - .tp_base = &py_lv_base_struct_type, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, -}; - -static inline void* mp_write_ptr_lv_point_t(PyObject *self_in) -{ - if (!self_in || self_in == Py_None) return NULL; - if (!PyObject_TypeCheck(self_in, &py_lv_point_t_type)) { - PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_point_t, got '%s'", Py_TYPE(self_in)->tp_name); - return NULL; - } - py_lv_struct_t *self = (py_lv_struct_t *)self_in; - return (lv_point_t*)self->data; -} - -static lv_point_t mp_write_scratch_lv_point_t; - -static inline void* mp_write_value_ptr_lv_point_t(PyObject *value) -{ - if (value != NULL && PyDict_Check(value)) { - PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_point_t_type, value); - if (tmp != NULL) { - memcpy(&mp_write_scratch_lv_point_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_point_t)); - Py_DECREF(tmp); - return &mp_write_scratch_lv_point_t; - } - } else if (value != NULL && value != Py_None) { - void *p = mp_write_ptr_lv_point_t(value); - if (p != NULL) return p; - } else { - PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_point_t or dict, got None"); - } - memset(&mp_write_scratch_lv_point_t, 0, sizeof(lv_point_t)); - return &mp_write_scratch_lv_point_t; -} - -#define mp_write_lv_point_t(struct_obj) (*((lv_point_t*)mp_write_value_ptr_lv_point_t(struct_obj))) - -static inline PyObject *mp_read_ptr_lv_point_t(void *field) -{ - return lv_to_mp_struct(&py_lv_point_t_type, field); -} - -#define mp_read_lv_point_t(field) lv_to_mp_struct_own(&py_lv_point_t_type, copy_buffer(&field, sizeof(lv_point_t))) -#define mp_read_byref_lv_point_t(field) mp_read_ptr_lv_point_t(&field) - - /* * lvgl extension definition for: * void lv_obj_transform_point(const lv_obj_t *obj, lv_point_t *p, lv_obj_point_transform_flag_t flags) @@ -52790,6 +53523,126 @@ static inline PyObject *mp_read_ptr_lv_tree_node_t(void *field) #define mp_read_lv_tree_node_t(field) lv_to_mp_struct_own(&py_lv_tree_node_t_type, copy_buffer(&field, sizeof(lv_tree_node_t))) #define mp_read_byref_lv_tree_node_t(field) mp_read_ptr_lv_tree_node_t(&field) +typedef __typeof__( ((lv_font_glyph_dsc_t*)(0))->gid ) lv_font_glyph_dsc_gid_t; + +/* + * Struct lv_font_glyph_dsc_gid_t (CPython) + */ + +extern PyMethodDef py_lv_font_glyph_dsc_gid_t_methods[]; + +static PyObject *py_lv_font_glyph_dsc_gid_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_font_glyph_dsc_gid_t *data = (lv_font_glyph_dsc_gid_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "index") == 0) return mp_obj_new_int_from_uint(data->index); + if (strcmp(attr, "src") == 0) return ptr_to_mp((void*)data->src); + for (PyMethodDef *m = py_lv_font_glyph_dsc_gid_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_font_glyph_dsc_gid_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_font_glyph_dsc_gid_t *data = (lv_font_glyph_dsc_gid_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_font_glyph_dsc_gid_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "index") == 0) { data->index = (uint32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "src") == 0) { data->src = (void*)mp_to_ptr(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_font_glyph_dsc_gid_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_font_glyph_dsc_gid_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_font_glyph_dsc_gid_t)); +} + +static void py_lv_font_glyph_dsc_gid_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_font_glyph_dsc_gid_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_font_glyph_dsc_gid_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_font_glyph_dsc_gid_t_dealloc, + .tp_getattro = (getter)py_lv_font_glyph_dsc_gid_t_getattro, + .tp_setattro = (setter)py_lv_font_glyph_dsc_gid_t_setattro, + .tp_new = py_lv_font_glyph_dsc_gid_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_font_glyph_dsc_gid_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_font_glyph_dsc_gid_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_font_glyph_dsc_gid_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_font_glyph_dsc_gid_t*)self->data; +} + +static lv_font_glyph_dsc_gid_t mp_write_scratch_lv_font_glyph_dsc_gid_t; + +static inline void* mp_write_value_ptr_lv_font_glyph_dsc_gid_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_font_glyph_dsc_gid_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_font_glyph_dsc_gid_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_font_glyph_dsc_gid_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_font_glyph_dsc_gid_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_font_glyph_dsc_gid_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_font_glyph_dsc_gid_t or dict, got None"); + } + memset(&mp_write_scratch_lv_font_glyph_dsc_gid_t, 0, sizeof(lv_font_glyph_dsc_gid_t)); + return &mp_write_scratch_lv_font_glyph_dsc_gid_t; +} + +#define mp_write_lv_font_glyph_dsc_gid_t(struct_obj) (*((lv_font_glyph_dsc_gid_t*)mp_write_value_ptr_lv_font_glyph_dsc_gid_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_font_glyph_dsc_gid_t(void *field) +{ + return lv_to_mp_struct(&py_lv_font_glyph_dsc_gid_t_type, field); +} + +#define mp_read_lv_font_glyph_dsc_gid_t(field) lv_to_mp_struct_own(&py_lv_font_glyph_dsc_gid_t_type, copy_buffer(&field, sizeof(lv_font_glyph_dsc_gid_t))) +#define mp_read_byref_lv_font_glyph_dsc_gid_t(field) mp_read_ptr_lv_font_glyph_dsc_gid_t(&field) + /* * Struct lv_font_glyph_dsc_t (CPython) @@ -52818,6 +53671,7 @@ static PyObject *py_lv_font_glyph_dsc_t_getattro(PyObject *self, PyObject *name) if (strcmp(attr, "is_placeholder") == 0) return mp_obj_new_int_from_uint(data->is_placeholder); if (strcmp(attr, "req_raw_bitmap") == 0) return mp_obj_new_int_from_uint(data->req_raw_bitmap); if (strcmp(attr, "outline_stroke_width") == 0) return mp_obj_new_int(data->outline_stroke_width); + if (strcmp(attr, "gid") == 0) return mp_read_byref_lv_font_glyph_dsc_gid_t(data->gid); if (strcmp(attr, "entry") == 0) return mp_read_ptr_lv_cache_entry_t((void*)data->entry); for (PyMethodDef *m = py_lv_font_glyph_dsc_t_methods; m->ml_name != NULL; m++) { if (strcmp(attr, m->ml_name) == 0) @@ -52854,6 +53708,7 @@ static int py_lv_font_glyph_dsc_t_setattro(PyObject *self, PyObject *name, PyObj if (strcmp(attr, "is_placeholder") == 0) { data->is_placeholder = (uint8_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "req_raw_bitmap") == 0) { data->req_raw_bitmap = (uint8_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "outline_stroke_width") == 0) { data->outline_stroke_width = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "gid") == 0) { data->gid = mp_write_lv_font_glyph_dsc_gid_t(value); result = 0; } if (strcmp(attr, "entry") == 0) { data->entry = (void*)mp_write_ptr_lv_cache_entry_t(value); result = 0; } if (PyErr_Occurred()) { memcpy(data, &saved, sizeof(saved)); @@ -54236,6 +55091,292 @@ static inline PyObject *mp_read_ptr_lv_draw_triangle_dsc_t(void *field) static inline PyObject *mp_lv_funcptr_lv_indev_read_cb_t(void *func){ return mp_lv_funcptr(NULL, func, NULL, "", NULL); } static void lv_indev_t_read_cb_callback(lv_indev_t *indev, lv_indev_data_t *data); +typedef __typeof__( ((lv_indev_t*)(0))->pointer ) lv_indev_pointer_t; + +/* + * Struct lv_indev_pointer_t (CPython) + */ + +extern PyMethodDef py_lv_indev_pointer_t_methods[]; + +static PyObject *py_lv_indev_pointer_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_indev_pointer_t *data = (lv_indev_pointer_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "act_point") == 0) return mp_read_byref_lv_point_t(data->act_point); + if (strcmp(attr, "last_point") == 0) return mp_read_byref_lv_point_t(data->last_point); + if (strcmp(attr, "last_raw_point") == 0) return mp_read_byref_lv_point_t(data->last_raw_point); + if (strcmp(attr, "vect") == 0) return mp_read_byref_lv_point_t(data->vect); + if (strcmp(attr, "vect_hist") == 0) return lvpy_struct_array_new(self, data->vect_hist, 8, sizeof(lv_point_t), mp_read_ptr_lv_point_t, mp_write_value_ptr_lv_point_t); + if (strcmp(attr, "vect_hist_timestamp") == 0) return ptr_to_mp(data->vect_hist_timestamp); + if (strcmp(attr, "vect_hist_index") == 0) return mp_obj_new_int_from_uint(data->vect_hist_index); + if (strcmp(attr, "scroll_sum") == 0) return mp_read_byref_lv_point_t(data->scroll_sum); + if (strcmp(attr, "scroll_throw_vect") == 0) return mp_read_byref_lv_point_t(data->scroll_throw_vect); + if (strcmp(attr, "scroll_throw_vect_ori") == 0) return mp_read_byref_lv_point_t(data->scroll_throw_vect_ori); + if (strcmp(attr, "act_obj") == 0) return lv_to_mp((void*)data->act_obj); + if (strcmp(attr, "scroll_obj") == 0) return lv_to_mp((void*)data->scroll_obj); + if (strcmp(attr, "last_pressed") == 0) return lv_to_mp((void*)data->last_pressed); + if (strcmp(attr, "last_hovered") == 0) return lv_to_mp((void*)data->last_hovered); + if (strcmp(attr, "scroll_area") == 0) return mp_read_byref_lv_area_t(data->scroll_area); + if (strcmp(attr, "gesture_sum") == 0) return mp_read_byref_lv_point_t(data->gesture_sum); + if (strcmp(attr, "diff") == 0) return mp_obj_new_int(data->diff); + if (strcmp(attr, "short_click_streak") == 0) return mp_obj_new_int_from_uint(data->short_click_streak); + if (strcmp(attr, "last_short_click_point") == 0) return mp_read_byref_lv_point_t(data->last_short_click_point); + if (strcmp(attr, "last_short_click_timestamp") == 0) return mp_obj_new_int_from_uint(data->last_short_click_timestamp); + if (strcmp(attr, "scroll_dir") == 0) return mp_obj_new_int_from_uint(data->scroll_dir); + if (strcmp(attr, "gesture_dir") == 0) return mp_obj_new_int_from_uint(data->gesture_dir); + if (strcmp(attr, "gesture_sent") == 0) return mp_obj_new_int_from_uint(data->gesture_sent); + if (strcmp(attr, "press_moved") == 0) return mp_obj_new_int_from_uint(data->press_moved); + if (strcmp(attr, "pressed") == 0) return mp_obj_new_int_from_uint(data->pressed); + for (PyMethodDef *m = py_lv_indev_pointer_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_indev_pointer_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_indev_pointer_t *data = (lv_indev_pointer_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_indev_pointer_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "act_point") == 0) { data->act_point = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "last_point") == 0) { data->last_point = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "last_raw_point") == 0) { data->last_raw_point = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "vect") == 0) { data->vect = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "vect_hist") == 0) { lvpy_struct_array_assign(data->vect_hist, 8, sizeof(lv_point_t), mp_write_value_ptr_lv_point_t, value); result = 0; } + if (strcmp(attr, "vect_hist_timestamp") == 0) { memcpy((void*)&data->vect_hist_timestamp, mp_to_ptr(value), sizeof(uint32_t)*8); result = 0; } + if (strcmp(attr, "vect_hist_index") == 0) { data->vect_hist_index = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "scroll_sum") == 0) { data->scroll_sum = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "scroll_throw_vect") == 0) { data->scroll_throw_vect = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "scroll_throw_vect_ori") == 0) { data->scroll_throw_vect_ori = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "act_obj") == 0) { data->act_obj = (void*)mp_to_lv(value); result = 0; } + if (strcmp(attr, "scroll_obj") == 0) { data->scroll_obj = (void*)mp_to_lv(value); result = 0; } + if (strcmp(attr, "last_pressed") == 0) { data->last_pressed = (void*)mp_to_lv(value); result = 0; } + if (strcmp(attr, "last_hovered") == 0) { data->last_hovered = (void*)mp_to_lv(value); result = 0; } + if (strcmp(attr, "scroll_area") == 0) { data->scroll_area = mp_write_lv_area_t(value); result = 0; } + if (strcmp(attr, "gesture_sum") == 0) { data->gesture_sum = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "diff") == 0) { data->diff = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "short_click_streak") == 0) { data->short_click_streak = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "last_short_click_point") == 0) { data->last_short_click_point = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "last_short_click_timestamp") == 0) { data->last_short_click_timestamp = (uint32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "scroll_dir") == 0) { data->scroll_dir = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "gesture_dir") == 0) { data->gesture_dir = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "gesture_sent") == 0) { data->gesture_sent = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "press_moved") == 0) { data->press_moved = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "pressed") == 0) { data->pressed = (uint8_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_indev_pointer_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_indev_pointer_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_indev_pointer_t)); +} + +static void py_lv_indev_pointer_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_indev_pointer_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_indev_pointer_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_indev_pointer_t_dealloc, + .tp_getattro = (getter)py_lv_indev_pointer_t_getattro, + .tp_setattro = (setter)py_lv_indev_pointer_t_setattro, + .tp_new = py_lv_indev_pointer_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_indev_pointer_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_indev_pointer_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_indev_pointer_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_indev_pointer_t*)self->data; +} + +static lv_indev_pointer_t mp_write_scratch_lv_indev_pointer_t; + +static inline void* mp_write_value_ptr_lv_indev_pointer_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_indev_pointer_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_indev_pointer_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_indev_pointer_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_indev_pointer_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_indev_pointer_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_indev_pointer_t or dict, got None"); + } + memset(&mp_write_scratch_lv_indev_pointer_t, 0, sizeof(lv_indev_pointer_t)); + return &mp_write_scratch_lv_indev_pointer_t; +} + +#define mp_write_lv_indev_pointer_t(struct_obj) (*((lv_indev_pointer_t*)mp_write_value_ptr_lv_indev_pointer_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_indev_pointer_t(void *field) +{ + return lv_to_mp_struct(&py_lv_indev_pointer_t_type, field); +} + +#define mp_read_lv_indev_pointer_t(field) lv_to_mp_struct_own(&py_lv_indev_pointer_t_type, copy_buffer(&field, sizeof(lv_indev_pointer_t))) +#define mp_read_byref_lv_indev_pointer_t(field) mp_read_ptr_lv_indev_pointer_t(&field) + +typedef __typeof__( ((lv_indev_t*)(0))->keypad ) lv_indev_keypad_t; + +/* + * Struct lv_indev_keypad_t (CPython) + */ + +extern PyMethodDef py_lv_indev_keypad_t_methods[]; + +static PyObject *py_lv_indev_keypad_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_indev_keypad_t *data = (lv_indev_keypad_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "last_state") == 0) return mp_obj_new_int(data->last_state); + if (strcmp(attr, "last_key") == 0) return mp_obj_new_int_from_uint(data->last_key); + for (PyMethodDef *m = py_lv_indev_keypad_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_indev_keypad_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_indev_keypad_t *data = (lv_indev_keypad_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_indev_keypad_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "last_state") == 0) { data->last_state = (int)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "last_key") == 0) { data->last_key = (uint32_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_indev_keypad_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_indev_keypad_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_indev_keypad_t)); +} + +static void py_lv_indev_keypad_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_indev_keypad_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_indev_keypad_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_indev_keypad_t_dealloc, + .tp_getattro = (getter)py_lv_indev_keypad_t_getattro, + .tp_setattro = (setter)py_lv_indev_keypad_t_setattro, + .tp_new = py_lv_indev_keypad_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_indev_keypad_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_indev_keypad_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_indev_keypad_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_indev_keypad_t*)self->data; +} + +static lv_indev_keypad_t mp_write_scratch_lv_indev_keypad_t; + +static inline void* mp_write_value_ptr_lv_indev_keypad_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_indev_keypad_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_indev_keypad_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_indev_keypad_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_indev_keypad_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_indev_keypad_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_indev_keypad_t or dict, got None"); + } + memset(&mp_write_scratch_lv_indev_keypad_t, 0, sizeof(lv_indev_keypad_t)); + return &mp_write_scratch_lv_indev_keypad_t; +} + +#define mp_write_lv_indev_keypad_t(struct_obj) (*((lv_indev_keypad_t*)mp_write_value_ptr_lv_indev_keypad_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_indev_keypad_t(void *field) +{ + return lv_to_mp_struct(&py_lv_indev_keypad_t_type, field); +} + +#define mp_read_lv_indev_keypad_t(field) lv_to_mp_struct_own(&py_lv_indev_keypad_t_type, copy_buffer(&field, sizeof(lv_indev_keypad_t))) +#define mp_read_byref_lv_indev_keypad_t(field) mp_read_ptr_lv_indev_keypad_t(&field) + #define funcptr_lv_indev_key_remap_cb_t NULL static inline PyObject *mp_lv_funcptr_lv_indev_key_remap_cb_t(void *func){ return mp_lv_funcptr(NULL, func, NULL, "", NULL); } @@ -54618,6 +55759,8 @@ static PyObject *py_lv_indev_t_getattro(PyObject *self, PyObject *name) if (strcmp(attr, "long_press_time") == 0) return mp_obj_new_int_from_uint(data->long_press_time); if (strcmp(attr, "long_press_repeat_time") == 0) return mp_obj_new_int_from_uint(data->long_press_repeat_time); if (strcmp(attr, "rotary_sensitivity") == 0) return mp_obj_new_int(data->rotary_sensitivity); + if (strcmp(attr, "pointer") == 0) return mp_read_byref_lv_indev_pointer_t(data->pointer); + if (strcmp(attr, "keypad") == 0) return mp_read_byref_lv_indev_keypad_t(data->keypad); if (strcmp(attr, "cursor") == 0) return lv_to_mp((void*)data->cursor); if (strcmp(attr, "group") == 0) return mp_read_ptr_lv_group_t((void*)data->group); if (strcmp(attr, "btn_points") == 0) return mp_read_ptr_lv_point_t((void*)data->btn_points); @@ -54676,6 +55819,8 @@ static int py_lv_indev_t_setattro(PyObject *self, PyObject *name, PyObject *valu if (strcmp(attr, "long_press_time") == 0) { data->long_press_time = (uint16_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "long_press_repeat_time") == 0) { data->long_press_repeat_time = (uint16_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "rotary_sensitivity") == 0) { data->rotary_sensitivity = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "pointer") == 0) { data->pointer = mp_write_lv_indev_pointer_t(value); result = 0; } + if (strcmp(attr, "keypad") == 0) { data->keypad = mp_write_lv_indev_keypad_t(value); result = 0; } if (strcmp(attr, "cursor") == 0) { data->cursor = (void*)mp_to_lv(value); result = 0; } if (strcmp(attr, "group") == 0) { data->group = (void*)mp_write_ptr_lv_group_t(value); result = 0; } if (strcmp(attr, "btn_points") == 0) { data->btn_points = (void*)mp_write_ptr_lv_point_t(value); result = 0; } @@ -55146,6 +56291,128 @@ static inline PyObject *mp_read_ptr_lv_draw_sw_mask_common_dsc_t(void *field) #define mp_read_lv_draw_sw_mask_common_dsc_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_common_dsc_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_common_dsc_t))) #define mp_read_byref_lv_draw_sw_mask_common_dsc_t(field) mp_read_ptr_lv_draw_sw_mask_common_dsc_t(&field) +typedef __typeof__( ((lv_draw_sw_mask_line_param_t*)(0))->cfg ) lv_draw_sw_mask_line_param_cfg_t; + +/* + * Struct lv_draw_sw_mask_line_param_cfg_t (CPython) + */ + +extern PyMethodDef py_lv_draw_sw_mask_line_param_cfg_t_methods[]; + +static PyObject *py_lv_draw_sw_mask_line_param_cfg_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_line_param_cfg_t *data = (lv_draw_sw_mask_line_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "p1") == 0) return mp_read_byref_lv_point_t(data->p1); + if (strcmp(attr, "p2") == 0) return mp_read_byref_lv_point_t(data->p2); + if (strcmp(attr, "side") == 0) return mp_obj_new_int(data->side); + for (PyMethodDef *m = py_lv_draw_sw_mask_line_param_cfg_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_draw_sw_mask_line_param_cfg_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_line_param_cfg_t *data = (lv_draw_sw_mask_line_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_draw_sw_mask_line_param_cfg_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "p1") == 0) { data->p1 = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "p2") == 0) { data->p2 = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "side") == 0) { data->side = (int)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_draw_sw_mask_line_param_cfg_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_draw_sw_mask_line_param_cfg_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_draw_sw_mask_line_param_cfg_t)); +} + +static void py_lv_draw_sw_mask_line_param_cfg_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_draw_sw_mask_line_param_cfg_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_draw_sw_mask_line_param_cfg_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_draw_sw_mask_line_param_cfg_t_dealloc, + .tp_getattro = (getter)py_lv_draw_sw_mask_line_param_cfg_t_getattro, + .tp_setattro = (setter)py_lv_draw_sw_mask_line_param_cfg_t_setattro, + .tp_new = py_lv_draw_sw_mask_line_param_cfg_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_draw_sw_mask_line_param_cfg_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_draw_sw_mask_line_param_cfg_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_line_param_cfg_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_draw_sw_mask_line_param_cfg_t*)self->data; +} + +static lv_draw_sw_mask_line_param_cfg_t mp_write_scratch_lv_draw_sw_mask_line_param_cfg_t; + +static inline void* mp_write_value_ptr_lv_draw_sw_mask_line_param_cfg_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_draw_sw_mask_line_param_cfg_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_draw_sw_mask_line_param_cfg_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_draw_sw_mask_line_param_cfg_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_draw_sw_mask_line_param_cfg_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_draw_sw_mask_line_param_cfg_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_line_param_cfg_t or dict, got None"); + } + memset(&mp_write_scratch_lv_draw_sw_mask_line_param_cfg_t, 0, sizeof(lv_draw_sw_mask_line_param_cfg_t)); + return &mp_write_scratch_lv_draw_sw_mask_line_param_cfg_t; +} + +#define mp_write_lv_draw_sw_mask_line_param_cfg_t(struct_obj) (*((lv_draw_sw_mask_line_param_cfg_t*)mp_write_value_ptr_lv_draw_sw_mask_line_param_cfg_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_draw_sw_mask_line_param_cfg_t(void *field) +{ + return lv_to_mp_struct(&py_lv_draw_sw_mask_line_param_cfg_t_type, field); +} + +#define mp_read_lv_draw_sw_mask_line_param_cfg_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_line_param_cfg_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_line_param_cfg_t))) +#define mp_read_byref_lv_draw_sw_mask_line_param_cfg_t(field) mp_read_ptr_lv_draw_sw_mask_line_param_cfg_t(&field) + /* * Struct lv_draw_sw_mask_line_param_t (CPython) @@ -55164,6 +56431,7 @@ static PyObject *py_lv_draw_sw_mask_line_param_t_getattro(PyObject *self, PyObje const char *attr = PyUnicode_AsUTF8(name); if (attr == NULL) return NULL; if (strcmp(attr, "dsc") == 0) return mp_read_byref_lv_draw_sw_mask_common_dsc_t(data->dsc); + if (strcmp(attr, "cfg") == 0) return mp_read_byref_lv_draw_sw_mask_line_param_cfg_t(data->cfg); if (strcmp(attr, "origo") == 0) return mp_read_byref_lv_point_t(data->origo); if (strcmp(attr, "xy_steep") == 0) return mp_obj_new_int(data->xy_steep); if (strcmp(attr, "yx_steep") == 0) return mp_obj_new_int(data->yx_steep); @@ -55196,6 +56464,7 @@ static int py_lv_draw_sw_mask_line_param_t_setattro(PyObject *self, PyObject *na lv_draw_sw_mask_line_param_t saved; memcpy(&saved, data, sizeof(saved)); if (strcmp(attr, "dsc") == 0) { data->dsc = mp_write_lv_draw_sw_mask_common_dsc_t(value); result = 0; } + if (strcmp(attr, "cfg") == 0) { data->cfg = mp_write_lv_draw_sw_mask_line_param_cfg_t(value); result = 0; } if (strcmp(attr, "origo") == 0) { data->origo = mp_write_lv_point_t(value); result = 0; } if (strcmp(attr, "xy_steep") == 0) { data->xy_steep = (int32_t)mp_obj_get_int(value); result = 0; } if (strcmp(attr, "yx_steep") == 0) { data->yx_steep = (int32_t)mp_obj_get_int(value); result = 0; } @@ -55277,6 +56546,128 @@ static inline PyObject *mp_read_ptr_lv_draw_sw_mask_line_param_t(void *field) #define mp_read_lv_draw_sw_mask_line_param_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_line_param_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_line_param_t))) #define mp_read_byref_lv_draw_sw_mask_line_param_t(field) mp_read_ptr_lv_draw_sw_mask_line_param_t(&field) +typedef __typeof__( ((lv_draw_sw_mask_angle_param_t*)(0))->cfg ) lv_draw_sw_mask_angle_param_cfg_t; + +/* + * Struct lv_draw_sw_mask_angle_param_cfg_t (CPython) + */ + +extern PyMethodDef py_lv_draw_sw_mask_angle_param_cfg_t_methods[]; + +static PyObject *py_lv_draw_sw_mask_angle_param_cfg_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_angle_param_cfg_t *data = (lv_draw_sw_mask_angle_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "vertex_p") == 0) return mp_read_byref_lv_point_t(data->vertex_p); + if (strcmp(attr, "start_angle") == 0) return mp_obj_new_int(data->start_angle); + if (strcmp(attr, "end_angle") == 0) return mp_obj_new_int(data->end_angle); + for (PyMethodDef *m = py_lv_draw_sw_mask_angle_param_cfg_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_draw_sw_mask_angle_param_cfg_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_angle_param_cfg_t *data = (lv_draw_sw_mask_angle_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_draw_sw_mask_angle_param_cfg_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "vertex_p") == 0) { data->vertex_p = mp_write_lv_point_t(value); result = 0; } + if (strcmp(attr, "start_angle") == 0) { data->start_angle = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "end_angle") == 0) { data->end_angle = (int32_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_draw_sw_mask_angle_param_cfg_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_draw_sw_mask_angle_param_cfg_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_draw_sw_mask_angle_param_cfg_t)); +} + +static void py_lv_draw_sw_mask_angle_param_cfg_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_draw_sw_mask_angle_param_cfg_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_draw_sw_mask_angle_param_cfg_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_draw_sw_mask_angle_param_cfg_t_dealloc, + .tp_getattro = (getter)py_lv_draw_sw_mask_angle_param_cfg_t_getattro, + .tp_setattro = (setter)py_lv_draw_sw_mask_angle_param_cfg_t_setattro, + .tp_new = py_lv_draw_sw_mask_angle_param_cfg_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_draw_sw_mask_angle_param_cfg_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_draw_sw_mask_angle_param_cfg_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_angle_param_cfg_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_draw_sw_mask_angle_param_cfg_t*)self->data; +} + +static lv_draw_sw_mask_angle_param_cfg_t mp_write_scratch_lv_draw_sw_mask_angle_param_cfg_t; + +static inline void* mp_write_value_ptr_lv_draw_sw_mask_angle_param_cfg_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_draw_sw_mask_angle_param_cfg_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_draw_sw_mask_angle_param_cfg_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_draw_sw_mask_angle_param_cfg_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_draw_sw_mask_angle_param_cfg_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_draw_sw_mask_angle_param_cfg_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_angle_param_cfg_t or dict, got None"); + } + memset(&mp_write_scratch_lv_draw_sw_mask_angle_param_cfg_t, 0, sizeof(lv_draw_sw_mask_angle_param_cfg_t)); + return &mp_write_scratch_lv_draw_sw_mask_angle_param_cfg_t; +} + +#define mp_write_lv_draw_sw_mask_angle_param_cfg_t(struct_obj) (*((lv_draw_sw_mask_angle_param_cfg_t*)mp_write_value_ptr_lv_draw_sw_mask_angle_param_cfg_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_draw_sw_mask_angle_param_cfg_t(void *field) +{ + return lv_to_mp_struct(&py_lv_draw_sw_mask_angle_param_cfg_t_type, field); +} + +#define mp_read_lv_draw_sw_mask_angle_param_cfg_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_angle_param_cfg_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_angle_param_cfg_t))) +#define mp_read_byref_lv_draw_sw_mask_angle_param_cfg_t(field) mp_read_ptr_lv_draw_sw_mask_angle_param_cfg_t(&field) + /* * Struct lv_draw_sw_mask_angle_param_t (CPython) @@ -55295,6 +56686,7 @@ static PyObject *py_lv_draw_sw_mask_angle_param_t_getattro(PyObject *self, PyObj const char *attr = PyUnicode_AsUTF8(name); if (attr == NULL) return NULL; if (strcmp(attr, "dsc") == 0) return mp_read_byref_lv_draw_sw_mask_common_dsc_t(data->dsc); + if (strcmp(attr, "cfg") == 0) return mp_read_byref_lv_draw_sw_mask_angle_param_cfg_t(data->cfg); if (strcmp(attr, "start_line") == 0) return mp_read_byref_lv_draw_sw_mask_line_param_t(data->start_line); if (strcmp(attr, "end_line") == 0) return mp_read_byref_lv_draw_sw_mask_line_param_t(data->end_line); if (strcmp(attr, "delta_deg") == 0) return mp_obj_new_int_from_uint(data->delta_deg); @@ -55323,6 +56715,7 @@ static int py_lv_draw_sw_mask_angle_param_t_setattro(PyObject *self, PyObject *n lv_draw_sw_mask_angle_param_t saved; memcpy(&saved, data, sizeof(saved)); if (strcmp(attr, "dsc") == 0) { data->dsc = mp_write_lv_draw_sw_mask_common_dsc_t(value); result = 0; } + if (strcmp(attr, "cfg") == 0) { data->cfg = mp_write_lv_draw_sw_mask_angle_param_cfg_t(value); result = 0; } if (strcmp(attr, "start_line") == 0) { data->start_line = mp_write_lv_draw_sw_mask_line_param_t(value); result = 0; } if (strcmp(attr, "end_line") == 0) { data->end_line = mp_write_lv_draw_sw_mask_line_param_t(value); result = 0; } if (strcmp(attr, "delta_deg") == 0) { data->delta_deg = (uint16_t)mp_obj_get_int(value); result = 0; } @@ -55400,6 +56793,128 @@ static inline PyObject *mp_read_ptr_lv_draw_sw_mask_angle_param_t(void *field) #define mp_read_lv_draw_sw_mask_angle_param_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_angle_param_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_angle_param_t))) #define mp_read_byref_lv_draw_sw_mask_angle_param_t(field) mp_read_ptr_lv_draw_sw_mask_angle_param_t(&field) +typedef __typeof__( ((lv_draw_sw_mask_radius_param_t*)(0))->cfg ) lv_draw_sw_mask_radius_param_cfg_t; + +/* + * Struct lv_draw_sw_mask_radius_param_cfg_t (CPython) + */ + +extern PyMethodDef py_lv_draw_sw_mask_radius_param_cfg_t_methods[]; + +static PyObject *py_lv_draw_sw_mask_radius_param_cfg_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_radius_param_cfg_t *data = (lv_draw_sw_mask_radius_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "rect") == 0) return mp_read_byref_lv_area_t(data->rect); + if (strcmp(attr, "radius") == 0) return mp_obj_new_int(data->radius); + if (strcmp(attr, "outer") == 0) return mp_obj_new_int_from_uint(data->outer); + for (PyMethodDef *m = py_lv_draw_sw_mask_radius_param_cfg_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_draw_sw_mask_radius_param_cfg_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_radius_param_cfg_t *data = (lv_draw_sw_mask_radius_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_draw_sw_mask_radius_param_cfg_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "rect") == 0) { data->rect = mp_write_lv_area_t(value); result = 0; } + if (strcmp(attr, "radius") == 0) { data->radius = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "outer") == 0) { data->outer = (uint8_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_draw_sw_mask_radius_param_cfg_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_draw_sw_mask_radius_param_cfg_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_draw_sw_mask_radius_param_cfg_t)); +} + +static void py_lv_draw_sw_mask_radius_param_cfg_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_draw_sw_mask_radius_param_cfg_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_draw_sw_mask_radius_param_cfg_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_draw_sw_mask_radius_param_cfg_t_dealloc, + .tp_getattro = (getter)py_lv_draw_sw_mask_radius_param_cfg_t_getattro, + .tp_setattro = (setter)py_lv_draw_sw_mask_radius_param_cfg_t_setattro, + .tp_new = py_lv_draw_sw_mask_radius_param_cfg_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_draw_sw_mask_radius_param_cfg_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_draw_sw_mask_radius_param_cfg_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_radius_param_cfg_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_draw_sw_mask_radius_param_cfg_t*)self->data; +} + +static lv_draw_sw_mask_radius_param_cfg_t mp_write_scratch_lv_draw_sw_mask_radius_param_cfg_t; + +static inline void* mp_write_value_ptr_lv_draw_sw_mask_radius_param_cfg_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_draw_sw_mask_radius_param_cfg_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_draw_sw_mask_radius_param_cfg_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_draw_sw_mask_radius_param_cfg_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_draw_sw_mask_radius_param_cfg_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_draw_sw_mask_radius_param_cfg_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_radius_param_cfg_t or dict, got None"); + } + memset(&mp_write_scratch_lv_draw_sw_mask_radius_param_cfg_t, 0, sizeof(lv_draw_sw_mask_radius_param_cfg_t)); + return &mp_write_scratch_lv_draw_sw_mask_radius_param_cfg_t; +} + +#define mp_write_lv_draw_sw_mask_radius_param_cfg_t(struct_obj) (*((lv_draw_sw_mask_radius_param_cfg_t*)mp_write_value_ptr_lv_draw_sw_mask_radius_param_cfg_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_draw_sw_mask_radius_param_cfg_t(void *field) +{ + return lv_to_mp_struct(&py_lv_draw_sw_mask_radius_param_cfg_t_type, field); +} + +#define mp_read_lv_draw_sw_mask_radius_param_cfg_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_radius_param_cfg_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_radius_param_cfg_t))) +#define mp_read_byref_lv_draw_sw_mask_radius_param_cfg_t(field) mp_read_ptr_lv_draw_sw_mask_radius_param_cfg_t(&field) + /* * Struct lv_draw_sw_mask_radius_circle_dsc_t (CPython) @@ -55547,6 +57062,7 @@ static PyObject *py_lv_draw_sw_mask_radius_param_t_getattro(PyObject *self, PyOb const char *attr = PyUnicode_AsUTF8(name); if (attr == NULL) return NULL; if (strcmp(attr, "dsc") == 0) return mp_read_byref_lv_draw_sw_mask_common_dsc_t(data->dsc); + if (strcmp(attr, "cfg") == 0) return mp_read_byref_lv_draw_sw_mask_radius_param_cfg_t(data->cfg); if (strcmp(attr, "circle") == 0) return mp_read_ptr_lv_draw_sw_mask_radius_circle_dsc_t((void*)data->circle); for (PyMethodDef *m = py_lv_draw_sw_mask_radius_param_t_methods; m->ml_name != NULL; m++) { if (strcmp(attr, m->ml_name) == 0) @@ -55573,6 +57089,7 @@ static int py_lv_draw_sw_mask_radius_param_t_setattro(PyObject *self, PyObject * lv_draw_sw_mask_radius_param_t saved; memcpy(&saved, data, sizeof(saved)); if (strcmp(attr, "dsc") == 0) { data->dsc = mp_write_lv_draw_sw_mask_common_dsc_t(value); result = 0; } + if (strcmp(attr, "cfg") == 0) { data->cfg = mp_write_lv_draw_sw_mask_radius_param_cfg_t(value); result = 0; } if (strcmp(attr, "circle") == 0) { data->circle = (void*)mp_write_ptr_lv_draw_sw_mask_radius_circle_dsc_t(value); result = 0; } if (PyErr_Occurred()) { memcpy(data, &saved, sizeof(saved)); @@ -55648,6 +57165,132 @@ static inline PyObject *mp_read_ptr_lv_draw_sw_mask_radius_param_t(void *field) #define mp_read_lv_draw_sw_mask_radius_param_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_radius_param_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_radius_param_t))) #define mp_read_byref_lv_draw_sw_mask_radius_param_t(field) mp_read_ptr_lv_draw_sw_mask_radius_param_t(&field) +typedef __typeof__( ((lv_draw_sw_mask_fade_param_t*)(0))->cfg ) lv_draw_sw_mask_fade_param_cfg_t; + +/* + * Struct lv_draw_sw_mask_fade_param_cfg_t (CPython) + */ + +extern PyMethodDef py_lv_draw_sw_mask_fade_param_cfg_t_methods[]; + +static PyObject *py_lv_draw_sw_mask_fade_param_cfg_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_fade_param_cfg_t *data = (lv_draw_sw_mask_fade_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "coords") == 0) return mp_read_byref_lv_area_t(data->coords); + if (strcmp(attr, "y_top") == 0) return mp_obj_new_int(data->y_top); + if (strcmp(attr, "y_bottom") == 0) return mp_obj_new_int(data->y_bottom); + if (strcmp(attr, "opa_top") == 0) return mp_obj_new_int_from_uint(data->opa_top); + if (strcmp(attr, "opa_bottom") == 0) return mp_obj_new_int_from_uint(data->opa_bottom); + for (PyMethodDef *m = py_lv_draw_sw_mask_fade_param_cfg_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_draw_sw_mask_fade_param_cfg_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_fade_param_cfg_t *data = (lv_draw_sw_mask_fade_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_draw_sw_mask_fade_param_cfg_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "coords") == 0) { data->coords = mp_write_lv_area_t(value); result = 0; } + if (strcmp(attr, "y_top") == 0) { data->y_top = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "y_bottom") == 0) { data->y_bottom = (int32_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "opa_top") == 0) { data->opa_top = (uint8_t)mp_obj_get_int(value); result = 0; } + if (strcmp(attr, "opa_bottom") == 0) { data->opa_bottom = (uint8_t)mp_obj_get_int(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_draw_sw_mask_fade_param_cfg_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_draw_sw_mask_fade_param_cfg_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_draw_sw_mask_fade_param_cfg_t)); +} + +static void py_lv_draw_sw_mask_fade_param_cfg_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_draw_sw_mask_fade_param_cfg_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_draw_sw_mask_fade_param_cfg_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_draw_sw_mask_fade_param_cfg_t_dealloc, + .tp_getattro = (getter)py_lv_draw_sw_mask_fade_param_cfg_t_getattro, + .tp_setattro = (setter)py_lv_draw_sw_mask_fade_param_cfg_t_setattro, + .tp_new = py_lv_draw_sw_mask_fade_param_cfg_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_draw_sw_mask_fade_param_cfg_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_draw_sw_mask_fade_param_cfg_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_fade_param_cfg_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_draw_sw_mask_fade_param_cfg_t*)self->data; +} + +static lv_draw_sw_mask_fade_param_cfg_t mp_write_scratch_lv_draw_sw_mask_fade_param_cfg_t; + +static inline void* mp_write_value_ptr_lv_draw_sw_mask_fade_param_cfg_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_draw_sw_mask_fade_param_cfg_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_draw_sw_mask_fade_param_cfg_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_draw_sw_mask_fade_param_cfg_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_draw_sw_mask_fade_param_cfg_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_draw_sw_mask_fade_param_cfg_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_fade_param_cfg_t or dict, got None"); + } + memset(&mp_write_scratch_lv_draw_sw_mask_fade_param_cfg_t, 0, sizeof(lv_draw_sw_mask_fade_param_cfg_t)); + return &mp_write_scratch_lv_draw_sw_mask_fade_param_cfg_t; +} + +#define mp_write_lv_draw_sw_mask_fade_param_cfg_t(struct_obj) (*((lv_draw_sw_mask_fade_param_cfg_t*)mp_write_value_ptr_lv_draw_sw_mask_fade_param_cfg_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_draw_sw_mask_fade_param_cfg_t(void *field) +{ + return lv_to_mp_struct(&py_lv_draw_sw_mask_fade_param_cfg_t_type, field); +} + +#define mp_read_lv_draw_sw_mask_fade_param_cfg_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_fade_param_cfg_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_fade_param_cfg_t))) +#define mp_read_byref_lv_draw_sw_mask_fade_param_cfg_t(field) mp_read_ptr_lv_draw_sw_mask_fade_param_cfg_t(&field) + /* * Struct lv_draw_sw_mask_fade_param_t (CPython) @@ -55666,6 +57309,7 @@ static PyObject *py_lv_draw_sw_mask_fade_param_t_getattro(PyObject *self, PyObje const char *attr = PyUnicode_AsUTF8(name); if (attr == NULL) return NULL; if (strcmp(attr, "dsc") == 0) return mp_read_byref_lv_draw_sw_mask_common_dsc_t(data->dsc); + if (strcmp(attr, "cfg") == 0) return mp_read_byref_lv_draw_sw_mask_fade_param_cfg_t(data->cfg); for (PyMethodDef *m = py_lv_draw_sw_mask_fade_param_t_methods; m->ml_name != NULL; m++) { if (strcmp(attr, m->ml_name) == 0) return PyCFunction_NewEx(m, self, NULL); @@ -55691,6 +57335,7 @@ static int py_lv_draw_sw_mask_fade_param_t_setattro(PyObject *self, PyObject *na lv_draw_sw_mask_fade_param_t saved; memcpy(&saved, data, sizeof(saved)); if (strcmp(attr, "dsc") == 0) { data->dsc = mp_write_lv_draw_sw_mask_common_dsc_t(value); result = 0; } + if (strcmp(attr, "cfg") == 0) { data->cfg = mp_write_lv_draw_sw_mask_fade_param_cfg_t(value); result = 0; } if (PyErr_Occurred()) { memcpy(data, &saved, sizeof(saved)); return -1; @@ -55765,6 +57410,126 @@ static inline PyObject *mp_read_ptr_lv_draw_sw_mask_fade_param_t(void *field) #define mp_read_lv_draw_sw_mask_fade_param_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_fade_param_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_fade_param_t))) #define mp_read_byref_lv_draw_sw_mask_fade_param_t(field) mp_read_ptr_lv_draw_sw_mask_fade_param_t(&field) +typedef __typeof__( ((lv_draw_sw_mask_map_param_t*)(0))->cfg ) lv_draw_sw_mask_map_param_cfg_t; + +/* + * Struct lv_draw_sw_mask_map_param_cfg_t (CPython) + */ + +extern PyMethodDef py_lv_draw_sw_mask_map_param_cfg_t_methods[]; + +static PyObject *py_lv_draw_sw_mask_map_param_cfg_t_getattro(PyObject *self, PyObject *name) +{ + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_map_param_cfg_t *data = (lv_draw_sw_mask_map_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return NULL; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return NULL; + if (strcmp(attr, "coords") == 0) return mp_read_byref_lv_area_t(data->coords); + if (strcmp(attr, "map") == 0) return mp_array_from_u8ptr((void*)data->map); + for (PyMethodDef *m = py_lv_draw_sw_mask_map_param_cfg_t_methods; m->ml_name != NULL; m++) { + if (strcmp(attr, m->ml_name) == 0) + return PyCFunction_NewEx(m, self, NULL); + } + return PyObject_GenericGetAttr((PyObject *)self, name); +} + +static int py_lv_draw_sw_mask_map_param_cfg_t_setattro(PyObject *self, PyObject *name, PyObject *value) +{ + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete struct fields"); + return -1; + } + py_lv_struct_t *inst = (py_lv_struct_t *)self; + lv_draw_sw_mask_map_param_cfg_t *data = (lv_draw_sw_mask_map_param_cfg_t*)inst->data; + if (data == NULL) { + PyErr_SetString(PyLvReferenceError, "struct data is NULL"); + return -1; + } + const char *attr = PyUnicode_AsUTF8(name); + if (attr == NULL) return -1; + int result = -1; + lv_draw_sw_mask_map_param_cfg_t saved; + memcpy(&saved, data, sizeof(saved)); + if (strcmp(attr, "coords") == 0) { data->coords = mp_write_lv_area_t(value); result = 0; } + if (strcmp(attr, "map") == 0) { data->map = (void*)mp_array_to_u8ptr(value); result = 0; } + if (PyErr_Occurred()) { + memcpy(data, &saved, sizeof(saved)); + return -1; + } + if (result < 0) { + PyErr_Format(PyExc_AttributeError, "'lv_draw_sw_mask_map_param_cfg_t' object has no attribute '%s'", attr); + } + return result; +} + +static PyObject *py_lv_draw_sw_mask_map_param_cfg_t_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + return make_new_lv_struct(type, args, kwds, sizeof(lv_draw_sw_mask_map_param_cfg_t)); +} + +static void py_lv_draw_sw_mask_map_param_cfg_t_dealloc(py_lv_struct_t *self) +{ + py_lv_struct_dealloc(self); +} + +PyTypeObject py_lv_draw_sw_mask_map_param_cfg_t_type = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "lvgl.lv_draw_sw_mask_map_param_cfg_t", + .tp_basicsize = sizeof(py_lv_struct_t), + .tp_dealloc = (destructor)py_lv_draw_sw_mask_map_param_cfg_t_dealloc, + .tp_getattro = (getter)py_lv_draw_sw_mask_map_param_cfg_t_getattro, + .tp_setattro = (setter)py_lv_draw_sw_mask_map_param_cfg_t_setattro, + .tp_new = py_lv_draw_sw_mask_map_param_cfg_t_new, + .tp_base = &py_lv_base_struct_type, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, +}; + +static inline void* mp_write_ptr_lv_draw_sw_mask_map_param_cfg_t(PyObject *self_in) +{ + if (!self_in || self_in == Py_None) return NULL; + if (!PyObject_TypeCheck(self_in, &py_lv_draw_sw_mask_map_param_cfg_t_type)) { + PyErr_Format(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_map_param_cfg_t, got '%s'", Py_TYPE(self_in)->tp_name); + return NULL; + } + py_lv_struct_t *self = (py_lv_struct_t *)self_in; + return (lv_draw_sw_mask_map_param_cfg_t*)self->data; +} + +static lv_draw_sw_mask_map_param_cfg_t mp_write_scratch_lv_draw_sw_mask_map_param_cfg_t; + +static inline void* mp_write_value_ptr_lv_draw_sw_mask_map_param_cfg_t(PyObject *value) +{ + if (value != NULL && PyDict_Check(value)) { + PyObject *tmp = PyObject_CallOneArg((PyObject *)&py_lv_draw_sw_mask_map_param_cfg_t_type, value); + if (tmp != NULL) { + memcpy(&mp_write_scratch_lv_draw_sw_mask_map_param_cfg_t, ((py_lv_struct_t *)tmp)->data, sizeof(lv_draw_sw_mask_map_param_cfg_t)); + Py_DECREF(tmp); + return &mp_write_scratch_lv_draw_sw_mask_map_param_cfg_t; + } + } else if (value != NULL && value != Py_None) { + void *p = mp_write_ptr_lv_draw_sw_mask_map_param_cfg_t(value); + if (p != NULL) return p; + } else { + PyErr_SetString(PyExc_TypeError, "Expected lvgl.lv_draw_sw_mask_map_param_cfg_t or dict, got None"); + } + memset(&mp_write_scratch_lv_draw_sw_mask_map_param_cfg_t, 0, sizeof(lv_draw_sw_mask_map_param_cfg_t)); + return &mp_write_scratch_lv_draw_sw_mask_map_param_cfg_t; +} + +#define mp_write_lv_draw_sw_mask_map_param_cfg_t(struct_obj) (*((lv_draw_sw_mask_map_param_cfg_t*)mp_write_value_ptr_lv_draw_sw_mask_map_param_cfg_t(struct_obj))) + +static inline PyObject *mp_read_ptr_lv_draw_sw_mask_map_param_cfg_t(void *field) +{ + return lv_to_mp_struct(&py_lv_draw_sw_mask_map_param_cfg_t_type, field); +} + +#define mp_read_lv_draw_sw_mask_map_param_cfg_t(field) lv_to_mp_struct_own(&py_lv_draw_sw_mask_map_param_cfg_t_type, copy_buffer(&field, sizeof(lv_draw_sw_mask_map_param_cfg_t))) +#define mp_read_byref_lv_draw_sw_mask_map_param_cfg_t(field) mp_read_ptr_lv_draw_sw_mask_map_param_cfg_t(&field) + /* * Struct lv_draw_sw_mask_map_param_t (CPython) @@ -55783,6 +57548,7 @@ static PyObject *py_lv_draw_sw_mask_map_param_t_getattro(PyObject *self, PyObjec const char *attr = PyUnicode_AsUTF8(name); if (attr == NULL) return NULL; if (strcmp(attr, "dsc") == 0) return mp_read_byref_lv_draw_sw_mask_common_dsc_t(data->dsc); + if (strcmp(attr, "cfg") == 0) return mp_read_byref_lv_draw_sw_mask_map_param_cfg_t(data->cfg); for (PyMethodDef *m = py_lv_draw_sw_mask_map_param_t_methods; m->ml_name != NULL; m++) { if (strcmp(attr, m->ml_name) == 0) return PyCFunction_NewEx(m, self, NULL); @@ -55808,6 +57574,7 @@ static int py_lv_draw_sw_mask_map_param_t_setattro(PyObject *self, PyObject *nam lv_draw_sw_mask_map_param_t saved; memcpy(&saved, data, sizeof(saved)); if (strcmp(attr, "dsc") == 0) { data->dsc = mp_write_lv_draw_sw_mask_common_dsc_t(value); result = 0; } + if (strcmp(attr, "cfg") == 0) { data->cfg = mp_write_lv_draw_sw_mask_map_param_cfg_t(value); result = 0; } if (PyErr_Occurred()) { memcpy(data, &saved, sizeof(saved)); return -1; @@ -66675,6 +68442,179 @@ PyMethodDef py_lv_grad_dsc_t_methods[] = { }; PyMethodDef py_lv_grad_stop_t_methods[] = {{NULL}}; +PyMethodDef py_lv_grad_dsc_params_t_methods[] = {{NULL}}; +PyMethodDef py_lv_grad_dsc_params_linear_t_methods[] = {{NULL}}; + +/* + * lvgl extension definition for: + * void lv_point_transform(lv_point_t *point, int32_t angle, int32_t scale_x, int32_t scale_y, const lv_point_t *pivot, bool zoom_first) + */ +static PyObject *py_lv_point_transform_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) +{ + PyGILState_STATE gstate = PyGILState_Ensure(); + (void)py_kwds; + long angle_val; long scale_x_val; long scale_y_val; PyObject *pivot_py; long zoom_first_val; + if (!PyArg_ParseTuple(py_args, "lllOl", &angle_val, &scale_x_val, &scale_y_val, &pivot_py, &zoom_first_val)) { PyGILState_Release(gstate); return NULL; } + lv_point_t *point = (lv_point_t *)mp_write_ptr_lv_point_t(self); + int32_t angle = (int32_t)angle_val; + int32_t scale_x = (int32_t)scale_x_val; + int32_t scale_y = (int32_t)scale_y_val; + const lv_point_t *pivot = (const lv_point_t *)mp_write_ptr_lv_point_t(pivot_py); + bool zoom_first = (zoom_first_val != 0); + if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } + + lvpy_lock(); + ((void (*)(lv_point_t *, int32_t, int32_t, int32_t, const lv_point_t *, bool))lv_point_transform)(point, angle, scale_x, scale_y, pivot, zoom_first); + lvpy_unlock(); + + PyGILState_Release(gstate); + Py_RETURN_NONE; +} + +static PyMethodDef py_lv_point_transform_struct_method_def = { + "lv_point_transform", + (PyCFunction)py_lv_point_transform_struct_method, + METH_VARARGS | METH_KEYWORDS, + NULL +}; + + +/* + * lvgl extension definition for: + * void lv_point_array_transform(lv_point_t *points, size_t count, int32_t angle, int32_t scale_x, int32_t scale_y, const lv_point_t *pivot, bool zoom_first) + */ +static PyObject *py_lv_point_array_transform_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) +{ + PyGILState_STATE gstate = PyGILState_Ensure(); + (void)py_kwds; + long count_val; long angle_val; long scale_x_val; long scale_y_val; PyObject *pivot_py; long zoom_first_val; + if (!PyArg_ParseTuple(py_args, "llllOl", &count_val, &angle_val, &scale_x_val, &scale_y_val, &pivot_py, &zoom_first_val)) { PyGILState_Release(gstate); return NULL; } + lv_point_t *points = (lv_point_t *)mp_write_ptr_lv_point_t(self); + size_t count = (size_t)count_val; + int32_t angle = (int32_t)angle_val; + int32_t scale_x = (int32_t)scale_x_val; + int32_t scale_y = (int32_t)scale_y_val; + const lv_point_t *pivot = (const lv_point_t *)mp_write_ptr_lv_point_t(pivot_py); + bool zoom_first = (zoom_first_val != 0); + if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } + + lvpy_lock(); + ((void (*)(lv_point_t *, size_t, int32_t, int32_t, int32_t, const lv_point_t *, bool))lv_point_array_transform)(points, count, angle, scale_x, scale_y, pivot, zoom_first); + lvpy_unlock(); + + PyGILState_Release(gstate); + Py_RETURN_NONE; +} + +static PyMethodDef py_lv_point_array_transform_struct_method_def = { + "lv_point_array_transform", + (PyCFunction)py_lv_point_array_transform_struct_method, + METH_VARARGS | METH_KEYWORDS, + NULL +}; + + +/* + * lvgl extension definition for: + * lv_point_precise_t lv_point_to_precise(const lv_point_t *p) + */ +static PyObject *py_lv_point_to_precise_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) +{ + PyGILState_STATE gstate = PyGILState_Ensure(); + (void)py_kwds; + + const lv_point_t *p = (lv_point_t *)mp_write_ptr_lv_point_t(self); + if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } + + lv_point_precise_t _res; + lvpy_lock(); + _res = ((lv_point_precise_t (*)(const lv_point_t *))lv_point_to_precise)(p); + lvpy_unlock(); + + PyGILState_Release(gstate); + return mp_read_lv_point_precise_t(_res); +} + +static PyMethodDef py_lv_point_to_precise_struct_method_def = { + "lv_point_to_precise", + (PyCFunction)py_lv_point_to_precise_struct_method, + METH_VARARGS | METH_KEYWORDS, + NULL +}; + + +/* + * lvgl extension definition for: + * void lv_point_set(lv_point_t *p, int32_t x, int32_t y) + */ +static PyObject *py_lv_point_set_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) +{ + PyGILState_STATE gstate = PyGILState_Ensure(); + (void)py_kwds; + long x_val; long y_val; + if (!PyArg_ParseTuple(py_args, "ll", &x_val, &y_val)) { PyGILState_Release(gstate); return NULL; } + lv_point_t *p = (lv_point_t *)mp_write_ptr_lv_point_t(self); + int32_t x = (int32_t)x_val; + int32_t y = (int32_t)y_val; + if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } + + lvpy_lock(); + ((void (*)(lv_point_t *, int32_t, int32_t))lv_point_set)(p, x, y); + lvpy_unlock(); + + PyGILState_Release(gstate); + Py_RETURN_NONE; +} + +static PyMethodDef py_lv_point_set_struct_method_def = { + "lv_point_set", + (PyCFunction)py_lv_point_set_struct_method, + METH_VARARGS | METH_KEYWORDS, + NULL +}; + + +/* + * lvgl extension definition for: + * void lv_point_swap(lv_point_t *p1, lv_point_t *p2) + */ +static PyObject *py_lv_point_swap_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) +{ + PyGILState_STATE gstate = PyGILState_Ensure(); + (void)py_kwds; + PyObject *p2_py; + if (!PyArg_ParseTuple(py_args, "O", &p2_py)) { PyGILState_Release(gstate); return NULL; } + lv_point_t *p1 = (lv_point_t *)mp_write_ptr_lv_point_t(self); + lv_point_t *p2 = mp_write_ptr_lv_point_t(p2_py); + if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } + + lvpy_lock(); + ((void (*)(lv_point_t *, lv_point_t *))lv_point_swap)(p1, p2); + lvpy_unlock(); + + PyGILState_Release(gstate); + Py_RETURN_NONE; +} + +static PyMethodDef py_lv_point_swap_struct_method_def = { + "lv_point_swap", + (PyCFunction)py_lv_point_swap_struct_method, + METH_VARARGS | METH_KEYWORDS, + NULL +}; + + +PyMethodDef py_lv_point_t_methods[] = { + {"transform", (PyCFunction)py_lv_point_transform_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, + {"array_transform", (PyCFunction)py_lv_point_array_transform_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, + {"to_precise", (PyCFunction)py_lv_point_to_precise_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, + {"set", (PyCFunction)py_lv_point_set_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, + {"swap", (PyCFunction)py_lv_point_swap_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, + {NULL} +}; + +PyMethodDef py_lv_grad_dsc_params_radial_t_methods[] = {{NULL}}; +PyMethodDef py_lv_grad_dsc_params_conical_t_methods[] = {{NULL}}; PyMethodDef py_lv_image_colorkey_t_methods[] = {{NULL}}; /* @@ -68375,6 +70315,8 @@ PyMethodDef py_lv_anim_t_methods[] = { {NULL} }; +PyMethodDef py_lv_anim_parameter_t_methods[] = {{NULL}}; +PyMethodDef py_lv_anim_bezier3_para_t_methods[] = {{NULL}}; /* * Callback function lv_style_transition_dsc_init_path_cb (CPython) @@ -75761,175 +77703,6 @@ PyMethodDef py_lv_obj_class_t_methods[] = { PyMethodDef py_lv_matrix_t_methods[] = {{NULL}}; -/* - * lvgl extension definition for: - * void lv_point_transform(lv_point_t *point, int32_t angle, int32_t scale_x, int32_t scale_y, const lv_point_t *pivot, bool zoom_first) - */ -static PyObject *py_lv_point_transform_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) -{ - PyGILState_STATE gstate = PyGILState_Ensure(); - (void)py_kwds; - long angle_val; long scale_x_val; long scale_y_val; PyObject *pivot_py; long zoom_first_val; - if (!PyArg_ParseTuple(py_args, "lllOl", &angle_val, &scale_x_val, &scale_y_val, &pivot_py, &zoom_first_val)) { PyGILState_Release(gstate); return NULL; } - lv_point_t *point = (lv_point_t *)mp_write_ptr_lv_point_t(self); - int32_t angle = (int32_t)angle_val; - int32_t scale_x = (int32_t)scale_x_val; - int32_t scale_y = (int32_t)scale_y_val; - const lv_point_t *pivot = (const lv_point_t *)mp_write_ptr_lv_point_t(pivot_py); - bool zoom_first = (zoom_first_val != 0); - if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } - - lvpy_lock(); - ((void (*)(lv_point_t *, int32_t, int32_t, int32_t, const lv_point_t *, bool))lv_point_transform)(point, angle, scale_x, scale_y, pivot, zoom_first); - lvpy_unlock(); - - PyGILState_Release(gstate); - Py_RETURN_NONE; -} - -static PyMethodDef py_lv_point_transform_struct_method_def = { - "lv_point_transform", - (PyCFunction)py_lv_point_transform_struct_method, - METH_VARARGS | METH_KEYWORDS, - NULL -}; - - -/* - * lvgl extension definition for: - * void lv_point_array_transform(lv_point_t *points, size_t count, int32_t angle, int32_t scale_x, int32_t scale_y, const lv_point_t *pivot, bool zoom_first) - */ -static PyObject *py_lv_point_array_transform_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) -{ - PyGILState_STATE gstate = PyGILState_Ensure(); - (void)py_kwds; - long count_val; long angle_val; long scale_x_val; long scale_y_val; PyObject *pivot_py; long zoom_first_val; - if (!PyArg_ParseTuple(py_args, "llllOl", &count_val, &angle_val, &scale_x_val, &scale_y_val, &pivot_py, &zoom_first_val)) { PyGILState_Release(gstate); return NULL; } - lv_point_t *points = (lv_point_t *)mp_write_ptr_lv_point_t(self); - size_t count = (size_t)count_val; - int32_t angle = (int32_t)angle_val; - int32_t scale_x = (int32_t)scale_x_val; - int32_t scale_y = (int32_t)scale_y_val; - const lv_point_t *pivot = (const lv_point_t *)mp_write_ptr_lv_point_t(pivot_py); - bool zoom_first = (zoom_first_val != 0); - if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } - - lvpy_lock(); - ((void (*)(lv_point_t *, size_t, int32_t, int32_t, int32_t, const lv_point_t *, bool))lv_point_array_transform)(points, count, angle, scale_x, scale_y, pivot, zoom_first); - lvpy_unlock(); - - PyGILState_Release(gstate); - Py_RETURN_NONE; -} - -static PyMethodDef py_lv_point_array_transform_struct_method_def = { - "lv_point_array_transform", - (PyCFunction)py_lv_point_array_transform_struct_method, - METH_VARARGS | METH_KEYWORDS, - NULL -}; - - -/* - * lvgl extension definition for: - * lv_point_precise_t lv_point_to_precise(const lv_point_t *p) - */ -static PyObject *py_lv_point_to_precise_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) -{ - PyGILState_STATE gstate = PyGILState_Ensure(); - (void)py_kwds; - - const lv_point_t *p = (lv_point_t *)mp_write_ptr_lv_point_t(self); - if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } - - lv_point_precise_t _res; - lvpy_lock(); - _res = ((lv_point_precise_t (*)(const lv_point_t *))lv_point_to_precise)(p); - lvpy_unlock(); - - PyGILState_Release(gstate); - return mp_read_lv_point_precise_t(_res); -} - -static PyMethodDef py_lv_point_to_precise_struct_method_def = { - "lv_point_to_precise", - (PyCFunction)py_lv_point_to_precise_struct_method, - METH_VARARGS | METH_KEYWORDS, - NULL -}; - - -/* - * lvgl extension definition for: - * void lv_point_set(lv_point_t *p, int32_t x, int32_t y) - */ -static PyObject *py_lv_point_set_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) -{ - PyGILState_STATE gstate = PyGILState_Ensure(); - (void)py_kwds; - long x_val; long y_val; - if (!PyArg_ParseTuple(py_args, "ll", &x_val, &y_val)) { PyGILState_Release(gstate); return NULL; } - lv_point_t *p = (lv_point_t *)mp_write_ptr_lv_point_t(self); - int32_t x = (int32_t)x_val; - int32_t y = (int32_t)y_val; - if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } - - lvpy_lock(); - ((void (*)(lv_point_t *, int32_t, int32_t))lv_point_set)(p, x, y); - lvpy_unlock(); - - PyGILState_Release(gstate); - Py_RETURN_NONE; -} - -static PyMethodDef py_lv_point_set_struct_method_def = { - "lv_point_set", - (PyCFunction)py_lv_point_set_struct_method, - METH_VARARGS | METH_KEYWORDS, - NULL -}; - - -/* - * lvgl extension definition for: - * void lv_point_swap(lv_point_t *p1, lv_point_t *p2) - */ -static PyObject *py_lv_point_swap_struct_method(PyObject *self, PyObject *py_args, PyObject *py_kwds) -{ - PyGILState_STATE gstate = PyGILState_Ensure(); - (void)py_kwds; - PyObject *p2_py; - if (!PyArg_ParseTuple(py_args, "O", &p2_py)) { PyGILState_Release(gstate); return NULL; } - lv_point_t *p1 = (lv_point_t *)mp_write_ptr_lv_point_t(self); - lv_point_t *p2 = mp_write_ptr_lv_point_t(p2_py); - if (PyErr_Occurred()) { PyGILState_Release(gstate); return NULL; } - - lvpy_lock(); - ((void (*)(lv_point_t *, lv_point_t *))lv_point_swap)(p1, p2); - lvpy_unlock(); - - PyGILState_Release(gstate); - Py_RETURN_NONE; -} - -static PyMethodDef py_lv_point_swap_struct_method_def = { - "lv_point_swap", - (PyCFunction)py_lv_point_swap_struct_method, - METH_VARARGS | METH_KEYWORDS, - NULL -}; - - -PyMethodDef py_lv_point_t_methods[] = { - {"transform", (PyCFunction)py_lv_point_transform_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, - {"array_transform", (PyCFunction)py_lv_point_array_transform_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, - {"to_precise", (PyCFunction)py_lv_point_to_precise_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, - {"set", (PyCFunction)py_lv_point_set_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, - {"swap", (PyCFunction)py_lv_point_swap_struct_method, METH_VARARGS | METH_KEYWORDS, NULL}, - {NULL} -}; - - /* * lvgl extension definition for: * inline static bool lv_style_is_const(const lv_style_t *style) @@ -88397,6 +90170,7 @@ PyMethodDef py_lv_font_glyph_dsc_t_methods[] = { {NULL} }; +PyMethodDef py_lv_font_glyph_dsc_gid_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -90875,6 +92649,8 @@ PyMethodDef py_lv_indev_t_methods[] = { {NULL} }; +PyMethodDef py_lv_indev_pointer_t_methods[] = {{NULL}}; +PyMethodDef py_lv_indev_keypad_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -91216,6 +92992,7 @@ PyMethodDef py_lv_draw_sw_mask_line_param_t_methods[] = { }; PyMethodDef py_lv_draw_sw_mask_common_dsc_t_methods[] = {{NULL}}; +PyMethodDef py_lv_draw_sw_mask_line_param_cfg_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -91255,6 +93032,7 @@ PyMethodDef py_lv_draw_sw_mask_angle_param_t_methods[] = { {NULL} }; +PyMethodDef py_lv_draw_sw_mask_angle_param_cfg_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -91293,6 +93071,7 @@ PyMethodDef py_lv_draw_sw_mask_radius_param_t_methods[] = { {NULL} }; +PyMethodDef py_lv_draw_sw_mask_radius_param_cfg_t_methods[] = {{NULL}}; PyMethodDef py_lv_draw_sw_mask_radius_circle_dsc_t_methods[] = {{NULL}}; /* @@ -91334,6 +93113,7 @@ PyMethodDef py_lv_draw_sw_mask_fade_param_t_methods[] = { {NULL} }; +PyMethodDef py_lv_draw_sw_mask_fade_param_cfg_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -91371,6 +93151,7 @@ PyMethodDef py_lv_draw_sw_mask_map_param_t_methods[] = { {NULL} }; +PyMethodDef py_lv_draw_sw_mask_map_param_cfg_t_methods[] = {{NULL}}; /* * lvgl extension definition for: @@ -93851,6 +95632,11 @@ PyMODINIT_FUNC PyInit_lvgl(void) lv_struct_expose_size(&py_lv_grad_stop_t_type); Py_INCREF((PyObject *)&py_lv_grad_stop_t_type); if (PyModule_AddObject(m, "grad_stop_t", (PyObject *)&py_lv_grad_stop_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_point_t_type) < 0) return NULL; + lv_struct_register_size(&py_lv_point_t_type, sizeof(lv_point_t)); + lv_struct_expose_size(&py_lv_point_t_type); + Py_INCREF((PyObject *)&py_lv_point_t_type); + if (PyModule_AddObject(m, "point_t", (PyObject *)&py_lv_point_t_type) < 0) return NULL; if (PyType_Ready(&py_lv_image_colorkey_t_type) < 0) return NULL; lv_struct_register_size(&py_lv_image_colorkey_t_type, sizeof(lv_image_colorkey_t)); lv_struct_expose_size(&py_lv_image_colorkey_t_type); @@ -93954,11 +95740,6 @@ PyMODINIT_FUNC PyInit_lvgl(void) if (PyType_Ready(&py_lv_matrix_t_type) < 0) return NULL; Py_INCREF((PyObject *)&py_lv_matrix_t_type); if (PyModule_AddObject(m, "matrix_t", (PyObject *)&py_lv_matrix_t_type) < 0) return NULL; - if (PyType_Ready(&py_lv_point_t_type) < 0) return NULL; - lv_struct_register_size(&py_lv_point_t_type, sizeof(lv_point_t)); - lv_struct_expose_size(&py_lv_point_t_type); - Py_INCREF((PyObject *)&py_lv_point_t_type); - if (PyModule_AddObject(m, "point_t", (PyObject *)&py_lv_point_t_type) < 0) return NULL; if (PyType_Ready(&py_lv_style_t_type) < 0) return NULL; lv_struct_register_size(&py_lv_style_t_type, sizeof(lv_style_t)); lv_struct_expose_size(&py_lv_style_t_type); @@ -94356,6 +96137,20 @@ PyMODINIT_FUNC PyInit_lvgl(void) lv_struct_expose_size(&py_lv_indev_touch_data_t_type); Py_INCREF((PyObject *)&py_lv_indev_touch_data_t_type); if (PyModule_AddObject(m, "indev_touch_data_t", (PyObject *)&py_lv_indev_touch_data_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_grad_dsc_params_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_grad_dsc_params_linear_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_grad_dsc_params_radial_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_grad_dsc_params_conical_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_anim_parameter_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_anim_bezier3_para_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_font_glyph_dsc_gid_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_indev_pointer_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_indev_keypad_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_draw_sw_mask_line_param_cfg_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_draw_sw_mask_angle_param_cfg_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_draw_sw_mask_radius_param_cfg_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_draw_sw_mask_fade_param_cfg_t_type) < 0) return NULL; + if (PyType_Ready(&py_lv_draw_sw_mask_map_param_cfg_t_type) < 0) return NULL; { PyObject *obj = lv_to_mp_struct(&py_lv_color_filter_dsc_t_type, (void *)&lv_color_filter_shade); if (obj == NULL) return NULL; if (PyModule_AddObject(m, "color_filter_shade", obj) < 0) { Py_DECREF(obj); return NULL; } } { PyObject *obj = lv_to_mp_struct(&py_lv_tree_class_t_type, (void *)&lv_tree_node_class); if (obj == NULL) return NULL; if (PyModule_AddObject(m, "tree_node_class", obj) < 0) { Py_DECREF(obj); return NULL; } } { PyObject *obj = lv_to_mp_struct(&py_lv_font_t_type, (void *)&lv_font_montserrat_14); if (obj == NULL) return NULL; if (PyModule_AddObject(m, "font_montserrat_14", obj) < 0) { Py_DECREF(obj); return NULL; } } diff --git a/tests/test_api_model.py b/tests/test_api_model.py index 0fb1ea1..a855a02 100644 --- a/tests/test_api_model.py +++ b/tests/test_api_model.py @@ -257,3 +257,46 @@ def test_api_model_detects_duplicate_exports(): "duplicate export module.dup" in error for error in duplicate.validation_errors() ) + + +def test_struct_method_names_match_the_runtime_binding(): + # The runtimes name a struct method after the part of the function name it + # doesn't share with the struct's C name (analyze.noncommon_part), so + # lv_grad_linear_init on lv_grad_dsc_t is linear_init, not grad_linear_init. + declarations = parse_source( + "typedef struct _lv_obj_t lv_obj_t; " + "typedef struct { int dir; } lv_grad_dsc_t; " + "void lv_grad_linear_init(lv_grad_dsc_t *dsc, int from_x); " + "void lv_grad_init_stops(lv_grad_dsc_t *grad, int num_stops);", + filename="api.h", + ) + + model = build_api_model(declarations, module_prefix="lv", base_obj_type="lv_obj_t") + + functions = {function.c_name: function for function in model.functions} + assert functions["lv_grad_linear_init"].role == "struct_method" + assert functions["lv_grad_linear_init"].python_name == "linear_init" + assert functions["lv_grad_init_stops"].python_name == "init_stops" + + +def test_generated_struct_method_names_match_the_runtime_binding(): + import json + from pathlib import Path + + from binding.analyze import noncommon_part + + api = json.loads((Path(__file__).resolve().parents[1] / "generated" / "api.json").read_text()) + checked = 0 + wrong = [] + for function in api["functions"]: + if function["role"] != "struct_method": + continue + target = function["parameters"][0]["type"].get("target", {}) + if target.get("kind") != "identifier": + continue + want = noncommon_part(function["c_name"], target["name"]) + checked += 1 + if function["python_name"] != want: + wrong.append((function["c_name"], function["python_name"], want)) + assert checked > 50 + assert wrong == [] diff --git a/tools/test_lvgl_smoke.py b/tools/test_lvgl_smoke.py index ca09dbe..5569f73 100755 --- a/tools/test_lvgl_smoke.py +++ b/tools/test_lvgl_smoke.py @@ -596,6 +596,35 @@ def test_struct_array_fields(lv): print("OK: struct array fields index, assign and check their length") +def test_grad_helpers(lv): + # The gradient helpers are methods named as the stub names them, and the + # params union they fill in is readable and writable (lvgl-bindings#39). + g = _lv_export(lv, "grad_dsc_t")() + for name in ("linear_init", "radial_init", "radial_set_focal", "conical_init", + "horizontal_init", "vertical_init", "init_stops"): + if not hasattr(g, name): + _fail("grad_dsc_t has no %s" % name) + pad = lv.GRAD_EXTEND.PAD + g.linear_init(1, 2, 3, 4, pad) + lin = g.params.linear + if (lin.start.x, lin.start.y, lin.end.x, lin.end.y) != (1, 2, 3, 4): + _fail("linear_init did not fill params.linear") + if g.dir != lv.GRAD_DIR.LINEAR: + _fail("linear_init did not set dir") + g.radial_init(80, 80, 160, 80, pad) + rad = g.params.radial + if (rad.end.x, rad.end.y, rad.end_extent.x, rad.end_extent.y) != (80, 80, 160, 80): + _fail("radial_init did not fill params.radial") + g.conical_init(50, 60, 0, 1800, pad) + con = g.params.conical + if (con.center.x, con.start_angle, con.end_angle) != (50, 0, 1800): + _fail("conical_init did not fill params.conical") + con.end_angle = 900 + if g.params.conical.end_angle != 900: + _fail("a write through params.conical was lost") + print("OK: gradient helpers by stub name; params reads and writes") + + def test_struct_value_from_dict(lv): # A struct-by-value field takes a dict, as its type's constructor does, and # a wrong type raises instead of crashing CPython (lvgl-bindings#21). @@ -693,6 +722,7 @@ def main(): test_struct_fields_and_arrays(lv) test_line_points_list_and_buffer(lv) test_struct_array_fields(lv) + test_grad_helpers(lv) test_struct_value_from_dict(lv) test_event_callback(lv) test_callback_gc_with_widget_ref(lv)