diff options
Diffstat (limited to 'source/blender/makesrna')
63 files changed, 1732 insertions, 931 deletions
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index e1e655fad4b..e855395482e 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -177,7 +177,7 @@ int RNA_property_multi_array_length(PointerRNA *ptr, PropertyRNA *prop, int dime /** * Used by BPY to make an array from the python object. */ -int RNA_property_array_dimension(PointerRNA *ptr, PropertyRNA *prop, int length[]); +int RNA_property_array_dimension(const PointerRNA *ptr, PropertyRNA *prop, int length[]); char RNA_property_array_item_char(PropertyRNA *prop, int index); int RNA_property_array_item_index(PropertyRNA *prop, char name); @@ -284,7 +284,7 @@ bool RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, const int i */ bool RNA_property_editable_flag(PointerRNA *ptr, PropertyRNA *prop); -bool RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop); +bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop); bool RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop); /** * \note Does not take into account editable status, this has to be checked separately @@ -358,6 +358,21 @@ char *RNA_property_string_get_alloc( PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len); void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value); void RNA_property_string_set_bytes(PointerRNA *ptr, PropertyRNA *prop, const char *value, int len); + +eStringPropertySearchFlag RNA_property_string_search_flag(PropertyRNA *prop); +/** + * Search candidates for string `prop` by calling `visit_fn` with each string. + * Typically these strings are collected in `visit_user_data` in a format defined by the caller. + * + * See #PropStringSearchFunc for details. + */ +void RNA_property_string_search(const struct bContext *C, + PointerRNA *ptr, + PropertyRNA *prop, + const char *edit_text, + StringPropertySearchVisitFunc visit_fn, + void *visit_user_data); + /** * \return the length without `\0` terminator. */ @@ -402,7 +417,9 @@ int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop); * without having to iterate over items in the collection (needed for some kinds of collections). */ bool RNA_property_collection_is_empty(PointerRNA *ptr, PropertyRNA *prop); -int RNA_property_collection_lookup_index(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *t_ptr); +int RNA_property_collection_lookup_index(PointerRNA *ptr, + PropertyRNA *prop, + const PointerRNA *t_ptr); int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, @@ -468,7 +485,7 @@ bool RNA_property_assign_default(PointerRNA *ptr, PropertyRNA *prop); * UI code or Actions, though efficiency is a concern. */ char *RNA_path_append( - const char *path, PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey); + const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey); #if 0 /* UNUSED. */ char *RNA_path_back(const char *path); #endif @@ -486,7 +503,10 @@ char *RNA_path_back(const char *path); * \note Assumes all pointers provided are valid * \return True if path can be resolved to a valid "pointer + property" OR "pointer only" */ -bool RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop); +bool RNA_path_resolve(const PointerRNA *ptr, + const char *path, + PointerRNA *r_ptr, + PropertyRNA **r_prop); /** * Resolve the given RNA Path to find the pointer and/or property + array index @@ -495,16 +515,22 @@ bool RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, Prop * \note Assumes all pointers provided are valid. * \return True if path can be resolved to a valid "pointer + property" OR "pointer only" */ -bool RNA_path_resolve_full( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index); +bool RNA_path_resolve_full(const PointerRNA *ptr, + const char *path, + PointerRNA *r_ptr, + PropertyRNA **r_prop, + int *r_index); /** * A version of #RNA_path_resolve_full doesn't check the value of #PointerRNA.data. * * \note While it's correct to ignore the value of #PointerRNA.data * most callers need to know if the resulting pointer was found and not null. */ -bool RNA_path_resolve_full_maybe_null( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index); +bool RNA_path_resolve_full_maybe_null(const PointerRNA *ptr, + const char *path, + PointerRNA *r_ptr, + PropertyRNA **r_prop, + int *r_index); /* RNA_path_resolve_property() variants ensure that pointer + property both exist. */ @@ -516,7 +542,7 @@ bool RNA_path_resolve_full_maybe_null( * \note Assumes all pointers provided are valid * \return True only if both a valid pointer and property are found after resolving the path */ -bool RNA_path_resolve_property(PointerRNA *ptr, +bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop); @@ -529,8 +555,11 @@ bool RNA_path_resolve_property(PointerRNA *ptr, * \note Assumes all pointers provided are valid * \return True only if both a valid pointer and property are found after resolving the path */ -bool RNA_path_resolve_property_full( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index); +bool RNA_path_resolve_property_full(const PointerRNA *ptr, + const char *path, + PointerRNA *r_ptr, + PropertyRNA **r_prop, + int *r_index); /* RNA_path_resolve_property_and_item_pointer() variants ensure that pointer + property both exist, * and resolve last Pointer value if possible (Pointer prop or item of a Collection prop). */ @@ -547,7 +576,7 @@ bool RNA_path_resolve_property_full( * You must check for its validity before use! * \return True only if both a valid pointer and property are found after resolving the path */ -bool RNA_path_resolve_property_and_item_pointer(PointerRNA *ptr, +bool RNA_path_resolve_property_and_item_pointer(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, @@ -566,7 +595,7 @@ bool RNA_path_resolve_property_and_item_pointer(PointerRNA *ptr, * You must check for its validity before use! * \return True only if both a valid pointer and property are found after resolving the path */ -bool RNA_path_resolve_property_and_item_pointer_full(PointerRNA *ptr, +bool RNA_path_resolve_property_and_item_pointer_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, @@ -614,21 +643,23 @@ struct ID *RNA_find_real_ID_and_path(struct Main *bmain, struct ID *id, const ch char *RNA_path_from_ID_to_struct(const PointerRNA *ptr); -char *RNA_path_from_real_ID_to_struct(struct Main *bmain, PointerRNA *ptr, struct ID **r_real); +char *RNA_path_from_real_ID_to_struct(struct Main *bmain, + const PointerRNA *ptr, + struct ID **r_real); -char *RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop); +char *RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop); /** * \param index_dim: The dimension to show, 0 disables. 1 for 1d array, 2 for 2d. etc. * \param index: The *flattened* index to use when \a `index_dim > 0`, * this is expanded when used with multi-dimensional arrays. */ -char *RNA_path_from_ID_to_property_index(PointerRNA *ptr, +char *RNA_path_from_ID_to_property_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index); char *RNA_path_from_real_ID_to_property_index(struct Main *bmain, - PointerRNA *ptr, + const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index, @@ -638,8 +669,8 @@ char *RNA_path_from_real_ID_to_property_index(struct Main *bmain, * \return the path to given ptr/prop from the closest ancestor of given type, * if any (else return NULL). */ -char *RNA_path_resolve_from_type_to_property(struct PointerRNA *ptr, - struct PropertyRNA *prop, +char *RNA_path_resolve_from_type_to_property(const PointerRNA *ptr, + PropertyRNA *prop, const struct StructRNA *type); /** @@ -651,27 +682,27 @@ char *RNA_path_full_ID_py(struct Main *bmain, struct ID *id); * Get the ID.struct as a python representation, eg: * bpy.data.foo["bar"].some_struct */ -char *RNA_path_full_struct_py(struct Main *bmain, struct PointerRNA *ptr); +char *RNA_path_full_struct_py(struct Main *bmain, const PointerRNA *ptr); /** * Get the ID.struct.property as a python representation, eg: * bpy.data.foo["bar"].some_struct.some_prop[10] */ char *RNA_path_full_property_py_ex( - struct Main *bmain, PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback); + struct Main *bmain, const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback); char *RNA_path_full_property_py(struct Main *bmain, - struct PointerRNA *ptr, - struct PropertyRNA *prop, + const PointerRNA *ptr, + PropertyRNA *prop, int index); /** * Get the struct.property as a python representation, eg: * some_struct.some_prop[10] */ -char *RNA_path_struct_property_py(struct PointerRNA *ptr, struct PropertyRNA *prop, int index); +char *RNA_path_struct_property_py(PointerRNA *ptr, PropertyRNA *prop, int index); /** * Get the struct.property as a python representation, eg: * some_prop[10] */ -char *RNA_path_property_py(const struct PointerRNA *ptr, struct PropertyRNA *prop, int index); +char *RNA_path_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index); /* Quick name based property access * diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index 13a5ec66a16..0389d1b3b16 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -446,6 +446,9 @@ void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set); +void RNA_def_property_string_search_func(PropertyRNA *prop, + const char *search, + eStringPropertySearchFlag search_flag); void RNA_def_property_pointer_funcs( PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll); void RNA_def_property_collection_funcs(PropertyRNA *prop, @@ -490,6 +493,9 @@ void RNA_def_property_string_funcs_runtime(PropertyRNA *prop, StringPropertyGetFunc getfunc, StringPropertyLengthFunc lengthfunc, StringPropertySetFunc setfunc); +void RNA_def_property_string_search_func_runtime(PropertyRNA *prop, + StringPropertySearchFunc search_fn, + eStringPropertySearchFlag search_flag); void RNA_def_property_translation_context(PropertyRNA *prop, const char *context); diff --git a/source/blender/makesrna/RNA_enum_items.h b/source/blender/makesrna/RNA_enum_items.h index 74f8e2487a4..fd264932363 100644 --- a/source/blender/makesrna/RNA_enum_items.h +++ b/source/blender/makesrna/RNA_enum_items.h @@ -108,7 +108,7 @@ DEF_ENUM(rna_enum_brush_gpencil_types_items) DEF_ENUM(rna_enum_brush_gpencil_vertex_types_items) DEF_ENUM(rna_enum_brush_gpencil_sculpt_types_items) DEF_ENUM(rna_enum_brush_gpencil_weight_types_items) -DEF_ENUM(rna_enum_brush_curves_sculpt_tool_items); +DEF_ENUM(rna_enum_brush_curves_sculpt_tool_items) DEF_ENUM(rna_enum_brush_image_tool_items) DEF_ENUM(rna_enum_axis_xy_items) @@ -147,10 +147,19 @@ DEF_ENUM(rna_enum_keymap_propvalue_items) DEF_ENUM(rna_enum_operator_context_items) DEF_ENUM(rna_enum_wm_report_items) +DEF_ENUM(rna_enum_wm_job_type_items) DEF_ENUM(rna_enum_property_type_items) DEF_ENUM(rna_enum_property_subtype_items) +DEF_ENUM(rna_enum_property_subtype_string_items) +DEF_ENUM(rna_enum_property_subtype_number_items) +DEF_ENUM(rna_enum_property_subtype_number_array_items) DEF_ENUM(rna_enum_property_unit_items) +DEF_ENUM(rna_enum_property_flag_items) +DEF_ENUM(rna_enum_property_flag_enum_items) +DEF_ENUM(rna_enum_property_override_flag_items) +DEF_ENUM(rna_enum_property_override_flag_collection_items) +DEF_ENUM(rna_enum_property_string_search_flag_items) DEF_ENUM(rna_enum_shading_type_items) @@ -198,8 +207,11 @@ DEF_ENUM(rna_enum_context_mode_items) DEF_ENUM(rna_enum_preference_section_items) DEF_ENUM(rna_enum_attribute_type_items) +DEF_ENUM(rna_enum_color_attribute_type_items) DEF_ENUM(rna_enum_attribute_type_with_auto_items) DEF_ENUM(rna_enum_attribute_domain_items) +DEF_ENUM(rna_enum_attribute_curves_domain_items) +DEF_ENUM(rna_enum_color_attribute_domain_items) DEF_ENUM(rna_enum_attribute_domain_without_corner_items) DEF_ENUM(rna_enum_attribute_domain_with_auto_items) DEF_ENUM(rna_enum_geometry_component_type_items) diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 3ebcae5f947..5346228050a 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -467,6 +467,27 @@ typedef struct EnumPropertyItem { const char *description; } EnumPropertyItem; +/** + * Heading for RNA enum items (shown in the UI). + * + * The description is currently only shown in the Python documentation. + * By convention the value should be a non-empty string or NULL when there is no description + * (never an empty string). + */ +#define RNA_ENUM_ITEM_HEADING(name, description) \ + { \ + 0, "", 0, name, description \ + } + +/** Separator for RNA enum items (shown in the UI). */ +#define RNA_ENUM_ITEM_SEPR \ + { \ + 0, "", 0, NULL, NULL \ + } + +/** Separator for RNA enum that begins a new column in menus (shown in the UI). */ +#define RNA_ENUM_ITEM_SEPR_COLUMN RNA_ENUM_ITEM_HEADING("", NULL) + /* extended versions with PropertyRNA argument */ typedef bool (*BooleanPropertyGetFunc)(struct PointerRNA *ptr, struct PropertyRNA *prop); typedef void (*BooleanPropertySetFunc)(struct PointerRNA *ptr, @@ -515,6 +536,55 @@ typedef int (*StringPropertyLengthFunc)(struct PointerRNA *ptr, struct PropertyR typedef void (*StringPropertySetFunc)(struct PointerRNA *ptr, struct PropertyRNA *prop, const char *value); + +typedef struct StringPropertySearchVisitParams { + /** Text being searched for (never NULL). */ + const char *text; + /** Additional information to display (optional, may be NULL). */ + const char *info; +} StringPropertySearchVisitParams; + +typedef enum eStringPropertySearchFlag { + /** + * Used so the result of #RNA_property_string_search_flag can be used to check + * if search is supported. + */ + PROP_STRING_SEARCH_SUPPORTED = (1 << 0), + /** Items resulting from the search must be sorted. */ + PROP_STRING_SEARCH_SORT = (1 << 1), + /** + * Allow members besides the ones listed to be entered. + * + * \warning disabling this options causes the search callback to run on redraw and should + * only be enabled this doesn't cause performance issues. + */ + PROP_STRING_SEARCH_SUGGESTION = (1 << 2), +} eStringPropertySearchFlag; + +/** + * Visit string search candidates, `text` may be freed once this callback has finished, + * so references to it should not be held. + */ +typedef void (*StringPropertySearchVisitFunc)(void *visit_user_data, + const StringPropertySearchVisitParams *params); +/** + * \param C: context, may be NULL (in this case all available items should be shown). + * \param ptr: RNA pointer. + * \param prop: RNA property. This must have it's #StringPropertyRNA.search callback set, + * to check this use `RNA_property_string_search_flag(prop) & PROP_STRING_SEARCH_SUPPORTED`. + * \param edit_text: Optionally use the string being edited by the user as a basis + * for the search results (auto-complete Python attributes for e.g.). + * \param visit_fn: This function is called with every search candidate and is typically + * responsible for storing the search results. + * \param visit_user_data: Caller defined data, passed to `visit_fn`. + */ +typedef void (*StringPropertySearchFunc)(const struct bContext *C, + struct PointerRNA *ptr, + struct PropertyRNA *prop, + const char *edit_text, + StringPropertySearchVisitFunc visit_fn, + void *visit_user_data); + typedef int (*EnumPropertyGetFunc)(struct PointerRNA *ptr, struct PropertyRNA *prop); typedef void (*EnumPropertySetFunc)(struct PointerRNA *ptr, struct PropertyRNA *prop, int value); /* same as PropEnumItemFunc */ diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 9980545c19d..af8767a1220 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -237,7 +237,7 @@ if(WITH_IMAGE_HDR) endif() if(WITH_IMAGE_WEBP) - add_definitions(-DWITH_WEBP) + add_definitions(-DWITH_WEBP) endif() if(WITH_AUDASPACE) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index c3ca57b38bf..400944d60d4 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1039,6 +1039,38 @@ static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array) } } +static char *rna_def_property_search_func(FILE *f, + StructRNA *srna, + PropertyRNA *prop, + PropertyDefRNA *UNUSED(dp), + const char *manualfunc) +{ + char *func; + + if (prop->flag & PROP_IDPROPERTY && manualfunc == NULL) { + return NULL; + } + if (!manualfunc) { + return NULL; + } + + func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), "search"); + + fprintf(f, + "void %s(" + "const bContext *C, " + "PointerRNA *ptr, " + "PropertyRNA *prop, " + "const char *edit_text, " + "StringPropertySearchVisitFunc visit_fn, " + "void *visit_user_data)\n", + func); + fprintf(f, "{\n"); + fprintf(f, "\n %s(C, ptr, prop, edit_text, visit_fn, visit_user_data);\n", manualfunc); + fprintf(f, "}\n\n"); + return func; +} + static char *rna_def_property_set_func( FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, const char *manualfunc) { @@ -1895,6 +1927,8 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) sprop->length = (void *)rna_def_property_length_func( f, srna, prop, dp, (const char *)sprop->length); sprop->set = (void *)rna_def_property_set_func(f, srna, prop, dp, (const char *)sprop->set); + sprop->search = (void *)rna_def_property_search_func( + f, srna, prop, dp, (const char *)sprop->search); break; } case PROP_POINTER: { @@ -4081,13 +4115,15 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; fprintf(f, - "\t%s, %s, %s, %s, %s, %s, %d, ", + "\t%s, %s, %s, %s, %s, %s, %s, %d, %d, ", rna_function_string(sprop->get), rna_function_string(sprop->length), rna_function_string(sprop->set), rna_function_string(sprop->get_ex), rna_function_string(sprop->length_ex), rna_function_string(sprop->set_ex), + rna_function_string(sprop->search), + (int)sprop->search_flag, sprop->maxlength); rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n"); diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index b0488bbfa7a..b5cf8abaac6 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -722,7 +722,7 @@ static ID *rna_ID_override_hierarchy_create( ID *id_root_override = NULL; BKE_lib_override_library_create( - bmain, scene, view_layer, NULL, id, id, id_instance_hint, &id_root_override); + bmain, scene, view_layer, NULL, id, id, id_instance_hint, &id_root_override, false); WM_main_add_notifier(NC_ID | NA_ADDED, NULL); WM_main_add_notifier(NC_WM | ND_LIB_OVERRIDE_CHANGED, NULL); @@ -1131,7 +1131,7 @@ static void rna_ImagePreview_size_set(PointerRNA *ptr, const int *values, enum e prv_img->flag[size] |= (PRV_CHANGED | PRV_USER_EDITED); } -static int rna_ImagePreview_pixels_get_length(PointerRNA *ptr, +static int rna_ImagePreview_pixels_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION], enum eIconSizes size) { @@ -1176,7 +1176,7 @@ static void rna_ImagePreview_pixels_set(PointerRNA *ptr, const int *values, enum prv_img->flag[size] |= PRV_USER_EDITED; } -static int rna_ImagePreview_pixels_float_get_length(PointerRNA *ptr, +static int rna_ImagePreview_pixels_float_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION], enum eIconSizes size) { @@ -1256,7 +1256,7 @@ static void rna_ImagePreview_image_size_set(PointerRNA *ptr, const int *values) rna_ImagePreview_size_set(ptr, values, ICON_SIZE_PREVIEW); } -static int rna_ImagePreview_image_pixels_get_length(PointerRNA *ptr, +static int rna_ImagePreview_image_pixels_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { return rna_ImagePreview_pixels_get_length(ptr, length, ICON_SIZE_PREVIEW); @@ -1272,7 +1272,7 @@ static void rna_ImagePreview_image_pixels_set(PointerRNA *ptr, const int *values rna_ImagePreview_pixels_set(ptr, values, ICON_SIZE_PREVIEW); } -static int rna_ImagePreview_image_pixels_float_get_length(PointerRNA *ptr, +static int rna_ImagePreview_image_pixels_float_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { return rna_ImagePreview_pixels_float_get_length(ptr, length, ICON_SIZE_PREVIEW); @@ -1303,7 +1303,7 @@ static void rna_ImagePreview_icon_size_set(PointerRNA *ptr, const int *values) rna_ImagePreview_size_set(ptr, values, ICON_SIZE_ICON); } -static int rna_ImagePreview_icon_pixels_get_length(PointerRNA *ptr, +static int rna_ImagePreview_icon_pixels_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { return rna_ImagePreview_pixels_get_length(ptr, length, ICON_SIZE_ICON); @@ -1319,7 +1319,7 @@ static void rna_ImagePreview_icon_pixels_set(PointerRNA *ptr, const int *values) rna_ImagePreview_pixels_set(ptr, values, ICON_SIZE_ICON); } -static int rna_ImagePreview_icon_pixels_float_get_length(PointerRNA *ptr, +static int rna_ImagePreview_icon_pixels_float_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { return rna_ImagePreview_pixels_float_get_length(ptr, length, ICON_SIZE_ICON); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 8f7660d4015..75579107465 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -302,7 +302,8 @@ static int rna_ensure_property_array_length(PointerRNA *ptr, PropertyRNA *prop) { if (prop->magic == RNA_MAGIC) { int arraylen[RNA_MAX_ARRAY_DIMENSION]; - return (prop->getlength && ptr->data) ? prop->getlength(ptr, arraylen) : prop->totarraylength; + return (prop->getlength && ptr->data) ? prop->getlength(ptr, arraylen) : + (int)prop->totarraylength; } IDProperty *idprop = (IDProperty *)prop; @@ -322,7 +323,7 @@ static bool rna_ensure_property_array_check(PropertyRNA *prop) return (idprop->type == IDP_ARRAY); } -static void rna_ensure_property_multi_array_length(PointerRNA *ptr, +static void rna_ensure_property_multi_array_length(const PointerRNA *ptr, PropertyRNA *prop, int length[]) { @@ -1080,7 +1081,7 @@ bool RNA_property_array_check(PropertyRNA *prop) return rna_ensure_property_array_check(prop); } -int RNA_property_array_dimension(PointerRNA *ptr, PropertyRNA *prop, int length[]) +int RNA_property_array_dimension(const PointerRNA *ptr, PropertyRNA *prop, int length[]) { PropertyRNA *rprop = rna_ensure_property(prop); @@ -1988,7 +1989,7 @@ bool RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, const int i return rna_property_editable_do(ptr, prop, index, NULL); } -bool RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop) +bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop) { /* check that base ID-block can support animation data */ if (!id_can_have_animdata(ptr->owner_id)) { @@ -3368,6 +3369,34 @@ int RNA_property_string_default_length(PointerRNA *UNUSED(ptr), PropertyRNA *pro return strlen(sprop->defaultvalue); } +eStringPropertySearchFlag RNA_property_string_search_flag(PropertyRNA *prop) +{ + StringPropertyRNA *sprop = (StringPropertyRNA *)rna_ensure_property(prop); + if (prop->magic != RNA_MAGIC) { + return false; + } + BLI_assert(RNA_property_type(prop) == PROP_STRING); + if (sprop->search) { + BLI_assert(sprop->search_flag & PROP_STRING_SEARCH_SUPPORTED); + } + else { + BLI_assert(sprop->search_flag == 0); + } + return sprop->search_flag; +} + +void RNA_property_string_search(const bContext *C, + PointerRNA *ptr, + PropertyRNA *prop, + const char *edit_text, + StringPropertySearchVisitFunc visit_fn, + void *visit_user_data) +{ + BLI_assert(RNA_property_string_search_flag(prop) & PROP_STRING_SEARCH_SUPPORTED); + StringPropertyRNA *sprop = (StringPropertyRNA *)rna_ensure_property(prop); + sprop->search(C, ptr, prop, edit_text, visit_fn, visit_user_data); +} + int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop) { EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop; @@ -4025,7 +4054,9 @@ void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop) } } -int RNA_property_collection_lookup_index(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *t_ptr) +int RNA_property_collection_lookup_index(PointerRNA *ptr, + PropertyRNA *prop, + const PointerRNA *t_ptr) { CollectionPropertyIterator iter; int index = 0; @@ -5105,7 +5136,7 @@ static bool rna_path_parse_array_index(const char **path, * * \return \a true on success, \a false if the path is somehow invalid. */ -static bool rna_path_parse(PointerRNA *ptr, +static bool rna_path_parse(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, @@ -5262,7 +5293,10 @@ static bool rna_path_parse(PointerRNA *ptr, return true; } -bool RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop) +bool RNA_path_resolve(const PointerRNA *ptr, + const char *path, + PointerRNA *r_ptr, + PropertyRNA **r_prop) { if (!rna_path_parse(ptr, path, r_ptr, r_prop, NULL, NULL, NULL, true)) { return false; @@ -5272,7 +5306,7 @@ bool RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, Prop } bool RNA_path_resolve_full( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) + const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) { if (!rna_path_parse(ptr, path, r_ptr, r_prop, r_index, NULL, NULL, true)) { return false; @@ -5282,12 +5316,12 @@ bool RNA_path_resolve_full( } bool RNA_path_resolve_full_maybe_null( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) + const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) { return rna_path_parse(ptr, path, r_ptr, r_prop, r_index, NULL, NULL, true); } -bool RNA_path_resolve_property(PointerRNA *ptr, +bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop) @@ -5300,7 +5334,7 @@ bool RNA_path_resolve_property(PointerRNA *ptr, } bool RNA_path_resolve_property_full( - PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) + const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index) { if (!rna_path_parse(ptr, path, r_ptr, r_prop, r_index, NULL, NULL, false)) { return false; @@ -5309,7 +5343,7 @@ bool RNA_path_resolve_property_full( return r_ptr->data != NULL && *r_prop != NULL; } -bool RNA_path_resolve_property_and_item_pointer(PointerRNA *ptr, +bool RNA_path_resolve_property_and_item_pointer(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, @@ -5322,7 +5356,7 @@ bool RNA_path_resolve_property_and_item_pointer(PointerRNA *ptr, return r_ptr->data != NULL && *r_prop != NULL; } -bool RNA_path_resolve_property_and_item_pointer_full(PointerRNA *ptr, +bool RNA_path_resolve_property_and_item_pointer_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, @@ -5340,8 +5374,11 @@ bool RNA_path_resolve_elements(PointerRNA *ptr, const char *path, ListBase *r_el return rna_path_parse(ptr, path, NULL, NULL, NULL, NULL, r_elements, false); } -char *RNA_path_append( - const char *path, PointerRNA *UNUSED(ptr), PropertyRNA *prop, int intkey, const char *strkey) +char *RNA_path_append(const char *path, + const PointerRNA *UNUSED(ptr), + PropertyRNA *prop, + int intkey, + const char *strkey) { DynStr *dynstr; char *result; @@ -5724,7 +5761,7 @@ char *RNA_path_from_ID_to_struct(const PointerRNA *ptr) return ptrpath; } -char *RNA_path_from_real_ID_to_struct(Main *bmain, PointerRNA *ptr, struct ID **r_real) +char *RNA_path_from_real_ID_to_struct(Main *bmain, const PointerRNA *ptr, struct ID **r_real) { char *path = RNA_path_from_ID_to_struct(ptr); @@ -5753,7 +5790,7 @@ static void rna_path_array_multi_from_flat_index(const int dimsize[RNA_MAX_ARRAY BLI_assert(index == 0); } -static void rna_path_array_multi_string_from_flat_index(PointerRNA *ptr, +static void rna_path_array_multi_string_from_flat_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index, @@ -5772,7 +5809,7 @@ static void rna_path_array_multi_string_from_flat_index(PointerRNA *ptr, } } -char *RNA_path_from_ID_to_property_index(PointerRNA *ptr, +char *RNA_path_from_ID_to_property_index(const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index) @@ -5828,13 +5865,17 @@ char *RNA_path_from_ID_to_property_index(PointerRNA *ptr, return path; } -char *RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop) +char *RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop) { return RNA_path_from_ID_to_property_index(ptr, prop, 0, -1); } -char *RNA_path_from_real_ID_to_property_index( - Main *bmain, PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index, ID **r_real_id) +char *RNA_path_from_real_ID_to_property_index(Main *bmain, + const PointerRNA *ptr, + PropertyRNA *prop, + int index_dim, + int index, + ID **r_real_id) { char *path = RNA_path_from_ID_to_property_index(ptr, prop, index_dim, index); @@ -5843,7 +5884,7 @@ char *RNA_path_from_real_ID_to_property_index( return path != NULL ? rna_prepend_real_ID_path(bmain, ptr->owner_id, path, r_real_id) : NULL; } -char *RNA_path_resolve_from_type_to_property(PointerRNA *ptr, +char *RNA_path_resolve_from_type_to_property(const PointerRNA *ptr, PropertyRNA *prop, const StructRNA *type) { @@ -5916,7 +5957,7 @@ char *RNA_path_full_ID_py(Main *bmain, ID *id) path); } -char *RNA_path_full_struct_py(Main *bmain, struct PointerRNA *ptr) +char *RNA_path_full_struct_py(Main *bmain, const PointerRNA *ptr) { char *id_path; char *data_path; @@ -5945,7 +5986,7 @@ char *RNA_path_full_struct_py(Main *bmain, struct PointerRNA *ptr) } char *RNA_path_full_property_py_ex( - Main *bmain, PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback) + Main *bmain, const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback) { char *id_path; const char *data_delim; @@ -5992,7 +6033,7 @@ char *RNA_path_full_property_py_ex( return ret; } -char *RNA_path_full_property_py(Main *bmain, PointerRNA *ptr, PropertyRNA *prop, int index) +char *RNA_path_full_property_py(Main *bmain, const PointerRNA *ptr, PropertyRNA *prop, int index) { return RNA_path_full_property_py_ex(bmain, ptr, prop, index, false); } @@ -6723,23 +6764,27 @@ static void *rna_array_as_string_alloc( int type, int len, PointerRNA *ptr, PropertyRNA *prop, void **r_buf_end) { void *buf_ret = NULL; - if (type == PROP_BOOLEAN) { - bool *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); - RNA_property_boolean_get_array(ptr, prop, buf); - *r_buf_end = buf + len; - } - else if (type == PROP_INT) { - int *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); - RNA_property_int_get_array(ptr, prop, buf); - *r_buf_end = buf + len; - } - else if (type == PROP_FLOAT) { - float *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); - RNA_property_float_get_array(ptr, prop, buf); - *r_buf_end = buf + len; - } - else { - BLI_assert(0); + switch (type) { + case PROP_BOOLEAN: { + bool *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); + RNA_property_boolean_get_array(ptr, prop, buf); + *r_buf_end = buf + len; + break; + } + case PROP_INT: { + int *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); + RNA_property_int_get_array(ptr, prop, buf); + *r_buf_end = buf + len; + break; + } + case PROP_FLOAT: { + float *buf = buf_ret = MEM_mallocN(sizeof(*buf) * len, __func__); + RNA_property_float_get_array(ptr, prop, buf); + *r_buf_end = buf + len; + break; + } + default: + BLI_assert_unreachable(); } return buf_ret; } @@ -6749,29 +6794,33 @@ static void rna_array_as_string_elem(int type, void **buf_p, int len, DynStr *dy /* This will print a comma separated string of the array elements from * buf start to len. We will add a comma if len == 1 to preserve tuples. */ const int end = len - 1; - if (type == PROP_BOOLEAN) { - bool *buf = *buf_p; - for (int i = 0; i < len; i++, buf++) { - BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%s, " : "%s", bool_as_py_string(*buf)); + switch (type) { + case PROP_BOOLEAN: { + bool *buf = *buf_p; + for (int i = 0; i < len; i++, buf++) { + BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%s, " : "%s", bool_as_py_string(*buf)); + } + *buf_p = buf; + break; } - *buf_p = buf; - } - else if (type == PROP_INT) { - int *buf = *buf_p; - for (int i = 0; i < len; i++, buf++) { - BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%d, " : "%d", *buf); + case PROP_INT: { + int *buf = *buf_p; + for (int i = 0; i < len; i++, buf++) { + BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%d, " : "%d", *buf); + } + *buf_p = buf; + break; } - *buf_p = buf; - } - else if (type == PROP_FLOAT) { - float *buf = *buf_p; - for (int i = 0; i < len; i++, buf++) { - BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%g, " : "%g", *buf); + case PROP_FLOAT: { + float *buf = *buf_p; + for (int i = 0; i < len; i++, buf++) { + BLI_dynstr_appendf(dynstr, (i < end || !end) ? "%g, " : "%g", *buf); + } + *buf_p = buf; + break; } - *buf_p = buf; - } - else { - BLI_assert(0); + default: + BLI_assert_unreachable(); } } diff --git a/source/blender/makesrna/intern/rna_access_compare_override.c b/source/blender/makesrna/intern/rna_access_compare_override.c index 5974788884e..17c00923efa 100644 --- a/source/blender/makesrna/intern/rna_access_compare_override.c +++ b/source/blender/makesrna/intern/rna_access_compare_override.c @@ -12,6 +12,7 @@ #include "DNA_ID.h" #include "DNA_anim_types.h" +#include "DNA_camera_types.h" #include "DNA_constraint_types.h" #include "DNA_gpencil_modifier_types.h" #include "DNA_key_types.h" @@ -87,7 +88,7 @@ static ID *rna_property_override_property_real_id_owner(Main *bmain, owner_id = RNA_find_real_ID_and_path(bmain, id, &rna_path_prefix); break; default: - BLI_assert(0); + BLI_assert_unreachable(); } } @@ -145,6 +146,12 @@ bool RNA_property_overridable_get(PointerRNA *ptr, PropertyRNA *prop) return true; } } + else if (RNA_struct_is_a(ptr->type, &RNA_CameraBackgroundImage)) { + CameraBGImage *bgpic = ptr->data; + if (bgpic->flag & CAM_BGIMG_FLAG_OVERRIDE_LIBRARY_LOCAL) { + return true; + } + } /* If this is a RNA-defined property (real or 'virtual' IDProp), * we want to use RNA prop flag. */ return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON) && @@ -354,7 +361,7 @@ static int rna_property_override_diff(Main *bmain, if (is_array_a != is_array_b) { /* Should probably never happen actually... */ - BLI_assert(0); + BLI_assert_unreachable(); return is_array_a ? 1 : -1; } @@ -400,7 +407,7 @@ static int rna_property_override_diff(Main *bmain, rna_path ? rna_path : prop_a->identifier, !prop_a->is_idprop, !prop_b->is_idprop); - BLI_assert(0); + BLI_assert_unreachable(); return 1; } @@ -491,7 +498,7 @@ static bool rna_property_override_operation_store(Main *bmain, op->rna_path, prop_local->magic == RNA_MAGIC, prop_reference->magic == RNA_MAGIC); - BLI_assert(0); + BLI_assert_unreachable(); return changed; } @@ -580,7 +587,7 @@ static bool rna_property_override_operation_apply(Main *bmain, prop_dst->identifier, prop_dst->magic == RNA_MAGIC, prop_src->magic == RNA_MAGIC); - BLI_assert(0); + BLI_assert_unreachable(); return false; } diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index 76d2087d904..a1266443631 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -340,7 +340,7 @@ bool rna_Action_actedit_assign_poll(PointerRNA *ptr, PointerRNA value) return 0; } -static char *rna_DopeSheet_path(PointerRNA *UNUSED(ptr)) +static char *rna_DopeSheet_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("dopesheet"); } diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index df92601dd0c..a4094630266 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -216,10 +216,10 @@ static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po WM_main_add_notifier(NC_ANIMATION | ND_ANIMCHAN, id); } -static char *rna_Bone_path(PointerRNA *ptr) +static char *rna_Bone_path(const PointerRNA *ptr) { - ID *id = ptr->owner_id; - Bone *bone = (Bone *)ptr->data; + const ID *id = ptr->owner_id; + const Bone *bone = (const Bone *)ptr->data; char name_esc[sizeof(bone->name) * 2]; BLI_str_escape(name_esc, bone->name, sizeof(name_esc)); diff --git a/source/blender/makesrna/intern/rna_attribute.c b/source/blender/makesrna/intern/rna_attribute.c index d49bac15242..5af714660ed 100644 --- a/source/blender/makesrna/intern/rna_attribute.c +++ b/source/blender/makesrna/intern/rna_attribute.c @@ -40,12 +40,21 @@ const EnumPropertyItem rna_enum_attribute_type_items[] = { {0, NULL, 0, NULL, NULL}, }; +const EnumPropertyItem rna_enum_color_attribute_type_items[] = { + {CD_PROP_COLOR, "FLOAT_COLOR", 0, "Color", "RGBA color 32-bit floating-point values"}, + {CD_PROP_BYTE_COLOR, + "BYTE_COLOR", + 0, + "Byte Color", + "RGBA color with 8-bit positive integer values"}, + {0, NULL, 0, NULL, NULL}}; + const EnumPropertyItem rna_enum_attribute_type_with_auto_items[] = { {CD_AUTO_FROM_NAME, "AUTO", 0, "Auto", ""}, {CD_PROP_FLOAT, "FLOAT", 0, "Float", "Floating-point value"}, {CD_PROP_INT32, "INT", 0, "Integer", "32-bit integer"}, {CD_PROP_FLOAT3, "FLOAT_VECTOR", 0, "Vector", "3D vector with floating-point values"}, - {CD_PROP_COLOR, "FLOAT_COLOR", 0, "Color", "RGBA color 32-bit floating-point values"}, + {CD_PROP_COLOR, "FLOAT_COLOR", 0, "Color", "RGBA color with 32-bit floating-point values"}, {CD_PROP_BYTE_COLOR, "BYTE_COLOR", 0, @@ -92,6 +101,16 @@ const EnumPropertyItem rna_enum_attribute_domain_with_auto_items[] = { {0, NULL, 0, NULL, NULL}, }; +const EnumPropertyItem rna_enum_color_attribute_domain_items[] = { + {ATTR_DOMAIN_POINT, "POINT", 0, "Vertex", ""}, + {ATTR_DOMAIN_CORNER, "CORNER", 0, "Face Corner", ""}, + {0, NULL, 0, NULL, NULL}}; + +const EnumPropertyItem rna_enum_attribute_curves_domain_items[] = { + {ATTR_DOMAIN_POINT, "POINT", 0, "Control Point", ""}, + {ATTR_DOMAIN_CURVE, "CURVE", 0, "Curve", ""}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME # include "BLI_math.h" @@ -104,13 +123,13 @@ const EnumPropertyItem rna_enum_attribute_domain_with_auto_items[] = { /* Attribute */ -static char *rna_Attribute_path(PointerRNA *ptr) +static char *rna_Attribute_path(const PointerRNA *ptr) { - CustomDataLayer *layer = ptr->data; + const CustomDataLayer *layer = ptr->data; return BLI_sprintfN("attributes['%s']", layer->name); } -static StructRNA *srna_by_custom_data_layer_type(const CustomDataType type) +static StructRNA *srna_by_custom_data_layer_type(const eCustomDataType type) { switch (type) { case CD_PROP_FLOAT: @@ -218,6 +237,12 @@ static int rna_Attribute_domain_get(PointerRNA *ptr) return BKE_id_attribute_domain(ptr->owner_id, ptr->data); } +static bool rna_Attribute_is_internal_get(PointerRNA *ptr) +{ + const CustomDataLayer *layer = (const CustomDataLayer *)ptr->data; + return BKE_attribute_allow_procedural_access(layer->name); +} + static void rna_Attribute_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { ID *id = ptr->owner_id; @@ -353,7 +378,7 @@ static int rna_Attributes_noncolor_layer_skip(CollectionPropertyIterator *iter, /* Check valid domain here, too, keep in line with rna_AttributeGroup_color_length(). */ ID *id = iter->parent.owner_id; - AttributeDomain domain = BKE_id_attribute_domain(id, layer); + eAttrDomain domain = BKE_id_attribute_domain(id, layer); if (!ELEM(domain, ATTR_DOMAIN_POINT, ATTR_DOMAIN_CORNER)) { return 1; } @@ -916,6 +941,12 @@ static void rna_def_attribute(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Domain", "Domain of the Attribute"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); + prop = RNA_def_property(srna, "is_internal", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_Attribute_is_internal_get", NULL); + RNA_def_property_ui_text( + prop, "Is Internal", "The attribute is meant for internal use by Blender"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + /* types */ rna_def_attribute_float(brna); rna_def_attribute_float_vector(brna); @@ -928,7 +959,7 @@ static void rna_def_attribute(BlenderRNA *brna) rna_def_attribute_int8(brna); } -/* Mesh/PointCloud/Hair.attributes */ +/* Mesh/PointCloud/Curves.attributes */ static void rna_def_attribute_group(BlenderRNA *brna) { StructRNA *srna; diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index 0818f009d1f..d65c8a1b4e3 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -162,9 +162,9 @@ static StructRNA *rna_BoidRule_refine(struct PointerRNA *ptr) } } -static char *rna_BoidRule_path(PointerRNA *ptr) +static char *rna_BoidRule_path(const PointerRNA *ptr) { - BoidRule *rule = (BoidRule *)ptr->data; + const BoidRule *rule = (BoidRule *)ptr->data; char name_esc[sizeof(rule->name) * 2]; BLI_str_escape(name_esc, rule->name, sizeof(name_esc)); @@ -222,16 +222,16 @@ static void rna_BoidState_active_boid_rule_index_set(struct PointerRNA *ptr, int } } -static int particle_id_check(PointerRNA *ptr) +static int particle_id_check(const PointerRNA *ptr) { - ID *id = ptr->owner_id; + const ID *id = ptr->owner_id; return (GS(id->name) == ID_PA); } -static char *rna_BoidSettings_path(PointerRNA *ptr) +static char *rna_BoidSettings_path(const PointerRNA *ptr) { - BoidSettings *boids = (BoidSettings *)ptr->data; + const BoidSettings *boids = (BoidSettings *)ptr->data; if (particle_id_check(ptr)) { ParticleSettings *part = (ParticleSettings *)ptr->owner_id; diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 848779c49f7..46b009191ca 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -98,14 +98,14 @@ const EnumPropertyItem rna_enum_brush_sculpt_tool_items[] = { {SCULPT_TOOL_INFLATE, "INFLATE", ICON_BRUSH_INFLATE, "Inflate", ""}, {SCULPT_TOOL_BLOB, "BLOB", ICON_BRUSH_BLOB, "Blob", ""}, {SCULPT_TOOL_CREASE, "CREASE", ICON_BRUSH_CREASE, "Crease", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SCULPT_TOOL_SMOOTH, "SMOOTH", ICON_BRUSH_SMOOTH, "Smooth", ""}, {SCULPT_TOOL_FLATTEN, "FLATTEN", ICON_BRUSH_FLATTEN, "Flatten", ""}, {SCULPT_TOOL_FILL, "FILL", ICON_BRUSH_FILL, "Fill", ""}, {SCULPT_TOOL_SCRAPE, "SCRAPE", ICON_BRUSH_SCRAPE, "Scrape", ""}, {SCULPT_TOOL_MULTIPLANE_SCRAPE, "MULTIPLANE_SCRAPE", ICON_BRUSH_SCRAPE, "Multi-plane Scrape", ""}, {SCULPT_TOOL_PINCH, "PINCH", ICON_BRUSH_PINCH, "Pinch", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SCULPT_TOOL_GRAB, "GRAB", ICON_BRUSH_GRAB, "Grab", ""}, {SCULPT_TOOL_ELASTIC_DEFORM, "ELASTIC_DEFORM", ICON_BRUSH_GRAB, "Elastic Deform", ""}, {SCULPT_TOOL_SNAKE_HOOK, "SNAKE_HOOK", ICON_BRUSH_SNAKE_HOOK, "Snake Hook", ""}, @@ -115,7 +115,7 @@ const EnumPropertyItem rna_enum_brush_sculpt_tool_items[] = { {SCULPT_TOOL_ROTATE, "ROTATE", ICON_BRUSH_ROTATE, "Rotate", ""}, {SCULPT_TOOL_SLIDE_RELAX, "TOPOLOGY", ICON_BRUSH_GRAB, "Slide Relax", ""}, {SCULPT_TOOL_BOUNDARY, "BOUNDARY", ICON_BRUSH_GRAB, "Boundary", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SCULPT_TOOL_CLOTH, "CLOTH", ICON_BRUSH_SCULPT_DRAW, "Cloth", ""}, {SCULPT_TOOL_SIMPLIFY, "SIMPLIFY", ICON_BRUSH_DATA, "Simplify", ""}, {SCULPT_TOOL_MASK, "MASK", ICON_BRUSH_MASK, "Mask", ""}, @@ -249,6 +249,7 @@ const EnumPropertyItem rna_enum_brush_curves_sculpt_tool_items[] = { {CURVES_SCULPT_TOOL_SNAKE_HOOK, "SNAKE_HOOK", ICON_NONE, "Curves Snake Hook", ""}, {CURVES_SCULPT_TOOL_ADD, "ADD", ICON_NONE, "Add Curves", ""}, {CURVES_SCULPT_TOOL_GROW_SHRINK, "GROW_SHRINK", ICON_NONE, "Grow / Shrink Curves", ""}, + {CURVES_SCULPT_TOOL_SELECTION_PAINT, "SELECTION_PAINT", ICON_NONE, "Paint Selection", ""}, {0, NULL, 0, NULL, NULL}, }; @@ -885,6 +886,7 @@ static const EnumPropertyItem *rna_Brush_direction_itemf(bContext *C, case PAINT_MODE_SCULPT_CURVES: switch (me->curves_sculpt_tool) { case CURVES_SCULPT_TOOL_GROW_SHRINK: + case CURVES_SCULPT_TOOL_SELECTION_PAINT: return prop_direction_items; default: return DummyRNA_DEFAULT_items; @@ -934,7 +936,7 @@ static const EnumPropertyItem *rna_Brush_stroke_itemf(bContext *C, } /* Grease Pencil Drawing Brushes Settings */ -static char *rna_BrushGpencilSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_BrushGpencilSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_paint.brush.gpencil_settings"); } @@ -1844,6 +1846,26 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + prop = RNA_def_property(srna, "use_automasking_stroke", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_AUTOMASK_STROKE); + RNA_def_property_ui_text(prop, "Auto-Masking Strokes", "Mask strokes below brush cursor"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_automasking_layer", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_AUTOMASK_LAYER); + RNA_def_property_ui_text(prop, "Auto-Masking Layer", "Mask strokes using active layer"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_automasking_material", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_AUTOMASK_MATERIAL); + RNA_def_property_ui_text(prop, "Auto-Masking Material", "Mask strokes using active material"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + /* Material */ prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "Material"); @@ -1931,7 +1953,12 @@ static void rna_def_curves_sculpt_options(BlenderRNA *brna) prop = RNA_def_property(srna, "add_amount", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 1, INT32_MAX); - RNA_def_property_ui_text(prop, "Add Amount", "Number of curves added by the Add brush"); + RNA_def_property_ui_text(prop, "Count", "Number of curves added by the Add brush"); + + prop = RNA_def_property(srna, "points_per_curve", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 2, INT32_MAX); + RNA_def_property_ui_text( + prop, "Points per Curve", "Number of control points in a newly added curve"); prop = RNA_def_property(srna, "scale_uniform", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_CURVES_SCULPT_FLAG_SCALE_UNIFORM); @@ -1950,6 +1977,13 @@ static void rna_def_curves_sculpt_options(BlenderRNA *brna) RNA_def_property_ui_text( prop, "Interpolate Length", "Use length of the curves in close proximity"); + prop = RNA_def_property(srna, "interpolate_point_count", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "flag", BRUSH_CURVES_SCULPT_FLAG_INTERPOLATE_POINT_COUNT); + RNA_def_property_ui_text(prop, + "Interpolate Point Count", + "Use the number of points from the curves in close proximity"); + prop = RNA_def_property(srna, "interpolate_shape", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_CURVES_SCULPT_FLAG_INTERPOLATE_SHAPE); RNA_def_property_ui_text( @@ -1970,7 +2004,7 @@ static void rna_def_brush(BlenderRNA *brna) static const EnumPropertyItem prop_blend_items[] = { {IMB_BLEND_MIX, "MIX", 0, "Mix", "Use Mix blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_DARKEN, "DARKEN", 0, "Darken", "Use Darken blending mode while painting"}, {IMB_BLEND_MUL, "MUL", 0, "Multiply", "Use Multiply blending mode while painting"}, {IMB_BLEND_COLORBURN, @@ -1983,7 +2017,7 @@ static void rna_def_brush(BlenderRNA *brna) 0, "Linear Burn", "Use Linear Burn blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_LIGHTEN, "LIGHTEN", 0, "Lighten", "Use Lighten blending mode while painting"}, {IMB_BLEND_SCREEN, "SCREEN", 0, "Screen", "Use Screen blending mode while painting"}, {IMB_BLEND_COLORDODGE, @@ -1992,7 +2026,7 @@ static void rna_def_brush(BlenderRNA *brna) "Color Dodge", "Use Color Dodge blending mode while painting"}, {IMB_BLEND_ADD, "ADD", 0, "Add", "Use Add blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_OVERLAY, "OVERLAY", 0, "Overlay", "Use Overlay blending mode while painting"}, {IMB_BLEND_SOFTLIGHT, "SOFTLIGHT", @@ -2019,7 +2053,7 @@ static void rna_def_brush(BlenderRNA *brna) 0, "Pin Light", "Use Pin Light blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_DIFFERENCE, "DIFFERENCE", 0, @@ -2031,7 +2065,7 @@ static void rna_def_brush(BlenderRNA *brna) "Exclusion", "Use Exclusion blending mode while painting"}, {IMB_BLEND_SUB, "SUB", 0, "Subtract", "Use Subtract blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_HUE, "HUE", 0, "Hue", "Use Hue blending mode while painting"}, {IMB_BLEND_SATURATION, "SATURATION", @@ -2040,7 +2074,7 @@ static void rna_def_brush(BlenderRNA *brna) "Use Saturation blending mode while painting"}, {IMB_BLEND_COLOR, "COLOR", 0, "Color", "Use Color blending mode while painting"}, {IMB_BLEND_LUMINOSITY, "LUMINOSITY", 0, "Value", "Use Value blending mode while painting"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {IMB_BLEND_ERASE_ALPHA, "ERASE_ALPHA", 0, "Erase Alpha", "Erase alpha while painting"}, {IMB_BLEND_ADD_ALPHA, "ADD_ALPHA", 0, "Add Alpha", "Add alpha while painting"}, {0, NULL, 0, NULL, NULL}, diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c index f535cdcee96..dcf0647392e 100644 --- a/source/blender/makesrna/intern/rna_camera.c +++ b/source/blender/makesrna/intern/rna_camera.c @@ -111,13 +111,70 @@ static void rna_Camera_background_images_clear(Camera *cam) WM_main_add_notifier(NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam); } +static char *rna_Camera_background_image_path(const PointerRNA *ptr) +{ + const CameraBGImage *bgpic = ptr->data; + Camera *camera = (Camera *)ptr->owner_id; + + const int bgpic_index = BLI_findindex(&camera->bg_images, bgpic); + + if (bgpic_index >= 0) { + return BLI_sprintfN("background_images[%d]", bgpic_index); + } + + return NULL; +} + +static bool rna_Camera_background_images_override_apply(Main *bmain, + PointerRNA *ptr_dst, + PointerRNA *ptr_src, + PointerRNA *UNUSED(ptr_storage), + PropertyRNA *prop_dst, + PropertyRNA *UNUSED(prop_src), + PropertyRNA *UNUSED(prop_storage), + const int UNUSED(len_dst), + const int UNUSED(len_src), + const int UNUSED(len_storage), + PointerRNA *UNUSED(ptr_item_dst), + PointerRNA *UNUSED(ptr_item_src), + PointerRNA *UNUSED(ptr_item_storage), + IDOverrideLibraryPropertyOperation *opop) +{ + BLI_assert_msg(opop->operation == IDOVERRIDE_LIBRARY_OP_INSERT_AFTER, + "Unsupported RNA override operation on background images collection"); + + Camera *cam_dst = (Camera *)ptr_dst->owner_id; + Camera *cam_src = (Camera *)ptr_src->owner_id; + + /* Remember that insertion operations are defined and stored in correct order, which means that + * even if we insert several items in a row, we always insert first one, then second one, etc. + * So we should always find 'anchor' constraint in both _src *and* _dst. */ + CameraBGImage *bgpic_anchor = BLI_findlink(&cam_dst->bg_images, opop->subitem_reference_index); + + /* If `bgpic_anchor` is NULL, `bgpic_src` will be inserted in first position. */ + CameraBGImage *bgpic_src = BLI_findlink(&cam_src->bg_images, opop->subitem_local_index); + + if (bgpic_src == NULL) { + BLI_assert(bgpic_src != NULL); + return false; + } + + CameraBGImage *bgpic_dst = BKE_camera_background_image_copy(bgpic_src, 0); + + /* This handles NULL anchor as expected by adding at head of list. */ + BLI_insertlinkafter(&cam_dst->bg_images, bgpic_anchor, bgpic_dst); + + RNA_property_update_main(bmain, NULL, ptr_dst, prop_dst); + return true; +} + static void rna_Camera_dof_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr)) { SEQ_relations_invalidate_scene_strips(bmain, scene); WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene); } -char *rna_CameraDOFSettings_path(PointerRNA *ptr) +char *rna_CameraDOFSettings_path(const PointerRNA *ptr) { /* if there is ID-data, resolve the path using the index instead of by name, * since the name used is the name of the texture assigned, but the texture @@ -179,6 +236,17 @@ static void rna_def_camera_background_image(BlenderRNA *brna) RNA_def_struct_sdna(srna, "CameraBGImage"); RNA_def_struct_ui_text( srna, "Background Image", "Image and settings for display in the 3D View background"); + RNA_def_struct_path_func(srna, "rna_Camera_background_image_path"); + + prop = RNA_def_boolean(srna, + "is_override_data", + false, + "Override Background Image", + "In a local override camera, whether this background image comes from " + "the linked reference camera, or is local to the override"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_negative_sdna( + prop, NULL, "flag", CAM_BGIMG_FLAG_OVERRIDE_LIBRARY_LOCAL); RNA_define_lib_overridable(true); @@ -736,6 +804,8 @@ void RNA_def_camera(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "bg_images", NULL); RNA_def_property_struct_type(prop, "CameraBackgroundImage"); RNA_def_property_ui_text(prop, "Background Images", "List of background images"); + RNA_def_property_override_flag(prop, PROPOVERRIDE_LIBRARY_INSERTION | PROPOVERRIDE_NO_PROP_NAME); + RNA_def_property_override_funcs(prop, NULL, NULL, "rna_Camera_background_images_override_apply"); RNA_def_property_update(prop, NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, NULL); RNA_define_lib_overridable(false); diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index 3ad901e5397..e45a1a3cc33 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -436,10 +436,10 @@ static void rna_ClothSettings_gravity_set(PointerRNA *ptr, const float *values) sim->gravity[2] = values[2]; } -static char *rna_ClothSettings_path(PointerRNA *ptr) +static char *rna_ClothSettings_path(const PointerRNA *ptr) { - Object *ob = (Object *)ptr->owner_id; - ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Cloth); + const Object *ob = (Object *)ptr->owner_id; + const ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Cloth); if (md) { char name_esc[sizeof(md->name) * 2]; @@ -451,10 +451,10 @@ static char *rna_ClothSettings_path(PointerRNA *ptr) } } -static char *rna_ClothCollisionSettings_path(PointerRNA *ptr) +static char *rna_ClothCollisionSettings_path(const PointerRNA *ptr) { - Object *ob = (Object *)ptr->owner_id; - ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Cloth); + const Object *ob = (Object *)ptr->owner_id; + const ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Cloth); if (md) { char name_esc[sizeof(md->name) * 2]; diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 840674c7bc6..92cdcc6d781 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -157,7 +157,7 @@ static void rna_CurveMapping_clipmaxy_range( *max = 100.0f; } -static char *rna_ColorRamp_path(PointerRNA *ptr) +static char *rna_ColorRamp_path(const PointerRNA *ptr) { char *path = NULL; @@ -208,7 +208,7 @@ static char *rna_ColorRamp_path(PointerRNA *ptr) return path; } -static char *rna_ColorRampElement_path(PointerRNA *ptr) +static char *rna_ColorRampElement_path(const PointerRNA *ptr) { PointerRNA ramp_ptr; PropertyRNA *prop; @@ -438,7 +438,7 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain, } } -static char *rna_ColorManagedDisplaySettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ColorManagedDisplaySettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("display_settings"); } @@ -526,7 +526,7 @@ static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool va } } -static char *rna_ColorManagedViewSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ColorManagedViewSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("view_settings"); } @@ -662,12 +662,12 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain, } } -static char *rna_ColorManagedSequencerColorspaceSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ColorManagedSequencerColorspaceSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("sequencer_colorspace_settings"); } -static char *rna_ColorManagedInputColorspaceSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ColorManagedInputColorspaceSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("colorspace_settings"); } diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 63d8876ec8b..1420ef36493 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -29,11 +29,12 @@ /* please keep the names in sync with constraint.c */ const EnumPropertyItem rna_enum_constraint_type_items[] = { - {0, "", 0, N_("Motion Tracking"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Motion Tracking"), NULL), {CONSTRAINT_TYPE_CAMERASOLVER, "CAMERA_SOLVER", ICON_CON_CAMERASOLVER, "Camera Solver", ""}, {CONSTRAINT_TYPE_FOLLOWTRACK, "FOLLOW_TRACK", ICON_CON_FOLLOWTRACK, "Follow Track", ""}, {CONSTRAINT_TYPE_OBJECTSOLVER, "OBJECT_SOLVER", ICON_CON_OBJECTSOLVER, "Object Solver", ""}, - {0, "", 0, N_("Transform"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Transform"), NULL), {CONSTRAINT_TYPE_LOCLIKE, "COPY_LOCATION", ICON_CON_LOCLIKE, @@ -91,7 +92,8 @@ const EnumPropertyItem rna_enum_constraint_type_items[] = { ICON_CON_TRANSFORM_CACHE, "Transform Cache", "Look up the transformation matrix from an external file"}, - {0, "", 0, N_("Tracking"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Tracking"), NULL), {CONSTRAINT_TYPE_CLAMPTO, "CLAMP_TO", ICON_CON_CLAMPTO, @@ -127,7 +129,8 @@ const EnumPropertyItem rna_enum_constraint_type_items[] = { ICON_CON_TRACKTO, "Track To", "Legacy tracking constraint prone to twisting artifacts"}, - {0, "", 0, N_("Relationship"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Relationship"), NULL), {CONSTRAINT_TYPE_ACTION, "ACTION", ICON_ACTION, @@ -192,7 +195,7 @@ static const EnumPropertyItem target_space_pchan_items[] = { "Custom Space", "The transformation of the target is evaluated relative to a custom object/bone/vertex " "group"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {CONSTRAINT_SPACE_POSE, "POSE", 0, @@ -233,7 +236,7 @@ static const EnumPropertyItem owner_space_pchan_items[] = { 0, "Custom Space", "The constraint is applied in local space of a custom object/bone/vertex group"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {CONSTRAINT_SPACE_POSE, "POSE", 0, @@ -440,7 +443,7 @@ static char *rna_Constraint_do_compute_path(Object *ob, bConstraint *con) } } -static char *rna_Constraint_path(PointerRNA *ptr) +static char *rna_Constraint_path(const PointerRNA *ptr) { Object *ob = (Object *)ptr->owner_id; bConstraint *con = ptr->data; @@ -448,7 +451,7 @@ static char *rna_Constraint_path(PointerRNA *ptr) return rna_Constraint_do_compute_path(ob, con); } -static bConstraint *rna_constraint_from_target(PointerRNA *ptr) +static bConstraint *rna_constraint_from_target(const PointerRNA *ptr) { Object *ob = (Object *)ptr->owner_id; bConstraintTarget *tgt = ptr->data; @@ -456,7 +459,7 @@ static bConstraint *rna_constraint_from_target(PointerRNA *ptr) return BKE_constraint_find_from_target(ob, tgt, NULL); } -static char *rna_ConstraintTarget_path(PointerRNA *ptr) +static char *rna_ConstraintTarget_path(const PointerRNA *ptr) { Object *ob = (Object *)ptr->owner_id; bConstraintTarget *tgt = ptr->data; @@ -595,22 +598,17 @@ static const EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *UNUSE bool *UNUSED(r_free)) { bConstraint *con = (bConstraint *)ptr->data; - const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con); ListBase targets = {NULL, NULL}; bConstraintTarget *ct; - if (cti && cti->get_constraint_targets) { - cti->get_constraint_targets(con, &targets); - + if (BKE_constraint_targets_get(con, &targets)) { for (ct = targets.first; ct; ct = ct->next) { if (ct->tar && ct->tar->type == OB_ARMATURE) { break; } } - if (cti->flush_constraint_targets) { - cti->flush_constraint_targets(con, &targets, 1); - } + BKE_constraint_targets_flush(con, &targets, 1); if (ct) { return target_space_pchan_items; @@ -691,11 +689,11 @@ static void rna_ActionConstraint_minmax_range( } } -static int rna_SplineIKConstraint_joint_bindings_get_length(PointerRNA *ptr, +static int rna_SplineIKConstraint_joint_bindings_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { - bConstraint *con = (bConstraint *)ptr->data; - bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data; + const bConstraint *con = (bConstraint *)ptr->data; + const bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data; if (ikData) { length[0] = ikData->numpoints; @@ -1623,7 +1621,7 @@ static void rna_def_constraint_transform_like(BlenderRNA *brna) 0, "Replace", "Replace the original transformation with copied"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {TRANSLIKE_MIX_BEFORE_FULL, "BEFORE_FULL", 0, @@ -1644,7 +1642,7 @@ static void rna_def_constraint_transform_like(BlenderRNA *brna) "Before Original (Split Channels)", "Apply copied transformation before original, handling location, rotation and scale " "separately, similar to a sequence of three Copy constraints"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {TRANSLIKE_MIX_AFTER_FULL, "AFTER_FULL", 0, @@ -1782,7 +1780,7 @@ static void rna_def_constraint_action(BlenderRNA *brna) "Before Original (Split Channels)", "Apply the action channels before the original transformation, handling location, rotation " "and scale separately"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {ACTCON_MIX_AFTER_FULL, "AFTER_FULL", 0, diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index fb911725836..fff3f479a3f 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -66,8 +66,8 @@ const EnumPropertyItem rna_enum_keyframe_handle_type_items[] = { * Changes here will likely apply there too. */ const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[] = { - /* interpolation */ - {0, "", 0, N_("Interpolation"), "Standard transitions between keyframes"}, + /* Interpolation. */ + RNA_ENUM_ITEM_HEADING(N_("Interpolation"), "Standard transitions between keyframes"), {BEZT_IPO_CONST, "CONSTANT", ICON_IPO_CONSTANT, @@ -84,13 +84,10 @@ const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[] = { "Bezier", "Smooth interpolation between A and B, with some control over curve shape"}, - /* easing */ - {0, - "", - 0, - N_("Easing (by strength)"), - "Predefined inertial transitions, useful for motion graphics (from least to most " - "''dramatic'')"}, + /* Easing. */ + RNA_ENUM_ITEM_HEADING(N_("Easing (by strength)"), + "Predefined inertial transitions, useful for motion graphics " + "(from least to most \"dramatic\")"), {BEZT_IPO_SINE, "SINE", ICON_IPO_SINE, @@ -107,7 +104,7 @@ const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[] = { "Circular", "Circular easing (strongest and most dynamic)"}, - {0, "", 0, N_("Dynamic Effects"), "Simple physics-inspired easing effects"}, + RNA_ENUM_ITEM_HEADING(N_("Dynamic Effects"), "Simple physics-inspired easing effects"), {BEZT_IPO_BACK, "BACK", ICON_IPO_BACK, "Back", "Cubic easing with overshoot and settle"}, {BEZT_IPO_BOUNCE, "BOUNCE", @@ -770,7 +767,7 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr, } } -static char *rna_Curve_spline_path(PointerRNA *ptr) +static char *rna_Curve_spline_path(const PointerRNA *ptr) { Curve *cu = (Curve *)ptr->owner_id; ListBase *nubase = BKE_curve_nurbs_get(cu); @@ -786,7 +783,7 @@ static char *rna_Curve_spline_path(PointerRNA *ptr) } /* use for both bezier and nurbs */ -static char *rna_Curve_spline_point_path(PointerRNA *ptr) +static char *rna_Curve_spline_point_path(const PointerRNA *ptr) { Curve *cu = (Curve *)ptr->owner_id; Nurb *nu; @@ -808,10 +805,10 @@ static char *rna_Curve_spline_point_path(PointerRNA *ptr) } } -static char *rna_TextBox_path(PointerRNA *ptr) +static char *rna_TextBox_path(const PointerRNA *ptr) { - Curve *cu = (Curve *)ptr->owner_id; - TextBox *tb = ptr->data; + const Curve *cu = (Curve *)ptr->owner_id; + const TextBox *tb = ptr->data; int index = (int)(tb - cu->tb); if (index >= 0 && index < cu->totbox) { diff --git a/source/blender/makesrna/intern/rna_curves.c b/source/blender/makesrna/intern/rna_curves.c index 7a1a368551f..b50082056bf 100644 --- a/source/blender/makesrna/intern/rna_curves.c +++ b/source/blender/makesrna/intern/rna_curves.c @@ -30,7 +30,7 @@ # include "WM_api.h" # include "WM_types.h" -static Curves *rna_curves(PointerRNA *ptr) +static Curves *rna_curves(const PointerRNA *ptr) { return (Curves *)ptr->owner_id; } @@ -38,7 +38,7 @@ static Curves *rna_curves(PointerRNA *ptr) static int rna_Curves_curve_offset_data_length(PointerRNA *ptr) { const Curves *curves = rna_curves(ptr); - return curves->geometry.curve_size + 1; + return curves->geometry.curve_num + 1; } static void rna_Curves_curve_offset_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -47,18 +47,23 @@ static void rna_Curves_curve_offset_data_begin(CollectionPropertyIterator *iter, rna_iterator_array_begin(iter, (void *)curves->geometry.curve_offsets, sizeof(int), - curves->geometry.curve_size + 1, + curves->geometry.curve_num + 1, false, NULL); } -static int rna_CurvePoint_index_get(PointerRNA *ptr) +static int rna_CurvePoint_index_get_const(const PointerRNA *ptr) { const Curves *curves = rna_curves(ptr); const float(*co)[3] = ptr->data; return (int)(co - curves->geometry.position); } +static int rna_CurvePoint_index_get(PointerRNA *ptr) +{ + return rna_CurvePoint_index_get_const(ptr); +} + static void rna_CurvePoint_location_get(PointerRNA *ptr, float value[3]) { copy_v3_v3(value, (const float *)ptr->data); @@ -89,20 +94,25 @@ static void rna_CurvePoint_radius_set(PointerRNA *ptr, float value) curves->geometry.radius[co - curves->geometry.position] = value; } -static char *rna_CurvePoint_path(PointerRNA *ptr) +static char *rna_CurvePoint_path(const PointerRNA *ptr) { - return BLI_sprintfN("points[%d]", rna_CurvePoint_index_get(ptr)); + return BLI_sprintfN("points[%d]", rna_CurvePoint_index_get_const(ptr)); } -static int rna_CurveSlice_index_get(PointerRNA *ptr) +static int rna_CurveSlice_index_get_const(const PointerRNA *ptr) { Curves *curves = rna_curves(ptr); return (int)((int *)ptr->data - curves->geometry.curve_offsets); } -static char *rna_CurveSlice_path(PointerRNA *ptr) +static int rna_CurveSlice_index_get(PointerRNA *ptr) { - return BLI_sprintfN("curves[%d]", rna_CurveSlice_index_get(ptr)); + return rna_CurveSlice_index_get_const(ptr); +} + +static char *rna_CurveSlice_path(const PointerRNA *ptr) +{ + return BLI_sprintfN("curves[%d]", rna_CurveSlice_index_get_const(ptr)); } static void rna_CurveSlice_points_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -133,14 +143,22 @@ static void rna_Curves_update_data(struct Main *UNUSED(bmain), PointerRNA *ptr) { ID *id = ptr->owner_id; - - /* cheating way for importers to avoid slow updates */ + /* Avoid updates for importers creating curves. */ if (id->us > 0) { DEG_id_tag_update(id, 0); WM_main_add_notifier(NC_GEOM | ND_DATA, id); } } +void rna_Curves_update_draw(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + ID *id = ptr->owner_id; + /* Avoid updates for importers creating curves. */ + if (id->us > 0) { + WM_main_add_notifier(NC_GEOM | ND_DATA, id); + } +} + #else static void rna_def_curves_point(BlenderRNA *brna) @@ -222,7 +240,7 @@ static void rna_def_curves(BlenderRNA *brna) /* Point and Curve RNA API helpers. */ prop = RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "geometry.curve_offsets", "geometry.curve_size"); + RNA_def_property_collection_sdna(prop, NULL, "geometry.curve_offsets", "geometry.curve_num"); RNA_def_property_struct_type(prop, "CurveSlice"); RNA_def_property_ui_text(prop, "Curves", "All curves in the data-block"); @@ -230,7 +248,7 @@ static void rna_def_curves(BlenderRNA *brna) RNA_define_verify_sdna(0); prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "geometry.position", "geometry.point_size"); + RNA_def_property_collection_sdna(prop, NULL, "geometry.position", "geometry.point_num"); RNA_def_property_struct_type(prop, "CurvePoint"); RNA_def_property_ui_text(prop, "Points", "Control points of all curves"); RNA_define_verify_sdna(1); @@ -239,7 +257,7 @@ static void rna_def_curves(BlenderRNA *brna) RNA_define_verify_sdna(0); prop = RNA_def_property(srna, "position_data", PROP_COLLECTION, PROP_NONE); - RNA_def_property_collection_sdna(prop, NULL, "geometry.position", "geometry.point_size"); + RNA_def_property_collection_sdna(prop, NULL, "geometry.position", "geometry.point_num"); RNA_def_property_struct_type(prop, "FloatVectorAttributeValue"); RNA_def_property_update(prop, 0, "rna_Curves_update_data"); RNA_define_verify_sdna(1); @@ -274,6 +292,42 @@ static void rna_def_curves(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Surface", "Mesh object that the curves can be attached to"); RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL); + prop = RNA_def_property(srna, "surface_uv_map", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "surface_uv_map"); + RNA_def_property_ui_text(prop, + "Surface UV Map", + "The name of the attribute on the surface mesh used to define the " + "attachment of each curve"); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + + /* Symmetry. */ + prop = RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "symmetry", CURVES_SYMMETRY_X); + RNA_def_property_ui_text(prop, "X", "Enable symmetry in the X axis"); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + + prop = RNA_def_property(srna, "use_mirror_y", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "symmetry", CURVES_SYMMETRY_Y); + RNA_def_property_ui_text(prop, "Y", "Enable symmetry in the Y axis"); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + + prop = RNA_def_property(srna, "use_mirror_z", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "symmetry", CURVES_SYMMETRY_Z); + RNA_def_property_ui_text(prop, "Z", "Enable symmetry in the Z axis"); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + + prop = RNA_def_property(srna, "selection_domain", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, rna_enum_attribute_curves_domain_items); + RNA_def_property_ui_text(prop, "Selection Domain", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, 0, "rna_Curves_update_data"); + + prop = RNA_def_property(srna, "use_sculpt_selection", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", CV_SCULPT_SELECTION_ENABLED); + RNA_def_property_ui_text(prop, "Use Sculpt Selection", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + /* attributes */ rna_def_attributes_common(srna); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 8e2b9c1d937..9d26797aa88 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -208,7 +208,7 @@ static int DNA_struct_find_nr_wrapper(const struct SDNA *sdna, const char *struc struct_name = DNA_struct_rename_legacy_hack_static_from_alias(struct_name); #ifdef RNA_RUNTIME /* We may support this at some point but for now we don't. */ - BLI_assert(0); + BLI_assert_unreachable(); #else struct_name = BLI_ghash_lookup_default( g_version_data.struct_map_static_from_alias, struct_name, (void *)struct_name); @@ -3316,6 +3316,33 @@ void RNA_def_property_string_funcs(PropertyRNA *prop, } } +void RNA_def_property_string_search_func(PropertyRNA *prop, + const char *search, + const eStringPropertySearchFlag search_flag) +{ + StructRNA *srna = DefRNA.laststruct; + + if (!DefRNA.preprocess) { + CLOG_ERROR(&LOG, "only during preprocessing."); + return; + } + + switch (prop->type) { + case PROP_STRING: { + StringPropertyRNA *sprop = (StringPropertyRNA *)prop; + sprop->search = (StringPropertySearchFunc)search; + if (search != NULL) { + sprop->search_flag = search_flag | PROP_STRING_SEARCH_SUPPORTED; + } + break; + } + default: + CLOG_ERROR(&LOG, "\"%s.%s\", type is not string.", srna->identifier, prop->identifier); + DefRNA.error = true; + break; + } +} + void RNA_def_property_string_funcs_runtime(PropertyRNA *prop, StringPropertyGetFunc getfunc, StringPropertyLengthFunc lengthfunc, @@ -3343,6 +3370,18 @@ void RNA_def_property_string_funcs_runtime(PropertyRNA *prop, } } +void RNA_def_property_string_search_func_runtime(PropertyRNA *prop, + StringPropertySearchFunc search_fn, + const eStringPropertySearchFlag search_flag) +{ + StringPropertyRNA *sprop = (StringPropertyRNA *)prop; + + sprop->search = search_fn; + if (search_fn != NULL) { + sprop->search_flag = search_flag | PROP_STRING_SEARCH_SUPPORTED; + } +} + void RNA_def_property_pointer_funcs( PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll) { @@ -4409,7 +4448,7 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropert void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem) { - static const EnumPropertyItem sepr = {0, "", 0, NULL, NULL}; + static const EnumPropertyItem sepr = RNA_ENUM_ITEM_SEPR; RNA_enum_item_add(items, totitem, &sepr); } diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c index ed6d4996c1e..6f9fe3741f7 100644 --- a/source/blender/makesrna/intern/rna_dynamicpaint.c +++ b/source/blender/makesrna/intern/rna_dynamicpaint.c @@ -37,30 +37,30 @@ const EnumPropertyItem rna_enum_prop_dynamicpaint_type_items[] = { # include "DEG_depsgraph.h" # include "DEG_depsgraph_build.h" -static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr) +static char *rna_DynamicPaintCanvasSettings_path(const PointerRNA *ptr) { - DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings *)ptr->data; - ModifierData *md = (ModifierData *)settings->pmd; + const DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings *)ptr->data; + const ModifierData *md = (ModifierData *)settings->pmd; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); return BLI_sprintfN("modifiers[\"%s\"].canvas_settings", name_esc); } -static char *rna_DynamicPaintBrushSettings_path(PointerRNA *ptr) +static char *rna_DynamicPaintBrushSettings_path(const PointerRNA *ptr) { - DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings *)ptr->data; - ModifierData *md = (ModifierData *)settings->pmd; + const DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings *)ptr->data; + const ModifierData *md = (ModifierData *)settings->pmd; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); return BLI_sprintfN("modifiers[\"%s\"].brush_settings", name_esc); } -static char *rna_DynamicPaintSurface_path(PointerRNA *ptr) +static char *rna_DynamicPaintSurface_path(const PointerRNA *ptr) { - DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data; - ModifierData *md = (ModifierData *)surface->canvas->pmd; + const DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data; + const ModifierData *md = (ModifierData *)surface->canvas->pmd; char name_esc[sizeof(md->name) * 2]; char name_esc_surface[sizeof(surface->name) * 2]; diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index af14a169d68..ac8aebd2fdd 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -786,11 +786,11 @@ static void rna_FModifier_active_update(Main *bmain, Scene *scene, PointerRNA *p rna_FModifier_update(bmain, scene, ptr); } -static int rna_FModifierGenerator_coefficients_get_length(PointerRNA *ptr, +static int rna_FModifierGenerator_coefficients_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { - FModifier *fcm = (FModifier *)ptr->data; - FMod_Generator *gen = fcm->data; + const FModifier *fcm = (FModifier *)ptr->data; + const FMod_Generator *gen = fcm->data; if (gen) { length[0] = gen->arraysize; @@ -1776,12 +1776,12 @@ static void rna_def_drivertarget(BlenderRNA *brna) {DTAR_TRANSCHAN_LOCX, "LOC_X", 0, "X Location", ""}, {DTAR_TRANSCHAN_LOCY, "LOC_Y", 0, "Y Location", ""}, {DTAR_TRANSCHAN_LOCZ, "LOC_Z", 0, "Z Location", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {DTAR_TRANSCHAN_ROTX, "ROT_X", 0, "X Rotation", ""}, {DTAR_TRANSCHAN_ROTY, "ROT_Y", 0, "Y Rotation", ""}, {DTAR_TRANSCHAN_ROTZ, "ROT_Z", 0, "Z Rotation", ""}, {DTAR_TRANSCHAN_ROTW, "ROT_W", 0, "W Rotation", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {DTAR_TRANSCHAN_SCALEX, "SCALE_X", 0, "X Scale", ""}, {DTAR_TRANSCHAN_SCALEY, "SCALE_Y", 0, "Y Scale", ""}, {DTAR_TRANSCHAN_SCALEZ, "SCALE_Z", 0, "Z Scale", ""}, diff --git a/source/blender/makesrna/intern/rna_fluid.c b/source/blender/makesrna/intern/rna_fluid.c index e0ec146a248..3b22ae9d40f 100644 --- a/source/blender/makesrna/intern/rna_fluid.c +++ b/source/blender/makesrna/intern/rna_fluid.c @@ -857,30 +857,30 @@ static void rna_Fluid_domaintype_set(struct PointerRNA *ptr, int value) BKE_fluid_fields_sanitize(settings); } -static char *rna_FluidDomainSettings_path(PointerRNA *ptr) +static char *rna_FluidDomainSettings_path(const PointerRNA *ptr) { - FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data; - ModifierData *md = (ModifierData *)settings->fmd; + const FluidDomainSettings *settings = (FluidDomainSettings *)ptr->data; + const ModifierData *md = (ModifierData *)settings->fmd; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); return BLI_sprintfN("modifiers[\"%s\"].domain_settings", name_esc); } -static char *rna_FluidFlowSettings_path(PointerRNA *ptr) +static char *rna_FluidFlowSettings_path(const PointerRNA *ptr) { - FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data; - ModifierData *md = (ModifierData *)settings->fmd; + const FluidFlowSettings *settings = (FluidFlowSettings *)ptr->data; + const ModifierData *md = (ModifierData *)settings->fmd; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); return BLI_sprintfN("modifiers[\"%s\"].flow_settings", name_esc); } -static char *rna_FluidEffectorSettings_path(PointerRNA *ptr) +static char *rna_FluidEffectorSettings_path(const PointerRNA *ptr) { - FluidEffectorSettings *settings = (FluidEffectorSettings *)ptr->data; - ModifierData *md = (ModifierData *)settings->fmd; + const FluidEffectorSettings *settings = (FluidEffectorSettings *)ptr->data; + const ModifierData *md = (ModifierData *)settings->fmd; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); @@ -893,9 +893,10 @@ static char *rna_FluidEffectorSettings_path(PointerRNA *ptr) # ifdef WITH_FLUID -static int rna_FluidModifier_grid_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_FluidModifier_grid_get_length(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; + const FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; float *density = NULL; int size = 0; @@ -918,7 +919,7 @@ static int rna_FluidModifier_grid_get_length(PointerRNA *ptr, int length[RNA_MAX return length[0]; } -static int rna_FluidModifier_color_grid_get_length(PointerRNA *ptr, +static int rna_FluidModifier_color_grid_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { rna_FluidModifier_grid_get_length(ptr, length); @@ -927,10 +928,10 @@ static int rna_FluidModifier_color_grid_get_length(PointerRNA *ptr, return length[0]; } -static int rna_FluidModifier_velocity_grid_get_length(PointerRNA *ptr, +static int rna_FluidModifier_velocity_grid_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { - FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; + const FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; float *vx = NULL; float *vy = NULL; float *vz = NULL; @@ -948,10 +949,10 @@ static int rna_FluidModifier_velocity_grid_get_length(PointerRNA *ptr, return length[0]; } -static int rna_FluidModifier_heat_grid_get_length(PointerRNA *ptr, +static int rna_FluidModifier_heat_grid_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { - FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; + const FluidDomainSettings *fds = (FluidDomainSettings *)ptr->data; float *heat = NULL; int size = 0; diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c index 9a9b6d582e5..6854ce37c94 100644 --- a/source/blender/makesrna/intern/rna_gpencil.c +++ b/source/blender/makesrna/intern/rna_gpencil.c @@ -307,7 +307,7 @@ bool rna_GPencil_datablocks_obdata_poll(PointerRNA *UNUSED(ptr), const PointerRN return (gpd->flag & GP_DATA_ANNOTATIONS) == 0; } -static char *rna_GPencilLayer_path(PointerRNA *ptr) +static char *rna_GPencilLayer_path(const PointerRNA *ptr) { bGPDlayer *gpl = (bGPDlayer *)ptr->data; char name_esc[sizeof(gpl->info) * 2]; @@ -407,7 +407,7 @@ static void rna_GPencilLayer_parent_bone_set(PointerRNA *ptr, const char *value) } } -static char *rna_GPencilLayerMask_path(PointerRNA *ptr) +static char *rna_GPencilLayerMask_path(const PointerRNA *ptr) { bGPdata *gpd = (bGPdata *)ptr->owner_id; bGPDlayer *gpl = BKE_gpencil_layer_active_get(gpd); @@ -1122,7 +1122,7 @@ static void rna_GPencil_clear(bGPdata *gpd) WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL); } -static char *rna_GreasePencilGrid_path(PointerRNA *UNUSED(ptr)) +static char *rna_GreasePencilGrid_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("grid"); } diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index be2ac6b12be..c3d5819caa3 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -46,7 +46,7 @@ #include "WM_types.h" const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = { - {0, "", 0, N_("Modify"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Modify"), NULL), {eGpencilModifierType_Texture, "GP_TEXTURE", ICON_MOD_UVPROJECT, @@ -63,7 +63,8 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = { ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Proximity", "Generate Vertex Weights base on distance to object"}, - {0, "", 0, N_("Generate"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Generate"), NULL), {eGpencilModifierType_Array, "GP_ARRAY", ICON_MOD_ARRAY, @@ -114,7 +115,7 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = { ICON_MOD_SUBSURF, "Subdivide", "Subdivide stroke adding more control points"}, - {0, "", 0, N_("Deform"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Deform"), NULL), {eGpencilModifierType_Armature, "GP_ARMATURE", ICON_MOD_ARMATURE, @@ -147,7 +148,7 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = { ICON_MOD_THICKNESS, "Thickness", "Change stroke thickness"}, - {0, "", 0, N_("Color"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Color"), NULL), {eGpencilModifierType_Color, "GP_COLOR", ICON_MOD_HUE_SATURATION, @@ -195,6 +196,7 @@ static const EnumPropertyItem rna_enum_time_mode_items[] = { {GP_TIME_MODE_NORMAL, "NORMAL", 0, "Regular", "Apply offset in usual animation direction"}, {GP_TIME_MODE_REVERSE, "REVERSE", 0, "Reverse", "Apply offset in reverse animation direction"}, {GP_TIME_MODE_FIX, "FIX", 0, "Fixed Frame", "Keep frame and do not change with time"}, + {GP_TIME_MODE_PINGPONG, "PINGPONG", 0, "Ping Pong", "Loop back and forth"}, {0, NULL, 0, NULL, NULL}, }; @@ -232,6 +234,11 @@ static const EnumPropertyItem gpencil_envelope_mode_items[] = { "Add fill segments to create the envelope. Don't keep the original stroke"}, {0, NULL, 0, NULL, NULL}, }; +static const EnumPropertyItem modifier_noise_random_mode_items[] = { + {GP_NOISE_RANDOM_STEP, "STEP", 0, "Steps", "Randomize every number of frames"}, + {GP_NOISE_RANDOM_KEYFRAME, "KEYFRAME", 0, "Keyframes", "Randomize on keyframes only"}, + {0, NULL, 0, NULL, NULL}, +}; #endif #ifdef RNA_RUNTIME @@ -335,9 +342,9 @@ static void rna_GpencilModifier_name_set(PointerRNA *ptr, const char *value) BKE_animdata_fix_paths_rename_all(NULL, "grease_pencil_modifiers", oldname, gmd->name); } -static char *rna_GpencilModifier_path(PointerRNA *ptr) +static char *rna_GpencilModifier_path(const PointerRNA *ptr) { - GpencilModifierData *gmd = ptr->data; + const GpencilModifierData *gmd = ptr->data; char name_esc[sizeof(gmd->name) * 2]; BLI_str_escape(name_esc, gmd->name, sizeof(name_esc)); @@ -746,11 +753,11 @@ static void rna_GpencilDash_segments_begin(CollectionPropertyIterator *iter, Poi iter, dmd->segments, sizeof(DashGpencilModifierSegment), dmd->segments_len, false, NULL); } -static char *rna_DashGpencilModifierSegment_path(PointerRNA *ptr) +static char *rna_DashGpencilModifierSegment_path(const PointerRNA *ptr) { - DashGpencilModifierSegment *ds = (DashGpencilModifierSegment *)ptr->data; + const DashGpencilModifierSegment *ds = (DashGpencilModifierSegment *)ptr->data; - DashGpencilModifierData *dmd = (DashGpencilModifierData *)ds->dmd; + const DashGpencilModifierData *dmd = (DashGpencilModifierData *)ds->dmd; BLI_assert(dmd != NULL); @@ -924,8 +931,7 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna) prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "step"); RNA_def_property_range(prop, 1, 100); - RNA_def_property_ui_text( - prop, "Step", "Number of frames before recalculate random values again"); + RNA_def_property_ui_text(prop, "Step", "Number of frames between randomization steps"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE); @@ -959,6 +965,12 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "random_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "noise_mode"); + RNA_def_property_enum_items(prop, modifier_noise_random_mode_items); + RNA_def_property_ui_text(prop, "Mode", "Where to perform randomization"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + RNA_define_lib_overridable(false); } @@ -3259,12 +3271,6 @@ static void rna_def_modifier_gpencillineart(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 30.0f); RNA_def_property_update(prop, NC_SCENE, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "use_remove_doubles", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "calculation_flags", LRT_REMOVE_DOUBLES); - RNA_def_property_ui_text( - prop, "Remove Doubles", "Remove doubles from the source geometry before generating stokes"); - RNA_def_property_update(prop, NC_SCENE, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "use_loose_as_contour", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "calculation_flags", LRT_LOOSE_AS_CONTOUR); RNA_def_property_ui_text(prop, "Loose As Contour", "Loose edges will have contour type"); diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index bd3b03add95..c7b713d80f5 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -175,7 +175,7 @@ static void rna_ImageUser_relations_update(Main *bmain, Scene *scene, PointerRNA DEG_relations_tag_update(bmain); } -static char *rna_ImageUser_path(PointerRNA *ptr) +static char *rna_ImageUser_path(const PointerRNA *ptr) { if (ptr->owner_id) { /* ImageUser *iuser = ptr->data; */ @@ -257,6 +257,51 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value) } } +static void rna_UDIMTile_size_get(PointerRNA *ptr, int *values) +{ + ImageTile *tile = (ImageTile *)ptr->data; + Image *image = (Image *)ptr->owner_id; + + ImageUser image_user; + BKE_imageuser_default(&image_user); + image_user.tile = tile->tile_number; + + void *lock; + ImBuf *ibuf = BKE_image_acquire_ibuf(image, &image_user, &lock); + if (ibuf) { + values[0] = ibuf->x; + values[1] = ibuf->y; + } + else { + values[0] = 0; + values[1] = 0; + } + + BKE_image_release_ibuf(image, ibuf, lock); +} + +static int rna_UDIMTile_channels_get(PointerRNA *ptr) +{ + ImageTile *tile = (ImageTile *)ptr->data; + Image *image = (Image *)ptr->owner_id; + + ImageUser image_user; + BKE_imageuser_default(&image_user); + image_user.tile = tile->tile_number; + + int channels = 0; + + void *lock; + ImBuf *ibuf = BKE_image_acquire_ibuf(image, &image_user, &lock); + if (ibuf) { + channels = ibuf->channels; + } + + BKE_image_release_ibuf(image, ibuf, lock); + + return channels; +} + static void rna_UDIMTile_label_get(PointerRNA *ptr, char *value) { ImageTile *tile = (ImageTile *)ptr->data; @@ -397,7 +442,7 @@ static void rna_Image_resolution_set(PointerRNA *ptr, const float *values) static int rna_Image_bindcode_get(PointerRNA *ptr) { Image *ima = (Image *)ptr->data; - GPUTexture *tex = ima->gputexture[TEXTARGET_2D][0][IMA_TEXTURE_RESOLUTION_FULL]; + GPUTexture *tex = ima->gputexture[TEXTARGET_2D][0]; return (tex) ? GPU_texture_opengl_bindcode(tex) : 0; } @@ -446,7 +491,7 @@ static int rna_Image_frame_duration_get(PointerRNA *ptr) return duration; } -static int rna_Image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_Image_pixels_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { Image *ima = (Image *)ptr->owner_id; ImBuf *ibuf; @@ -737,6 +782,16 @@ static void rna_def_image_packed_files(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "filepath"); RNA_def_struct_name_property(srna, prop); + prop = RNA_def_property(srna, "view", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "view"); + RNA_def_property_ui_text(prop, "View Index", ""); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop = RNA_def_property(srna, "tile_number", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "tile_number"); + RNA_def_property_ui_text(prop, "Tile Number", ""); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_api_image_packed_file(srna); } @@ -816,6 +871,26 @@ static void rna_def_udim_tile(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Number", "Number of the position that this tile covers"); RNA_def_property_int_funcs(prop, NULL, "rna_UDIMTile_tile_number_set", NULL); RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL); + + prop = RNA_def_int_vector( + srna, + "size", + 2, + NULL, + 0, + 0, + "Size", + "Width and height of the tile buffer in pixels, zero when image data can't be loaded", + 0, + 0); + RNA_def_property_subtype(prop, PROP_PIXEL); + RNA_def_property_int_funcs(prop, "rna_UDIMTile_size_get", NULL, NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop = RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_UDIMTile_channels_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Channels", "Number of channels in the tile pixels buffer"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); } static void rna_def_udim_tiles(BlenderRNA *brna, PropertyRNA *cprop) diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c index f46b820a9f9..d2b8b32eedc 100644 --- a/source/blender/makesrna/intern/rna_image_api.c +++ b/source/blender/makesrna/intern/rna_image_api.c @@ -26,6 +26,7 @@ # include "BKE_image.h" # include "BKE_image_format.h" +# include "BKE_image_save.h" # include "BKE_main.h" # include "BKE_scene.h" # include <errno.h> @@ -50,77 +51,39 @@ static void rna_ImagePackedFile_save(ImagePackedFile *imapf, Main *bmain, Report static void rna_Image_save_render( Image *image, bContext *C, ReportList *reports, const char *path, Scene *scene) { - ImBuf *ibuf; + Main *bmain = CTX_data_main(C); if (scene == NULL) { scene = CTX_data_scene(C); } - if (scene) { - ImageUser iuser = {NULL}; - void *lock; + ImageSaveOptions opts; - iuser.scene = scene; + if (BKE_image_save_options_init(&opts, bmain, scene, image, NULL, false, true)) { + opts.save_copy = true; + STRNCPY(opts.filepath, path); - ibuf = BKE_image_acquire_ibuf(image, &iuser, &lock); - - if (ibuf == NULL) { - BKE_report(reports, RPT_ERROR, "Could not acquire buffer from image"); - } - else { - ImBuf *write_ibuf; - - ImageFormatData image_format; - BKE_image_format_init_for_write(&image_format, scene, NULL); - - write_ibuf = IMB_colormanagement_imbuf_for_write(ibuf, true, true, &image_format); - - write_ibuf->planes = image_format.planes; - write_ibuf->dither = scene->r.dither_intensity; - - if (!BKE_imbuf_write(write_ibuf, path, &image_format)) { - BKE_reportf(reports, RPT_ERROR, "Could not write image: %s, '%s'", strerror(errno), path); - } - - if (write_ibuf != ibuf) { - IMB_freeImBuf(write_ibuf); - } - - BKE_image_format_free(&image_format); + if (!BKE_image_save(reports, bmain, image, NULL, &opts)) { + BKE_reportf( + reports, RPT_ERROR, "Image '%s' could not be saved to '%s'", image->id.name + 2, path); } - - BKE_image_release_ibuf(image, ibuf, lock); } else { - BKE_report(reports, RPT_ERROR, "Scene not in context, could not get save parameters"); + BKE_reportf(reports, RPT_ERROR, "Image '%s' does not have any image data", image->id.name + 2); } + + BKE_image_save_options_free(&opts); + + WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, image); } static void rna_Image_save(Image *image, Main *bmain, bContext *C, ReportList *reports) { - void *lock; - - ImBuf *ibuf = BKE_image_acquire_ibuf(image, NULL, &lock); - if (ibuf) { - char filepath[FILE_MAX]; - BLI_strncpy(filepath, image->filepath, sizeof(filepath)); - BLI_path_abs(filepath, ID_BLEND_PATH(bmain, &image->id)); - - /* NOTE: we purposefully ignore packed files here, - * developers need to explicitly write them via 'packed_files' */ + Scene *scene = CTX_data_scene(C); + ImageSaveOptions opts; - if (IMB_saveiff(ibuf, filepath, ibuf->flags)) { - image->type = IMA_TYPE_IMAGE; - - if (image->source == IMA_SRC_GENERATED) { - image->source = IMA_SRC_FILE; - } - - IMB_colormanagement_colorspace_from_ibuf_ftype(&image->colorspace_settings, ibuf); - - ibuf->userflags &= ~IB_BITMAPDIRTY; - } - else { + if (BKE_image_save_options_init(&opts, bmain, scene, image, NULL, false, false)) { + if (!BKE_image_save(reports, bmain, image, NULL, &opts)) { BKE_reportf(reports, RPT_ERROR, "Image '%s' could not be saved to '%s'", @@ -132,7 +95,8 @@ static void rna_Image_save(Image *image, Main *bmain, bContext *C, ReportList *r BKE_reportf(reports, RPT_ERROR, "Image '%s' does not have any image data", image->id.name + 2); } - BKE_image_release_ibuf(image, ibuf, lock); + BKE_image_save_options_free(&opts); + WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, image); } @@ -161,9 +125,8 @@ static void rna_Image_unpack(Image *image, Main *bmain, ReportList *reports, int if (!BKE_image_has_packedfile(image)) { BKE_report(reports, RPT_ERROR, "Image not packed"); } - else if (BKE_image_has_multiple_ibufs(image)) { - BKE_report( - reports, RPT_ERROR, "Unpacking movies, image sequences or tiled images not supported"); + else if (ELEM(image->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { + BKE_report(reports, RPT_ERROR, "Unpacking movies or image sequences not supported"); return; } else { @@ -238,7 +201,7 @@ static int rna_Image_gl_touch( BKE_image_tag_time(image); - if (image->gputexture[TEXTARGET_2D][0][IMA_TEXTURE_RESOLUTION_FULL] == NULL) { + if (image->gputexture[TEXTARGET_2D][0] == NULL) { error = rna_Image_gl_load(image, reports, frame, layer_index, pass_index); } diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index bf4eec433c4..058c63f640a 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -373,7 +373,7 @@ void rna_ViewLayer_active_lightgroup_index_set(PointerRNA *ptr, int value); * `rna_path_buffer_size` should be at least `sizeof(ViewLayer.name) * 3`. * \return actual length of the generated RNA path. */ -size_t rna_ViewLayer_path_buffer_get(struct ViewLayer *view_layer, +size_t rna_ViewLayer_path_buffer_get(const struct ViewLayer *view_layer, char *r_rna_path, const size_t rna_path_buffer_size); @@ -402,8 +402,8 @@ bool rna_GPencil_datablocks_annotations_poll(struct PointerRNA *ptr, const struct PointerRNA value); bool rna_GPencil_datablocks_obdata_poll(struct PointerRNA *ptr, const struct PointerRNA value); -char *rna_TextureSlot_path(struct PointerRNA *ptr); -char *rna_Node_ImageUser_path(struct PointerRNA *ptr); +char *rna_TextureSlot_path(const struct PointerRNA *ptr); +char *rna_Node_ImageUser_path(const struct PointerRNA *ptr); /* Set U.is_dirty and redraw. */ diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index 4db438f04b4..4f88959b5ba 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -50,9 +50,10 @@ typedef int (*EditableFunc)(struct PointerRNA *ptr, const char **r_info); typedef int (*ItemEditableFunc)(struct PointerRNA *ptr, int index); typedef struct IDProperty **(*IDPropertiesFunc)(struct PointerRNA *ptr); typedef struct StructRNA *(*StructRefineFunc)(struct PointerRNA *ptr); -typedef char *(*StructPathFunc)(struct PointerRNA *ptr); +typedef char *(*StructPathFunc)(const struct PointerRNA *ptr); -typedef int (*PropArrayLengthGetFunc)(struct PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]); +typedef int (*PropArrayLengthGetFunc)(const struct PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]); typedef bool (*PropBooleanGetFunc)(struct PointerRNA *ptr); typedef void (*PropBooleanSetFunc)(struct PointerRNA *ptr, bool value); typedef void (*PropBooleanArrayGetFunc)(struct PointerRNA *ptr, bool *values); @@ -439,6 +440,15 @@ typedef struct StringPropertyRNA { PropStringLengthFuncEx length_ex; PropStringSetFuncEx set_ex; + /** + * Optional callback to list candidates for a string. + * This is only for use as suggestions in UI, other values may be assigned. + * + * \note The callback type is public, hence the difference in naming convention. + */ + StringPropertySearchFunc search; + eStringPropertySearchFlag search_flag; + int maxlength; /* includes string terminator! */ const char *defaultvalue; diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 50b25157989..b16d127a643 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -26,6 +26,14 @@ #include "rna_internal.h" +const EnumPropertyItem rna_enum_keyblock_type_items[] = { + {KEY_LINEAR, "KEY_LINEAR", 0, "Linear", ""}, + {KEY_CARDINAL, "KEY_CARDINAL", 0, "Cardinal", ""}, + {KEY_CATMULL_ROM, "KEY_CATMULL_ROM", 0, "Catmull-Rom", ""}, + {KEY_BSPLINE, "KEY_BSPLINE", 0, "BSpline", ""}, + {0, NULL, 0, NULL, NULL}, +}; + #ifdef RNA_RUNTIME # include <stddef.h> @@ -159,7 +167,7 @@ static void rna_ShapeKey_slider_max_set(PointerRNA *ptr, float value) * such case looks rather unlikely - and not worth adding some kind of caching in key-blocks. */ -static Mesh *rna_KeyBlock_normals_get_mesh(PointerRNA *ptr, ID *id) +static Mesh *rna_KeyBlock_normals_get_mesh(const PointerRNA *ptr, ID *id) { Key *key = rna_ShapeKey_find_key((id == NULL && ptr != NULL) ? ptr->owner_id : id); id = key ? key->from : NULL; @@ -182,9 +190,10 @@ static Mesh *rna_KeyBlock_normals_get_mesh(PointerRNA *ptr, ID *id) return NULL; } -static int rna_KeyBlock_normals_vert_len(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_KeyBlock_normals_vert_len(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); + const Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); length[0] = me ? me->totvert : 0; length[1] = 3; @@ -211,9 +220,10 @@ static void rna_KeyBlock_normals_vert_calc(ID *id, BKE_keyblock_mesh_calc_normals(data, me, (float(*)[3])(*normals), NULL, NULL); } -static int rna_KeyBlock_normals_poly_len(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_KeyBlock_normals_poly_len(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); + const Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); length[0] = me ? me->totpoly : 0; length[1] = 3; @@ -240,9 +250,10 @@ static void rna_KeyBlock_normals_poly_calc(ID *id, BKE_keyblock_mesh_calc_normals(data, me, NULL, (float(*)[3])(*normals), NULL); } -static int rna_KeyBlock_normals_loop_len(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_KeyBlock_normals_loop_len(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); + const Mesh *me = rna_KeyBlock_normals_get_mesh(ptr, NULL); length[0] = me ? me->totloop : 0; length[1] = 3; @@ -656,10 +667,10 @@ int rna_ShapeKey_data_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr) return false; } -static char *rna_ShapeKey_path(PointerRNA *ptr) +static char *rna_ShapeKey_path(const PointerRNA *ptr) { - KeyBlock *kb = (KeyBlock *)ptr->data; - ID *id = ptr->owner_id; + const KeyBlock *kb = (KeyBlock *)ptr->data; + const ID *id = ptr->owner_id; char name_esc[sizeof(kb->name) * 2]; BLI_str_escape(name_esc, kb->name, sizeof(name_esc)); @@ -750,7 +761,7 @@ static int rna_ShapeKeyPoint_get_index(Key *key, KeyBlock *kb, float *point) return (int)(pt - start) / key->elemsize; } -static char *rna_ShapeKeyPoint_path(PointerRNA *ptr) +static char *rna_ShapeKeyPoint_path(const PointerRNA *ptr) { ID *id = ptr->owner_id; Key *key = rna_ShapeKey_find_key(ptr->owner_id); @@ -786,14 +797,6 @@ static char *rna_ShapeKeyPoint_path(PointerRNA *ptr) #else -const EnumPropertyItem rna_enum_keyblock_type_items[] = { - {KEY_LINEAR, "KEY_LINEAR", 0, "Linear", ""}, - {KEY_CARDINAL, "KEY_CARDINAL", 0, "Cardinal", ""}, - {KEY_CATMULL_ROM, "KEY_CATMULL_ROM", 0, "Catmull-Rom", ""}, - {KEY_BSPLINE, "KEY_BSPLINE", 0, "BSpline", ""}, - {0, NULL, 0, NULL, NULL}, -}; - static const float tilt_limit = DEG2RADF(21600.0f); static void rna_def_keydata(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c index 8fb36c035b7..f94804cb609 100644 --- a/source/blender/makesrna/intern/rna_lattice.c +++ b/source/blender/makesrna/intern/rna_lattice.c @@ -209,11 +209,11 @@ static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value) } /* annoying, but is a consequence of RNA structures... */ -static char *rna_LatticePoint_path(PointerRNA *ptr) +static char *rna_LatticePoint_path(const PointerRNA *ptr) { - Lattice *lt = (Lattice *)ptr->owner_id; - void *point = ptr->data; - BPoint *points = NULL; + const Lattice *lt = (Lattice *)ptr->owner_id; + const void *point = ptr->data; + const BPoint *points = NULL; if (lt->editlatt && lt->editlatt->latt->def) { points = lt->editlatt->latt->def; diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c index 42414a9931b..8c9c66bffcf 100644 --- a/source/blender/makesrna/intern/rna_layer.c +++ b/source/blender/makesrna/intern/rna_layer.c @@ -98,7 +98,7 @@ static void rna_LayerObjects_active_object_set(PointerRNA *ptr, } } -size_t rna_ViewLayer_path_buffer_get(ViewLayer *view_layer, +size_t rna_ViewLayer_path_buffer_get(const ViewLayer *view_layer, char *r_rna_path, const size_t rna_path_buffer_size) { @@ -108,9 +108,9 @@ size_t rna_ViewLayer_path_buffer_get(ViewLayer *view_layer, return BLI_snprintf_rlen(r_rna_path, rna_path_buffer_size, "view_layers[\"%s\"]", name_esc); } -static char *rna_ViewLayer_path(PointerRNA *ptr) +static char *rna_ViewLayer_path(const PointerRNA *ptr) { - ViewLayer *view_layer = (ViewLayer *)ptr->data; + const ViewLayer *view_layer = (ViewLayer *)ptr->data; char rna_path[sizeof(view_layer->name) * 3]; rna_ViewLayer_path_buffer_get(view_layer, rna_path, sizeof(rna_path)); diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c index 2a8a3a76c6d..c18ee461fae 100644 --- a/source/blender/makesrna/intern/rna_linestyle.c +++ b/source/blender/makesrna/intern/rna_linestyle.c @@ -239,33 +239,33 @@ static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr) } } -static char *rna_LineStyle_color_modifier_path(PointerRNA *ptr) +static char *rna_LineStyle_color_modifier_path(const PointerRNA *ptr) { - LineStyleModifier *m = (LineStyleModifier *)ptr->data; + const LineStyleModifier *m = (LineStyleModifier *)ptr->data; char name_esc[sizeof(m->name) * 2]; BLI_str_escape(name_esc, m->name, sizeof(name_esc)); return BLI_sprintfN("color_modifiers[\"%s\"]", name_esc); } -static char *rna_LineStyle_alpha_modifier_path(PointerRNA *ptr) +static char *rna_LineStyle_alpha_modifier_path(const PointerRNA *ptr) { - LineStyleModifier *m = (LineStyleModifier *)ptr->data; + const LineStyleModifier *m = (LineStyleModifier *)ptr->data; char name_esc[sizeof(m->name) * 2]; BLI_str_escape(name_esc, m->name, sizeof(name_esc)); return BLI_sprintfN("alpha_modifiers[\"%s\"]", name_esc); } -static char *rna_LineStyle_thickness_modifier_path(PointerRNA *ptr) +static char *rna_LineStyle_thickness_modifier_path(const PointerRNA *ptr) { - LineStyleModifier *m = (LineStyleModifier *)ptr->data; + const LineStyleModifier *m = (LineStyleModifier *)ptr->data; char name_esc[sizeof(m->name) * 2]; BLI_str_escape(name_esc, m->name, sizeof(name_esc)); return BLI_sprintfN("thickness_modifiers[\"%s\"]", name_esc); } -static char *rna_LineStyle_geometry_modifier_path(PointerRNA *ptr) +static char *rna_LineStyle_geometry_modifier_path(const PointerRNA *ptr) { - LineStyleModifier *m = (LineStyleModifier *)ptr->data; + const LineStyleModifier *m = (LineStyleModifier *)ptr->data; char name_esc[sizeof(m->name) * 2]; BLI_str_escape(name_esc, m->name, sizeof(name_esc)); return BLI_sprintfN("geometry_modifiers[\"%s\"]", name_esc); diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c index 2247a16a7a0..3dac148f7d4 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.c @@ -165,9 +165,9 @@ static void rna_Mask_layer_active_index_range( *softmax = *max; } -static char *rna_MaskLayer_path(PointerRNA *ptr) +static char *rna_MaskLayer_path(const PointerRNA *ptr) { - MaskLayer *masklay = (MaskLayer *)ptr->data; + const MaskLayer *masklay = (MaskLayer *)ptr->data; char name_esc[sizeof(masklay->name) * 2]; BLI_str_escape(name_esc, masklay->name, sizeof(name_esc)); return BLI_sprintfN("layers[\"%s\"]", name_esc); diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 15e7e12bbf8..4fb7495bac8 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -25,24 +25,24 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = { {MA_RAMP_BLEND, "MIX", 0, "Mix", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MA_RAMP_DARK, "DARKEN", 0, "Darken", ""}, {MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""}, {MA_RAMP_BURN, "BURN", 0, "Color Burn", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""}, {MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""}, {MA_RAMP_DODGE, "DODGE", 0, "Color Dodge", ""}, {MA_RAMP_ADD, "ADD", 0, "Add", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MA_RAMP_OVERLAY, "OVERLAY", 0, "Overlay", ""}, {MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""}, {MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MA_RAMP_DIFF, "DIFFERENCE", 0, "Difference", ""}, {MA_RAMP_SUB, "SUBTRACT", 0, "Subtract", ""}, {MA_RAMP_DIV, "DIVIDE", 0, "Divide", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MA_RAMP_HUE, "HUE", 0, "Hue", ""}, {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""}, {MA_RAMP_COLOR, "COLOR", 0, "Color", ""}, @@ -362,7 +362,7 @@ static void rna_gpcolordata_uv_update(Main *bmain, Scene *scene, PointerRNA *ptr rna_MaterialGpencil_update(bmain, scene, ptr); } -static char *rna_GpencilColorData_path(PointerRNA *UNUSED(ptr)) +static char *rna_GpencilColorData_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("grease_pencil"); } diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index ec0a182e338..fd548ea6a56 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -71,7 +71,7 @@ static const EnumPropertyItem rna_enum_mesh_remesh_mode_items[] = { /** \name Generic Helpers * \{ */ -static Mesh *rna_mesh(PointerRNA *ptr) +static Mesh *rna_mesh(const PointerRNA *ptr) { Mesh *me = (Mesh *)ptr->owner_id; return me; @@ -102,7 +102,7 @@ static CustomData *rna_mesh_fdata_helper(Mesh *me) return (me->edit_mesh) ? NULL : &me->fdata; } -static CustomData *rna_mesh_vdata(PointerRNA *ptr) +static CustomData *rna_mesh_vdata(const PointerRNA *ptr) { Mesh *me = rna_mesh(ptr); return rna_mesh_vdata_helper(me); @@ -114,13 +114,13 @@ static CustomData *rna_mesh_edata(PointerRNA *ptr) return rna_mesh_edata_helper(me); } # endif -static CustomData *rna_mesh_pdata(PointerRNA *ptr) +static CustomData *rna_mesh_pdata(const PointerRNA *ptr) { Mesh *me = rna_mesh(ptr); return rna_mesh_pdata_helper(me); } -static CustomData *rna_mesh_ldata(PointerRNA *ptr) +static CustomData *rna_mesh_ldata(const PointerRNA *ptr) { Mesh *me = rna_mesh(ptr); return rna_mesh_ldata_helper(me); @@ -560,7 +560,7 @@ static void rna_MeshVertex_undeformed_co_get(PointerRNA *ptr, float values[3]) { Mesh *me = rna_mesh(ptr); MVert *mvert = (MVert *)ptr->data; - float(*orco)[3] = CustomData_get_layer(&me->vdata, CD_ORCO); + const float(*orco)[3] = CustomData_get_layer(&me->vdata, CD_ORCO); if (orco) { /* orco is normalized to 0..1, we do inverse to match mvert->co */ @@ -626,9 +626,10 @@ static void rna_CustomDataLayer_clone_set(PointerRNA *ptr, CustomData *data, int static bool rna_MEdge_freestyle_edge_mark_get(PointerRNA *ptr) { - Mesh *me = rna_mesh(ptr); - MEdge *medge = (MEdge *)ptr->data; - FreestyleEdge *fed = CustomData_get(&me->edata, (int)(medge - me->medge), CD_FREESTYLE_EDGE); + const Mesh *me = rna_mesh(ptr); + const MEdge *medge = (MEdge *)ptr->data; + const FreestyleEdge *fed = CustomData_get( + &me->edata, (int)(medge - me->medge), CD_FREESTYLE_EDGE); return fed && (fed->flag & FREESTYLE_EDGE_MARK) != 0; } @@ -652,9 +653,10 @@ static void rna_MEdge_freestyle_edge_mark_set(PointerRNA *ptr, bool value) static bool rna_MPoly_freestyle_face_mark_get(PointerRNA *ptr) { - Mesh *me = rna_mesh(ptr); - MPoly *mpoly = (MPoly *)ptr->data; - FreestyleFace *ffa = CustomData_get(&me->pdata, (int)(mpoly - me->mpoly), CD_FREESTYLE_FACE); + const Mesh *me = rna_mesh(ptr); + const MPoly *mpoly = (MPoly *)ptr->data; + const FreestyleFace *ffa = CustomData_get( + &me->pdata, (int)(mpoly - me->mpoly), CD_FREESTYLE_FACE); return ffa && (ffa->flag & FREESTYLE_FACE_MARK) != 0; } @@ -687,9 +689,9 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, rende /* MeshUVLoopLayer */ -static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr) +static char *rna_MeshUVLoopLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("uv_layers[\"%s\"]", name_esc); @@ -930,16 +932,16 @@ static int rna_Mesh_polygon_string_layers_length(PointerRNA *ptr) /* Skin vertices */ DEFINE_CUSTOMDATA_LAYER_COLLECTION(skin_vertice, vdata, CD_MVERT_SKIN) -static char *rna_MeshSkinVertexLayer_path(PointerRNA *ptr) +static char *rna_MeshSkinVertexLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("skin_vertices[\"%s\"]", name_esc); } -static char *rna_VertCustomData_data_path(PointerRNA *ptr, const char *collection, int type); -static char *rna_MeshSkinVertex_path(PointerRNA *ptr) +static char *rna_VertCustomData_data_path(const PointerRNA *ptr, const char *collection, int type); +static char *rna_MeshSkinVertex_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "skin_vertices", CD_MVERT_SKIN); } @@ -962,8 +964,7 @@ static int rna_MeshSkinVertexLayer_data_length(PointerRNA *ptr) /* Vertex creases */ DEFINE_CUSTOMDATA_LAYER_COLLECTION(vertex_crease, vdata, CD_CREASE) -static char *rna_VertCustomData_data_path(PointerRNA *ptr, const char *collection, int type); -static char *rna_MeshVertexCreaseLayer_path(PointerRNA *ptr) +static char *rna_MeshVertexCreaseLayer_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "vertex_creases", CD_CREASE); } @@ -986,15 +987,15 @@ static int rna_MeshVertexCreaseLayer_data_length(PointerRNA *ptr) /* Paint mask */ DEFINE_CUSTOMDATA_LAYER_COLLECTION(vertex_paint_mask, vdata, CD_PAINT_MASK) -static char *rna_MeshPaintMaskLayer_path(PointerRNA *ptr) +static char *rna_MeshPaintMaskLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("vertex_paint_masks[\"%s\"]", name_esc); } -static char *rna_MeshPaintMask_path(PointerRNA *ptr) +static char *rna_MeshPaintMask_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "vertex_paint_masks", CD_PAINT_MASK); } @@ -1021,9 +1022,9 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION(face_map, pdata, CD_FACEMAP) DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM( face_map, pdata, CD_FACEMAP, active, MeshFaceMapLayer) -static char *rna_MeshFaceMapLayer_path(PointerRNA *ptr) +static char *rna_MeshFaceMapLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("face_maps[\"%s\"]", name_esc); @@ -1088,11 +1089,12 @@ static void rna_Mesh_face_map_remove(struct Mesh *me, /* End face maps */ /* poly.vertices - this is faked loop access for convenience */ -static int rna_MeshPoly_vertices_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_MeshPoly_vertices_get_length(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - MPoly *mp = (MPoly *)ptr->data; + const MPoly *mp = (MPoly *)ptr->data; /* NOTE: raw access uses dummy item, this _could_ crash, - * watch out for this, mface uses it but it can't work here. */ + * watch out for this, #MFace uses it but it can't work here. */ return (length[0] = mp->totloop); } @@ -1180,11 +1182,11 @@ static int rna_MeshLoop_index_get(PointerRNA *ptr) /* path construction */ -static char *rna_VertexGroupElement_path(PointerRNA *ptr) +static char *rna_VertexGroupElement_path(const PointerRNA *ptr) { - Mesh *me = rna_mesh(ptr); /* XXX not always! */ - MDeformWeight *dw = (MDeformWeight *)ptr->data; - MDeformVert *dvert; + const Mesh *me = rna_mesh(ptr); /* XXX not always! */ + const MDeformWeight *dw = (MDeformWeight *)ptr->data; + const MDeformVert *dvert; int a, b; for (a = 0, dvert = me->dvert; a < me->totvert; a++, dvert++) { @@ -1198,37 +1200,37 @@ static char *rna_VertexGroupElement_path(PointerRNA *ptr) return NULL; } -static char *rna_MeshPolygon_path(PointerRNA *ptr) +static char *rna_MeshPolygon_path(const PointerRNA *ptr) { return BLI_sprintfN("polygons[%d]", (int)((MPoly *)ptr->data - rna_mesh(ptr)->mpoly)); } -static char *rna_MeshLoopTriangle_path(PointerRNA *ptr) +static char *rna_MeshLoopTriangle_path(const PointerRNA *ptr) { return BLI_sprintfN("loop_triangles[%d]", (int)((MLoopTri *)ptr->data - rna_mesh(ptr)->runtime.looptris.array)); } -static char *rna_MeshEdge_path(PointerRNA *ptr) +static char *rna_MeshEdge_path(const PointerRNA *ptr) { return BLI_sprintfN("edges[%d]", (int)((MEdge *)ptr->data - rna_mesh(ptr)->medge)); } -static char *rna_MeshLoop_path(PointerRNA *ptr) +static char *rna_MeshLoop_path(const PointerRNA *ptr) { return BLI_sprintfN("loops[%d]", (int)((MLoop *)ptr->data - rna_mesh(ptr)->mloop)); } -static char *rna_MeshVertex_path(PointerRNA *ptr) +static char *rna_MeshVertex_path(const PointerRNA *ptr) { return BLI_sprintfN("vertices[%d]", (int)((MVert *)ptr->data - rna_mesh(ptr)->mvert)); } -static char *rna_VertCustomData_data_path(PointerRNA *ptr, const char *collection, int type) +static char *rna_VertCustomData_data_path(const PointerRNA *ptr, const char *collection, int type) { - CustomDataLayer *cdl; - Mesh *me = rna_mesh(ptr); - CustomData *vdata = rna_mesh_vdata(ptr); + const CustomDataLayer *cdl; + const Mesh *me = rna_mesh(ptr); + const CustomData *vdata = rna_mesh_vdata(ptr); int a, b, totvert = (me->edit_mesh) ? 0 : me->totvert; for (cdl = vdata->layers, a = 0; a < vdata->totlayer; cdl++, a++) { @@ -1245,11 +1247,11 @@ static char *rna_VertCustomData_data_path(PointerRNA *ptr, const char *collectio return NULL; } -static char *rna_PolyCustomData_data_path(PointerRNA *ptr, const char *collection, int type) +static char *rna_PolyCustomData_data_path(const PointerRNA *ptr, const char *collection, int type) { - CustomDataLayer *cdl; - Mesh *me = rna_mesh(ptr); - CustomData *pdata = rna_mesh_pdata(ptr); + const CustomDataLayer *cdl; + const Mesh *me = rna_mesh(ptr); + const CustomData *pdata = rna_mesh_pdata(ptr); int a, b, totpoly = (me->edit_mesh) ? 0 : me->totpoly; for (cdl = pdata->layers, a = 0; a < pdata->totlayer; cdl++, a++) { @@ -1266,11 +1268,11 @@ static char *rna_PolyCustomData_data_path(PointerRNA *ptr, const char *collectio return NULL; } -static char *rna_LoopCustomData_data_path(PointerRNA *ptr, const char *collection, int type) +static char *rna_LoopCustomData_data_path(const PointerRNA *ptr, const char *collection, int type) { - CustomDataLayer *cdl; - Mesh *me = rna_mesh(ptr); - CustomData *ldata = rna_mesh_ldata(ptr); + const CustomDataLayer *cdl; + const Mesh *me = rna_mesh(ptr); + const CustomData *ldata = rna_mesh_ldata(ptr); int a, b, totloop = (me->edit_mesh) ? 0 : me->totloop; for (cdl = ldata->layers, a = 0; a < ldata->totlayer; cdl++, a++) { @@ -1313,58 +1315,58 @@ static int rna_Mesh_poly_normals_length(PointerRNA *ptr) return mesh->totpoly; } -static char *rna_MeshUVLoop_path(PointerRNA *ptr) +static char *rna_MeshUVLoop_path(const PointerRNA *ptr) { return rna_LoopCustomData_data_path(ptr, "uv_layers", CD_MLOOPUV); } -static char *rna_MeshLoopColorLayer_path(PointerRNA *ptr) +static char *rna_MeshLoopColorLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("vertex_colors[\"%s\"]", name_esc); } -static char *rna_MeshColor_path(PointerRNA *ptr) +static char *rna_MeshColor_path(const PointerRNA *ptr) { return rna_LoopCustomData_data_path(ptr, "vertex_colors", CD_PROP_BYTE_COLOR); } -static char *rna_MeshVertColorLayer_path(PointerRNA *ptr) +static char *rna_MeshVertColorLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("sculpt_vertex_colors[\"%s\"]", name_esc); } -static char *rna_MeshVertColor_path(PointerRNA *ptr) +static char *rna_MeshVertColor_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "sculpt_vertex_colors", CD_PROP_COLOR); } /**** Float Property Layer API ****/ -static char *rna_MeshVertexFloatPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshVertexFloatPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("vertex_float_layers[\"%s\"]", name_esc); } -static char *rna_MeshPolygonFloatPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshPolygonFloatPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("polygon_float_layers[\"%s\"]", name_esc); } -static char *rna_MeshVertexFloatProperty_path(PointerRNA *ptr) +static char *rna_MeshVertexFloatProperty_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "vertex_layers_float", CD_PROP_FLOAT); } -static char *rna_MeshPolygonFloatProperty_path(PointerRNA *ptr) +static char *rna_MeshPolygonFloatProperty_path(const PointerRNA *ptr) { return rna_PolyCustomData_data_path(ptr, "polygon_layers_float", CD_PROP_FLOAT); } @@ -1396,26 +1398,26 @@ static int rna_MeshPolygonFloatPropertyLayer_data_length(PointerRNA *ptr) } /**** Int Property Layer API ****/ -static char *rna_MeshVertexIntPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshVertexIntPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("vertex_int_layers[\"%s\"]", name_esc); } -static char *rna_MeshPolygonIntPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshPolygonIntPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("polygon_int_layers[\"%s\"]", name_esc); } -static char *rna_MeshVertexIntProperty_path(PointerRNA *ptr) +static char *rna_MeshVertexIntProperty_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "vertex_layers_int", CD_PROP_INT32); } -static char *rna_MeshPolygonIntProperty_path(PointerRNA *ptr) +static char *rna_MeshPolygonIntProperty_path(const PointerRNA *ptr) { return rna_PolyCustomData_data_path(ptr, "polygon_layers_int", CD_PROP_INT32); } @@ -1447,26 +1449,26 @@ static int rna_MeshPolygonIntPropertyLayer_data_length(PointerRNA *ptr) } /**** String Property Layer API ****/ -static char *rna_MeshVertexStringPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshVertexStringPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("vertex_string_layers[\"%s\"]", name_esc); } -static char *rna_MeshPolygonStringPropertyLayer_path(PointerRNA *ptr) +static char *rna_MeshPolygonStringPropertyLayer_path(const PointerRNA *ptr) { - CustomDataLayer *cdl = ptr->data; + const CustomDataLayer *cdl = ptr->data; char name_esc[sizeof(cdl->name) * 2]; BLI_str_escape(name_esc, cdl->name, sizeof(name_esc)); return BLI_sprintfN("polygon_string_layers[\"%s\"]", name_esc); } -static char *rna_MeshVertexStringProperty_path(PointerRNA *ptr) +static char *rna_MeshVertexStringProperty_path(const PointerRNA *ptr) { return rna_VertCustomData_data_path(ptr, "vertex_layers_string", CD_PROP_STRING); } -static char *rna_MeshPolygonStringProperty_path(PointerRNA *ptr) +static char *rna_MeshPolygonStringProperty_path(const PointerRNA *ptr) { return rna_PolyCustomData_data_path(ptr, "polygon_layers_string", CD_PROP_STRING); } @@ -1517,7 +1519,7 @@ void rna_MeshStringProperty_s_set(PointerRNA *ptr, const char *value) BLI_strncpy(ms->s, value, sizeof(ms->s)); } -static char *rna_MeshFaceMap_path(PointerRNA *ptr) +static char *rna_MeshFaceMap_path(const PointerRNA *ptr) { return rna_PolyCustomData_data_path(ptr, "face_maps", CD_FACEMAP); } @@ -1636,7 +1638,7 @@ static PointerRNA rna_Mesh_uv_layers_new(struct Mesh *me, PointerRNA ptr; CustomData *ldata; CustomDataLayer *cdl = NULL; - int index = ED_mesh_uv_texture_add(me, name, false, do_init, reports); + int index = ED_mesh_uv_add(me, name, false, do_init, reports); if (index != -1) { ldata = rna_mesh_ldata_helper(me); @@ -1649,7 +1651,7 @@ static PointerRNA rna_Mesh_uv_layers_new(struct Mesh *me, static void rna_Mesh_uv_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer) { - if (ED_mesh_uv_texture_remove_named(me, layer->name) == false) { + if (ED_mesh_uv_remove_named(me, layer->name) == false) { BKE_reportf(reports, RPT_ERROR, "Texture layer '%s' not found", layer->name); } } diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index f160388c5d2..e6cf743e167 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -156,10 +156,10 @@ static bool rna_Meta_is_editmode_get(PointerRNA *ptr) return (mb->editelems != NULL); } -static char *rna_MetaElement_path(PointerRNA *ptr) +static char *rna_MetaElement_path(const PointerRNA *ptr) { - MetaBall *mb = (MetaBall *)ptr->owner_id; - MetaElem *ml = ptr->data; + const MetaBall *mb = (MetaBall *)ptr->owner_id; + const MetaElem *ml = ptr->data; int index = -1; if (mb->editelems) { diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 456f774648a..8591d4abd63 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -47,7 +47,7 @@ #include "MOD_nodes.h" const EnumPropertyItem rna_enum_object_modifier_type_items[] = { - {0, "", 0, N_("Modify"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Modify"), NULL), {eModifierType_DataTransfer, "DATA_TRANSFER", ICON_MOD_DATA_TRANSFER, @@ -99,7 +99,8 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = { ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Proximity", "Set the vertex group weights based on the distance to another target object"}, - {0, "", 0, N_("Generate"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Generate"), NULL), {eModifierType_Array, "ARRAY", ICON_MOD_ARRAY, @@ -130,7 +131,7 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = { ICON_MOD_EDGESPLIT, "Edge Split", "Split away joined faces at the edges"}, - {eModifierType_Nodes, "NODES", ICON_NODETREE, "Geometry Nodes", ""}, + {eModifierType_Nodes, "NODES", ICON_GEOMETRY_NODES, "Geometry Nodes", ""}, {eModifierType_Mask, "MASK", ICON_MOD_MASK, @@ -193,7 +194,8 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = { ICON_MOD_WIREFRAME, "Wireframe", "Convert faces into thickened edges"}, - {0, "", 0, N_("Deform"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Deform"), NULL), {eModifierType_Armature, "ARMATURE", ICON_MOD_ARMATURE, @@ -272,7 +274,8 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = { ICON_VOLUME_DATA, "Volume Displace", "Deform volume based on noise or other vector fields"}, /* TODO: Use correct icon. */ - {0, "", 0, N_("Physics"), ""}, + + RNA_ENUM_ITEM_HEADING(N_("Physics"), NULL), {eModifierType_Cloth, "CLOTH", ICON_MOD_CLOTH, "Cloth", ""}, {eModifierType_Collision, "COLLISION", ICON_MOD_PHYSICS, "Collision", ""}, {eModifierType_DynamicPaint, "DYNAMIC_PAINT", ICON_MOD_DYNAMICPAINT, "Dynamic Paint", ""}, @@ -722,9 +725,9 @@ static void rna_Modifier_name_set(PointerRNA *ptr, const char *value) BKE_animdata_fix_paths_rename_all(NULL, "modifiers", oldname, md->name); } -static char *rna_Modifier_path(PointerRNA *ptr) +static char *rna_Modifier_path(const PointerRNA *ptr) { - ModifierData *md = ptr->data; + const ModifierData *md = ptr->data; char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); @@ -947,10 +950,10 @@ static void rna_HookModifier_subtarget_set(PointerRNA *ptr, const char *value) BKE_object_modifier_hook_reset(owner, hmd); } -static int rna_HookModifier_vertex_indices_get_length(PointerRNA *ptr, +static int rna_HookModifier_vertex_indices_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { - HookModifierData *hmd = ptr->data; + const HookModifierData *hmd = ptr->data; int indexar_num = hmd->indexar ? hmd->indexar_num : 0; return (length[0] = indexar_num); } @@ -1366,10 +1369,9 @@ static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf( Object *ob_src = dtmd->ob_source; if (ob_src) { - AttributeDomain domain = STREQ(RNA_property_identifier(prop), - "layers_vcol_vert_select_src") ? - ATTR_DOMAIN_POINT : - ATTR_DOMAIN_CORNER; + eAttrDomain domain = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_src") ? + ATTR_DOMAIN_POINT : + ATTR_DOMAIN_CORNER; Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); @@ -1389,7 +1391,7 @@ static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf( cdata = &me_eval->ldata; } - CustomDataType types[2] = {CD_PROP_COLOR, CD_PROP_BYTE_COLOR}; + eCustomDataType types[2] = {CD_PROP_COLOR, CD_PROP_BYTE_COLOR}; int idx = 0; for (int i = 0; i < 2; i++) { @@ -1489,7 +1491,7 @@ static const EnumPropertyItem *rna_DataTransferModifier_layers_select_dst_itemf( Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */ if (ob_dst && ob_dst->data) { - CustomDataType types[2] = {CD_PROP_COLOR, CD_PROP_BYTE_COLOR}; + eCustomDataType types[2] = {CD_PROP_COLOR, CD_PROP_BYTE_COLOR}; Mesh *me_dst = ob_dst->data; CustomData *cdata = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ? @@ -6991,7 +6993,7 @@ static void rna_def_modifier_nodes(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Nodes Modifier", ""); RNA_def_struct_sdna(srna, "NodesModifierData"); RNA_def_struct_idprops_func(srna, "rna_NodesModifier_properties"); - RNA_def_struct_ui_icon(srna, ICON_NODETREE); + RNA_def_struct_ui_icon(srna, ICON_GEOMETRY_NODES); RNA_define_lib_overridable(true); diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index f8a35246581..978a94ca7b0 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -23,6 +23,49 @@ #include "WM_api.h" #include "WM_types.h" +/* enum defines exported for rna_animation.c */ +const EnumPropertyItem rna_enum_nla_mode_blend_items[] = { + {NLASTRIP_MODE_REPLACE, + "REPLACE", + 0, + "Replace", + "The strip values replace the accumulated results by amount specified by influence"}, + {NLASTRIP_MODE_COMBINE, + "COMBINE", + 0, + "Combine", + "The strip values are combined with accumulated results by appropriately using addition, " + "multiplication, or quaternion math, based on channel type"}, + RNA_ENUM_ITEM_SEPR, + {NLASTRIP_MODE_ADD, + "ADD", + 0, + "Add", + "Weighted result of strip is added to the accumulated results"}, + {NLASTRIP_MODE_SUBTRACT, + "SUBTRACT", + 0, + "Subtract", + "Weighted result of strip is removed from the accumulated results"}, + {NLASTRIP_MODE_MULTIPLY, + "MULTIPLY", + 0, + "Multiply", + "Weighted result of strip is multiplied with the accumulated results"}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_nla_mode_extend_items[] = { + {NLASTRIP_EXTEND_NOTHING, "NOTHING", 0, "Nothing", "Strip has no influence past its extents"}, + {NLASTRIP_EXTEND_HOLD, + "HOLD", + 0, + "Hold", + "Hold the first frame if no previous strips in track, and always hold last frame"}, + {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame"}, + {0, NULL, 0, NULL, NULL}, +}; + #ifdef RNA_RUNTIME # include <math.h> @@ -57,7 +100,7 @@ static void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value) } } -static char *rna_NlaStrip_path(PointerRNA *ptr) +static char *rna_NlaStrip_path(const PointerRNA *ptr) { NlaStrip *strip = (NlaStrip *)ptr->data; AnimData *adt = BKE_animdata_from_id(ptr->owner_id); @@ -494,49 +537,6 @@ static void rna_NlaTrack_solo_set(PointerRNA *ptr, bool value) #else -/* enum defines exported for rna_animation.c */ -const EnumPropertyItem rna_enum_nla_mode_blend_items[] = { - {NLASTRIP_MODE_REPLACE, - "REPLACE", - 0, - "Replace", - "The strip values replace the accumulated results by amount specified by influence"}, - {NLASTRIP_MODE_COMBINE, - "COMBINE", - 0, - "Combine", - "The strip values are combined with accumulated results by appropriately using addition, " - "multiplication, or quaternion math, based on channel type"}, - {0, "", 0, NULL, NULL}, - {NLASTRIP_MODE_ADD, - "ADD", - 0, - "Add", - "Weighted result of strip is added to the accumulated results"}, - {NLASTRIP_MODE_SUBTRACT, - "SUBTRACT", - 0, - "Subtract", - "Weighted result of strip is removed from the accumulated results"}, - {NLASTRIP_MODE_MULTIPLY, - "MULTIPLY", - 0, - "Multiply", - "Weighted result of strip is multiplied with the accumulated results"}, - {0, NULL, 0, NULL, NULL}, -}; - -const EnumPropertyItem rna_enum_nla_mode_extend_items[] = { - {NLASTRIP_EXTEND_NOTHING, "NOTHING", 0, "Nothing", "Strip has no influence past its extents"}, - {NLASTRIP_EXTEND_HOLD, - "HOLD", - 0, - "Hold", - "Hold the first frame if no previous strips in track, and always hold last frame"}, - {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame"}, - {0, NULL, 0, NULL, NULL}, -}; - static void rna_def_strip_fcurves(BlenderRNA *brna, PropertyRNA *cprop) { StructRNA *srna; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index eaf2142495e..841c250df4c 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -164,20 +164,20 @@ static const EnumPropertyItem rna_enum_vector_rotate_type_items[] = { }; const EnumPropertyItem rna_enum_node_math_items[] = { - {0, "", 0, N_("Functions"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Functions"), NULL), {NODE_MATH_ADD, "ADD", 0, "Add", "A + B"}, {NODE_MATH_SUBTRACT, "SUBTRACT", 0, "Subtract", "A - B"}, {NODE_MATH_MULTIPLY, "MULTIPLY", 0, "Multiply", "A * B"}, {NODE_MATH_DIVIDE, "DIVIDE", 0, "Divide", "A / B"}, {NODE_MATH_MULTIPLY_ADD, "MULTIPLY_ADD", 0, "Multiply Add", "A * B + C"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_MATH_POWER, "POWER", 0, "Power", "A power B"}, {NODE_MATH_LOGARITHM, "LOGARITHM", 0, "Logarithm", "Logarithm A base B"}, {NODE_MATH_SQRT, "SQRT", 0, "Square Root", "Square root of A"}, {NODE_MATH_INV_SQRT, "INVERSE_SQRT", 0, "Inverse Square Root", "1 / Square root of A"}, {NODE_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Magnitude of A"}, {NODE_MATH_EXPONENT, "EXPONENT", 0, "Exponent", "exp(A)"}, - {0, "", 0, N_("Comparison"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Comparison"), NULL), {NODE_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "The minimum from A and B"}, {NODE_MATH_MAXIMUM, "MAXIMUM", 0, "Maximum", "The maximum from A and B"}, {NODE_MATH_LESS_THAN, "LESS_THAN", 0, "Less Than", "1 if A < B else 0"}, @@ -194,7 +194,7 @@ const EnumPropertyItem rna_enum_node_math_items[] = { 0, "Smooth Maximum", "The maximum from A and B with smoothing C"}, - {0, "", 0, N_("Rounding"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Rounding"), NULL), {NODE_MATH_ROUND, "ROUND", 0, @@ -203,7 +203,7 @@ const EnumPropertyItem rna_enum_node_math_items[] = { {NODE_MATH_FLOOR, "FLOOR", 0, "Floor", "The largest integer smaller than or equal A"}, {NODE_MATH_CEIL, "CEIL", 0, "Ceil", "The smallest integer greater than or equal A"}, {NODE_MATH_TRUNC, "TRUNC", 0, "Truncate", "The integer part of A, removing fractional digits"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_MATH_FRACTION, "FRACT", 0, "Fraction", "The fraction part of A"}, {NODE_MATH_MODULO, "MODULO", 0, "Modulo", "Modulo using fmod(A,B)"}, {NODE_MATH_WRAP, "WRAP", 0, "Wrap", "Wrap value to range, wrap(A,B)"}, @@ -213,20 +213,20 @@ const EnumPropertyItem rna_enum_node_math_items[] = { 0, "Ping-Pong", "Wraps a value and reverses every other cycle (A,B)"}, - {0, "", 0, N_("Trigonometric"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Trigonometric"), NULL), {NODE_MATH_SINE, "SINE", 0, "Sine", "sin(A)"}, {NODE_MATH_COSINE, "COSINE", 0, "Cosine", "cos(A)"}, {NODE_MATH_TANGENT, "TANGENT", 0, "Tangent", "tan(A)"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_MATH_ARCSINE, "ARCSINE", 0, "Arcsine", "arcsin(A)"}, {NODE_MATH_ARCCOSINE, "ARCCOSINE", 0, "Arccosine", "arccos(A)"}, {NODE_MATH_ARCTANGENT, "ARCTANGENT", 0, "Arctangent", "arctan(A)"}, {NODE_MATH_ARCTAN2, "ARCTAN2", 0, "Arctan2", "The signed angle arctan(A / B)"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_MATH_SINH, "SINH", 0, "Hyperbolic Sine", "sinh(A)"}, {NODE_MATH_COSH, "COSH", 0, "Hyperbolic Cosine", "cosh(A)"}, {NODE_MATH_TANH, "TANH", 0, "Hyperbolic Tangent", "tanh(A)"}, - {0, "", 0, N_("Conversion"), ""}, + RNA_ENUM_ITEM_HEADING(N_("Conversion"), NULL), {NODE_MATH_RADIANS, "RADIANS", 0, "To Radians", "Convert from degrees to radians"}, {NODE_MATH_DEGREES, "DEGREES", 0, "To Degrees", "Convert from radians to degrees"}, {0, NULL, 0, NULL, NULL}, @@ -238,7 +238,7 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = { {NODE_VECTOR_MATH_MULTIPLY, "MULTIPLY", 0, "Multiply", "Entry-wise multiply"}, {NODE_VECTOR_MATH_DIVIDE, "DIVIDE", 0, "Divide", "Entry-wise divide"}, {NODE_VECTOR_MATH_MULTIPLY_ADD, "MULTIPLY_ADD", 0, "Multiply Add", "A * B + C"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_VECTOR_MATH_CROSS_PRODUCT, "CROSS_PRODUCT", 0, "Cross Product", "A cross B"}, {NODE_VECTOR_MATH_PROJECT, "PROJECT", 0, "Project", "Project A onto B"}, {NODE_VECTOR_MATH_REFLECT, @@ -259,12 +259,12 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = { "Orients a vector A to point away from a surface B as defined by its normal C. " "Returns (dot(B, C) < 0) ? A : -A"}, {NODE_VECTOR_MATH_DOT_PRODUCT, "DOT_PRODUCT", 0, "Dot Product", "A dot B"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_VECTOR_MATH_DISTANCE, "DISTANCE", 0, "Distance", "Distance between A and B"}, {NODE_VECTOR_MATH_LENGTH, "LENGTH", 0, "Length", "Length of A"}, {NODE_VECTOR_MATH_SCALE, "SCALE", 0, "Scale", "A multiplied by Scale"}, {NODE_VECTOR_MATH_NORMALIZE, "NORMALIZE", 0, "Normalize", "Normalize A"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_VECTOR_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Entry-wise absolute"}, {NODE_VECTOR_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "Entry-wise minimum"}, {NODE_VECTOR_MATH_MAXIMUM, "MAXIMUM", 0, "Maximum", "Entry-wise maximum"}, @@ -278,7 +278,7 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = { 0, "Snap", "Round A to the largest integer multiple of B less than or equal A"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_VECTOR_MATH_SINE, "SINE", 0, "Sine", "Entry-wise sin(A)"}, {NODE_VECTOR_MATH_COSINE, "COSINE", 0, "Cosine", "Entry-wise cos(A)"}, {NODE_VECTOR_MATH_TANGENT, "TANGENT", 0, "Tangent", "Entry-wise tan(A)"}, @@ -289,7 +289,7 @@ const EnumPropertyItem rna_enum_node_boolean_math_items[] = { {NODE_BOOLEAN_MATH_AND, "AND", 0, "And", "True when both inputs are true"}, {NODE_BOOLEAN_MATH_OR, "OR", 0, "Or", "True when at least one input is true"}, {NODE_BOOLEAN_MATH_NOT, "NOT", 0, "Not", "Opposite of the input"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_BOOLEAN_MATH_NAND, "NAND", 0, "Not And", "True when at least one input is false"}, {NODE_BOOLEAN_MATH_NOR, "NOR", 0, "Nor", "True when both inputs are false"}, {NODE_BOOLEAN_MATH_XNOR, @@ -302,7 +302,7 @@ const EnumPropertyItem rna_enum_node_boolean_math_items[] = { 0, "Not Equal", "True when both inputs are different (exclusive or)"}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NODE_BOOLEAN_MATH_IMPLY, "IMPLY", 0, @@ -443,9 +443,9 @@ const EnumPropertyItem rna_enum_node_clamp_items[] = { static const EnumPropertyItem rna_enum_node_tex_dimensions_items[] = { {1, "1D", 0, "1D", "Use the scalar value W as input"}, - {2, "2D", 0, "2D", "Use the 2D vector (x, y) as input. The z component is ignored"}, - {3, "3D", 0, "3D", "Use the 3D vector (x, y, z) as input"}, - {4, "4D", 0, "4D", "Use the 4D vector (x, y, z, w) as input"}, + {2, "2D", 0, "2D", "Use the 2D vector (X, Y) as input. The Z component is ignored"}, + {3, "3D", 0, "3D", "Use the 3D vector (X, Y, Z) as input"}, + {4, "4D", 0, "4D", "Use the 4D vector (X, Y, Z, W) as input"}, {0, NULL, 0, NULL, NULL}, }; @@ -489,6 +489,13 @@ static const EnumPropertyItem rna_node_geometry_curve_handle_side_items[] = { {GEO_NODE_CURVE_HANDLE_RIGHT, "RIGHT", ICON_NONE, "Right", "Use the right handles"}, {0, NULL, 0, NULL, NULL}}; +static const EnumPropertyItem rna_node_combsep_color_items[] = { + {NODE_COMBSEP_COLOR_RGB, "RGB", ICON_NONE, "RGB", "Use RGB color processing"}, + {NODE_COMBSEP_COLOR_HSV, "HSV", ICON_NONE, "HSV", "Use HSV color processing"}, + {NODE_COMBSEP_COLOR_HSL, "HSL", ICON_NONE, "HSL", "Use HSL color processing"}, + {0, NULL, 0, NULL, NULL}, +}; + #ifndef RNA_RUNTIME static const EnumPropertyItem node_sampler_type_items[] = { {0, "NEAREST", 0, "Nearest", ""}, @@ -1591,16 +1598,16 @@ static StructRNA *rna_Node_refine(struct PointerRNA *ptr) } } -static char *rna_Node_path(PointerRNA *ptr) +static char *rna_Node_path(const PointerRNA *ptr) { - bNode *node = (bNode *)ptr->data; + const bNode *node = (bNode *)ptr->data; char name_esc[sizeof(node->name) * 2]; BLI_str_escape(name_esc, node->name, sizeof(name_esc)); return BLI_sprintfN("nodes[\"%s\"]", name_esc); } -char *rna_Node_ImageUser_path(PointerRNA *ptr) +char *rna_Node_ImageUser_path(const PointerRNA *ptr) { bNodeTree *ntree = (bNodeTree *)ptr->owner_id; bNode *node; @@ -2749,7 +2756,7 @@ static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr) } } -static char *rna_NodeSocket_path(PointerRNA *ptr) +static char *rna_NodeSocket_path(const PointerRNA *ptr) { bNodeTree *ntree = (bNodeTree *)ptr->owner_id; bNodeSocket *sock = (bNodeSocket *)ptr->data; @@ -3063,10 +3070,10 @@ static StructRNA *rna_NodeSocketInterface_refine(PointerRNA *ptr) } } -static char *rna_NodeSocketInterface_path(PointerRNA *ptr) +static char *rna_NodeSocketInterface_path(const PointerRNA *ptr) { - bNodeTree *ntree = (bNodeTree *)ptr->owner_id; - bNodeSocket *sock = (bNodeSocket *)ptr->data; + const bNodeTree *ntree = (bNodeTree *)ptr->owner_id; + const bNodeSocket *sock = (bNodeSocket *)ptr->data; int socketindex; socketindex = BLI_findindex(&ntree->inputs, sock); @@ -4516,9 +4523,9 @@ static const EnumPropertyItem prop_view_layer_items[] = { }; static const EnumPropertyItem prop_tri_channel_items[] = { - {1, "R", 0, "R", ""}, - {2, "G", 0, "G", ""}, - {3, "B", 0, "B", ""}, + {1, "R", 0, "R", "Red"}, + {2, "G", 0, "G", "Green"}, + {3, "B", 0, "B", "Blue"}, {0, NULL, 0, NULL, NULL}, }; @@ -4537,46 +4544,81 @@ static const EnumPropertyItem node_ycc_items[] = { }; static const EnumPropertyItem node_glossy_items[] = { - {SHD_GLOSSY_SHARP, "SHARP", 0, "Sharp", ""}, + {SHD_GLOSSY_SHARP, + "SHARP", + 0, + "Sharp", + "Results in perfectly sharp reflections like a mirror. The Roughness value is not used"}, {SHD_GLOSSY_BECKMANN, "BECKMANN", 0, "Beckmann", ""}, {SHD_GLOSSY_GGX, "GGX", 0, "GGX", ""}, {SHD_GLOSSY_ASHIKHMIN_SHIRLEY, "ASHIKHMIN_SHIRLEY", 0, "Ashikhmin-Shirley", ""}, - {SHD_GLOSSY_MULTI_GGX, "MULTI_GGX", 0, "Multiscatter GGX", ""}, + {SHD_GLOSSY_MULTI_GGX, + "MULTI_GGX", + 0, + "Multiscatter GGX", + "Slower than GGX but gives a more energy conserving results, which would otherwise be " + "visible as excessive darkening"}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem node_anisotropic_items[] = { {SHD_GLOSSY_BECKMANN, "BECKMANN", 0, "Beckmann", ""}, {SHD_GLOSSY_GGX, "GGX", 0, "GGX", ""}, - {SHD_GLOSSY_MULTI_GGX, "MULTI_GGX", 0, "Multiscatter GGX", ""}, + {SHD_GLOSSY_MULTI_GGX, + "MULTI_GGX", + 0, + "Multiscatter GGX", + "Slower than GGX but gives a more energy conserving results, which would otherwise be " + "visible as excessive darkening"}, {SHD_GLOSSY_ASHIKHMIN_SHIRLEY, "ASHIKHMIN_SHIRLEY", 0, "Ashikhmin-Shirley", ""}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem node_glass_items[] = { - {SHD_GLOSSY_SHARP, "SHARP", 0, "Sharp", ""}, + {SHD_GLOSSY_SHARP, + "SHARP", + 0, + "Sharp", + "Results in perfectly sharp reflections like a mirror. The Roughness value is not used"}, {SHD_GLOSSY_BECKMANN, "BECKMANN", 0, "Beckmann", ""}, {SHD_GLOSSY_GGX, "GGX", 0, "GGX", ""}, - {SHD_GLOSSY_MULTI_GGX, "MULTI_GGX", 0, "Multiscatter GGX", ""}, + {SHD_GLOSSY_MULTI_GGX, + "MULTI_GGX", + 0, + "Multiscatter GGX", + "Slower than GGX but gives a more energy conserving results, which would otherwise be " + "visible as excessive darkening"}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem node_refraction_items[] = { - {SHD_GLOSSY_SHARP, "SHARP", 0, "Sharp", ""}, + {SHD_GLOSSY_SHARP, + "SHARP", + 0, + "Sharp", + "Results in perfectly sharp reflections like a mirror. The Roughness value is not used"}, {SHD_GLOSSY_BECKMANN, "BECKMANN", 0, "Beckmann", ""}, {SHD_GLOSSY_GGX, "GGX", 0, "GGX", ""}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem node_toon_items[] = { - {SHD_TOON_DIFFUSE, "DIFFUSE", 0, "Diffuse", ""}, - {SHD_TOON_GLOSSY, "GLOSSY", 0, "Glossy", ""}, + {SHD_TOON_DIFFUSE, "DIFFUSE", 0, "Diffuse", "Use diffuse BSDF"}, + {SHD_TOON_GLOSSY, "GLOSSY", 0, "Glossy", "Use glossy BSDF"}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem node_hair_items[] = { - {SHD_HAIR_REFLECTION, "Reflection", 0, "Reflection", ""}, - {SHD_HAIR_TRANSMISSION, "Transmission", 0, "Transmission", ""}, + {SHD_HAIR_REFLECTION, + "Reflection", + 0, + "Reflection", + "The light that bounces off the surface of the hair"}, + {SHD_HAIR_TRANSMISSION, + "Transmission", + 0, + "Transmission", + "The light that passes through the hair and exits on the other side"}, {0, NULL, 0, NULL, NULL}, }; @@ -4616,7 +4658,12 @@ static EnumPropertyItem node_ies_mode_items[] = { static const EnumPropertyItem node_principled_distribution_items[] = { {SHD_GLOSSY_GGX, "GGX", 0, "GGX", ""}, - {SHD_GLOSSY_MULTI_GGX, "MULTI_GGX", 0, "Multiscatter GGX", ""}, + {SHD_GLOSSY_MULTI_GGX, + "MULTI_GGX", + 0, + "Multiscatter GGX", + "Slower than GGX but gives a more energy conserving results, which would otherwise be " + "visible as excessive darkening"}, {0, NULL, 0, NULL, NULL}, }; @@ -5050,6 +5097,18 @@ static void def_fn_input_string(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } +static void def_fn_combsep_color(StructRNA *srna) +{ + PropertyRNA *prop; + + RNA_def_struct_sdna_from(srna, "NodeCombSepColor", "storage"); + + prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, rna_node_combsep_color_items); + RNA_def_property_ui_text(prop, "Mode", "Mode of color processing"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); +} + /* -- Shader Nodes ---------------------------------------------------------- */ static void def_sh_output(StructRNA *srna) @@ -5401,6 +5460,17 @@ static void def_sh_tex_image(StructRNA *srna) RNA_def_property_update(prop, 0, "rna_Node_update"); } +static void def_tex_combsep_color(StructRNA *srna) +{ + PropertyRNA *prop; + + prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, rna_node_combsep_color_items); + RNA_def_property_ui_text(prop, "Mode", "Mode of color processing"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); +} + static void def_geo_image_texture(StructRNA *srna) { static const EnumPropertyItem fn_tex_prop_interpolation_items[] = { @@ -5487,8 +5557,7 @@ static void def_sh_tex_noise(StructRNA *srna) prop = RNA_def_property(srna, "noise_dimensions", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "dimensions"); RNA_def_property_enum_items(prop, rna_enum_node_tex_dimensions_items); - RNA_def_property_ui_text( - prop, "Dimensions", "The dimensions of the space to evaluate the noise in"); + RNA_def_property_ui_text(prop, "Dimensions", "Number of dimensions to output noise for"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); } @@ -5551,11 +5620,28 @@ static void def_sh_tex_magic(StructRNA *srna) static void def_sh_tex_musgrave(StructRNA *srna) { static const EnumPropertyItem prop_musgrave_type[] = { - {SHD_MUSGRAVE_MULTIFRACTAL, "MULTIFRACTAL", 0, "Multifractal", ""}, - {SHD_MUSGRAVE_RIDGED_MULTIFRACTAL, "RIDGED_MULTIFRACTAL", 0, "Ridged Multifractal", ""}, - {SHD_MUSGRAVE_HYBRID_MULTIFRACTAL, "HYBRID_MULTIFRACTAL", 0, "Hybrid Multifractal", ""}, - {SHD_MUSGRAVE_FBM, "FBM", 0, "fBM", ""}, - {SHD_MUSGRAVE_HETERO_TERRAIN, "HETERO_TERRAIN", 0, "Hetero Terrain", ""}, + {SHD_MUSGRAVE_MULTIFRACTAL, + "MULTIFRACTAL", + 0, + "Multifractal", + "More uneven result (varies with location), more similar to a real terrain"}, + {SHD_MUSGRAVE_RIDGED_MULTIFRACTAL, + "RIDGED_MULTIFRACTAL", + 0, + "Ridged Multifractal", + "Create sharp peaks"}, + {SHD_MUSGRAVE_HYBRID_MULTIFRACTAL, + "HYBRID_MULTIFRACTAL", + 0, + "Hybrid Multifractal", + "Create peaks and valleys with different roughness values"}, + {SHD_MUSGRAVE_FBM, "FBM", 0, "fBM", "Produce an unnatural homogeneous and isotropic result"}, + {SHD_MUSGRAVE_HETERO_TERRAIN, + "HETERO_TERRAIN", + 0, + "Hetero Terrain", + "Similar to Hybrid Multifractal creates a heterogeneous terrain, but with the likeness of " + "river channels"}, {0, NULL, 0, NULL, NULL}, }; @@ -5567,13 +5653,13 @@ static void def_sh_tex_musgrave(StructRNA *srna) prop = RNA_def_property(srna, "musgrave_dimensions", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "dimensions"); RNA_def_property_enum_items(prop, rna_enum_node_tex_dimensions_items); - RNA_def_property_ui_text(prop, "Dimensions", ""); + RNA_def_property_ui_text(prop, "Dimensions", "Number of dimensions to output noise for"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "musgrave_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "musgrave_type"); RNA_def_property_enum_items(prop, prop_musgrave_type); - RNA_def_property_ui_text(prop, "Type", ""); + RNA_def_property_ui_text(prop, "Type", "Type of the Musgrave texture"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); } @@ -5622,19 +5708,21 @@ static void def_sh_tex_voronoi(StructRNA *srna) prop = RNA_def_property(srna, "voronoi_dimensions", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "dimensions"); RNA_def_property_enum_items(prop, rna_enum_node_tex_dimensions_items); - RNA_def_property_ui_text(prop, "Dimensions", ""); + RNA_def_property_ui_text(prop, "Dimensions", "Number of dimensions to output noise for"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "distance", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "distance"); RNA_def_property_enum_items(prop, prop_distance_items); - RNA_def_property_ui_text(prop, "Distance Metric", ""); + RNA_def_property_ui_text( + prop, "Distance Metric", "The distance metric used to compute the texture"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "feature", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "feature"); RNA_def_property_enum_items(prop, prop_feature_items); - RNA_def_property_ui_text(prop, "Feature Output", ""); + RNA_def_property_ui_text( + prop, "Feature Output", "The Voronoi feature that the node will compute"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); } @@ -5710,8 +5798,7 @@ static void def_sh_tex_white_noise(StructRNA *srna) prop = RNA_def_property(srna, "noise_dimensions", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, rna_enum_node_tex_dimensions_items); - RNA_def_property_ui_text( - prop, "Dimensions", "The dimensions of the space to evaluate the noise in"); + RNA_def_property_ui_text(prop, "Dimensions", "Number of dimensions to output noise for"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update"); } @@ -5953,7 +6040,7 @@ static void def_glossy(StructRNA *srna) prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_glossy_items); - RNA_def_property_ui_text(prop, "Distribution", ""); + RNA_def_property_ui_text(prop, "Distribution", "Light scattering distribution on rough surface"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -5964,7 +6051,7 @@ static void def_glass(StructRNA *srna) prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_glass_items); - RNA_def_property_ui_text(prop, "Distribution", ""); + RNA_def_property_ui_text(prop, "Distribution", "Light scattering distribution on rough surface"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -5975,7 +6062,7 @@ static void def_principled(StructRNA *srna) prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_principled_distribution_items); - RNA_def_property_ui_text(prop, "Distribution", ""); + RNA_def_property_ui_text(prop, "Distribution", "Light scattering distribution on rough surface"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "subsurface_method", PROP_ENUM, PROP_NONE); @@ -5993,7 +6080,7 @@ static void def_refraction(StructRNA *srna) prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_refraction_items); - RNA_def_property_ui_text(prop, "Distribution", ""); + RNA_def_property_ui_text(prop, "Distribution", "Light scattering distribution on rough surface"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -6004,7 +6091,7 @@ static void def_anisotropic(StructRNA *srna) prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_anisotropic_items); - RNA_def_property_ui_text(prop, "Distribution", ""); + RNA_def_property_ui_text(prop, "Distribution", "Light scattering distribution on rough surface"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -6015,7 +6102,7 @@ static void def_toon(StructRNA *srna) prop = RNA_def_property(srna, "component", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_toon_items); - RNA_def_property_ui_text(prop, "Component", ""); + RNA_def_property_ui_text(prop, "Component", "Toon BSDF component to use"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -6037,7 +6124,7 @@ static void def_hair(StructRNA *srna) prop = RNA_def_property(srna, "component", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "custom1"); RNA_def_property_enum_items(prop, node_hair_items); - RNA_def_property_ui_text(prop, "Component", ""); + RNA_def_property_ui_text(prop, "Component", "Hair BSDF component to use"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -6308,6 +6395,25 @@ static void def_sh_output_aov(StructRNA *srna) RNA_def_struct_sdna_from(srna, "bNode", NULL); } +static void def_sh_combsep_color(StructRNA *srna) +{ + static const EnumPropertyItem type_items[] = { + {NODE_COMBSEP_COLOR_RGB, "RGB", ICON_NONE, "RGB", "Use RGB color processing"}, + {NODE_COMBSEP_COLOR_HSV, "HSV", ICON_NONE, "HSV", "Use HSV color processing"}, + {NODE_COMBSEP_COLOR_HSL, "HSL", ICON_NONE, "HSL", "Use HSL color processing"}, + {0, NULL, 0, NULL, NULL}, + }; + + PropertyRNA *prop; + + RNA_def_struct_sdna_from(srna, "NodeCombSepColor", "storage"); + + prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, type_items); + RNA_def_property_ui_text(prop, "Mode", "Mode of color processing"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); +} + static void def_sh_script(StructRNA *srna) { PropertyRNA *prop; @@ -8071,6 +8177,32 @@ static void def_cmp_ycc(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } +static void def_cmp_combsep_color(StructRNA *srna) +{ + static const EnumPropertyItem mode_items[] = { + {CMP_NODE_COMBSEP_COLOR_RGB, "RGB", ICON_NONE, "RGB", "Use RGB color processing"}, + {CMP_NODE_COMBSEP_COLOR_HSV, "HSV", ICON_NONE, "HSV", "Use HSV color processing"}, + {CMP_NODE_COMBSEP_COLOR_HSL, "HSL", ICON_NONE, "HSL", "Use HSL color processing"}, + {CMP_NODE_COMBSEP_COLOR_YCC, "YCC", ICON_NONE, "YCbCr", "Use YCbCr color processing"}, + {CMP_NODE_COMBSEP_COLOR_YUV, "YUV", ICON_NONE, "YUV", "Use YUV color processing"}, + {0, NULL, 0, NULL, NULL}, + }; + + PropertyRNA *prop; + + RNA_def_struct_sdna_from(srna, "NodeCMPCombSepColor", "storage"); + + prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, mode_items); + RNA_def_property_ui_text(prop, "Mode", "Mode of color processing"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); + + prop = RNA_def_property(srna, "ycc_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, node_ycc_items); + RNA_def_property_ui_text(prop, "Color Space", "Color space used for YCbCrA processing"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); +} + static void def_cmp_movieclip(StructRNA *srna) { PropertyRNA *prop; @@ -12294,7 +12426,7 @@ static void rna_def_nodetree(BlenderRNA *brna) {NTREE_SHADER, "SHADER", ICON_MATERIAL, "Shader", "Shader nodes"}, {NTREE_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture nodes"}, {NTREE_COMPOSIT, "COMPOSITING", ICON_RENDERLAYERS, "Compositing", "Compositing nodes"}, - {NTREE_GEOMETRY, "GEOMETRY", ICON_NODETREE, "Geometry", "Geometry nodes"}, + {NTREE_GEOMETRY, "GEOMETRY", ICON_GEOMETRY_NODES, "Geometry", "Geometry nodes"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 98fc6633f78..56652a35ecb 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -149,7 +149,7 @@ const EnumPropertyItem rna_enum_object_gpencil_type_items[] = { {GP_EMPTY, "EMPTY", ICON_EMPTY_AXIS, "Blank", "Create an empty grease pencil object"}, {GP_STROKE, "STROKE", ICON_STROKE, "Stroke", "Create a simple stroke with basic colors"}, {GP_MONKEY, "MONKEY", ICON_MONKEY, "Monkey", "Construct a Suzanne grease pencil object"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {GP_LRT_SCENE, "LRT_SCENE", ICON_SCENE_DATA, @@ -256,17 +256,17 @@ const EnumPropertyItem rna_enum_object_type_items[] = { {OB_POINTCLOUD, "POINTCLOUD", ICON_OUTLINER_OB_POINTCLOUD, "Point Cloud", ""}, {OB_VOLUME, "VOLUME", ICON_OUTLINER_OB_VOLUME, "Volume", ""}, {OB_GPENCIL, "GPENCIL", ICON_OUTLINER_OB_GREASEPENCIL, "Grease Pencil", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {OB_ARMATURE, "ARMATURE", ICON_OUTLINER_OB_ARMATURE, "Armature", ""}, {OB_LATTICE, "LATTICE", ICON_OUTLINER_OB_LATTICE, "Lattice", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {OB_EMPTY, "EMPTY", ICON_OUTLINER_OB_EMPTY, "Empty", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {OB_LAMP, "LIGHT", ICON_OUTLINER_OB_LIGHT, "Light", ""}, {OB_LIGHTPROBE, "LIGHT_PROBE", ICON_OUTLINER_OB_LIGHTPROBE, "Light Probe", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {OB_CAMERA, "CAMERA", ICON_OUTLINER_OB_CAMERA, "Camera", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {OB_SPEAKER, "SPEAKER", ICON_OUTLINER_OB_SPEAKER, "Speaker", ""}, {0, NULL, 0, NULL, NULL}, }; @@ -1320,12 +1320,17 @@ static int rna_Object_rotation_4d_editable(PointerRNA *ptr, int index) return PROP_EDITABLE; } -static int rna_MaterialSlot_index(PointerRNA *ptr) +static int rna_MaterialSlot_index(const PointerRNA *ptr) { /* There is an offset, so that `ptr->data` is not null and unique across IDs. */ return (uintptr_t)ptr->data - (uintptr_t)ptr->owner_id; } +static int rna_MaterialSlot_index_get(PointerRNA *ptr) +{ + return rna_MaterialSlot_index(ptr); +} + static int rna_MaterialSlot_material_editable(PointerRNA *ptr, const char **UNUSED(r_info)) { Object *ob = (Object *)ptr->owner_id; @@ -1451,7 +1456,7 @@ static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr) DEG_relations_tag_update(bmain); } -static char *rna_MaterialSlot_path(PointerRNA *ptr) +static char *rna_MaterialSlot_path(const PointerRNA *ptr) { int index = rna_MaterialSlot_index(ptr); return BLI_sprintfN("material_slots[%d]", index); @@ -1504,7 +1509,7 @@ static PointerRNA rna_Object_display_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_ObjectDisplay, ptr->data); } -static char *rna_ObjectDisplay_path(PointerRNA *UNUSED(ptr)) +static char *rna_ObjectDisplay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("display"); } @@ -2484,7 +2489,7 @@ static void rna_def_material_slot(BlenderRNA *brna) prop = RNA_def_property(srna, "slot_index", PROP_INT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_int_funcs(prop, "rna_MaterialSlot_index", NULL, NULL); + RNA_def_property_int_funcs(prop, "rna_MaterialSlot_index_get", NULL, NULL); prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); RNA_def_property_string_funcs( diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index f92ea8df459..2ed539aa511 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -130,7 +130,7 @@ static bool rna_Cache_get_valid_owner_ID(PointerRNA *ptr, Object **ob, Scene **s return (*ob != NULL || *scene != NULL); } -static char *rna_PointCache_path(PointerRNA *ptr) +static char *rna_PointCache_path(const PointerRNA *ptr) { ModifierData *md; Object *ob = (Object *)ptr->owner_id; @@ -443,7 +443,7 @@ int rna_Cache_info_length(PointerRNA *ptr) return (int)strlen(cache->info); } -static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_CollisionSettings_path(const PointerRNA *UNUSED(ptr)) { /* both methods work ok, but return the shorter path */ # if 0 @@ -619,17 +619,17 @@ static void rna_SoftBodySettings_spring_vgroup_set(PointerRNA *ptr, const char * rna_object_vgroup_name_set(ptr, value, sb->namedVG_Spring_K, sizeof(sb->namedVG_Spring_K)); } -static char *rna_SoftBodySettings_path(PointerRNA *ptr) +static char *rna_SoftBodySettings_path(const PointerRNA *ptr) { - Object *ob = (Object *)ptr->owner_id; - ModifierData *md = (ModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Softbody); + const Object *ob = (Object *)ptr->owner_id; + const ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Softbody); char name_esc[sizeof(md->name) * 2]; BLI_str_escape(name_esc, md->name, sizeof(name_esc)); return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc); } -static int particle_id_check(PointerRNA *ptr) +static int particle_id_check(const PointerRNA *ptr) { ID *id = ptr->owner_id; @@ -731,7 +731,7 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point } } -static char *rna_FieldSettings_path(PointerRNA *ptr) +static char *rna_FieldSettings_path(const PointerRNA *ptr) { PartDeflect *pd = (PartDeflect *)ptr->data; @@ -787,7 +787,7 @@ static void rna_EffectorWeight_dependency_update(Main *bmain, WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL); } -static char *rna_EffectorWeight_path(PointerRNA *ptr) +static char *rna_EffectorWeight_path(const PointerRNA *ptr) { EffectorWeights *ew = (EffectorWeights *)ptr->data; /* Check through all possible places the settings can be to find the right one */ @@ -1395,97 +1395,97 @@ static void rna_def_field(BlenderRNA *brna) PropertyRNA *prop; static const EnumPropertyItem field_type_items[] = { - {0, "NONE", 0, "None", ""}, + {0, "NONE", ICON_BLANK1, "None", ""}, + {PFIELD_BOID, + "BOID", + ICON_FORCE_BOID, + "Boid", + "Create a force that acts as a boid's predators or target"}, + {PFIELD_CHARGE, + "CHARGE", + ICON_FORCE_CHARGE, + "Charge", + "Spherical forcefield based on the charge of particles, " + "only influences other charge force fields"}, + {PFIELD_GUIDE, + "GUIDE", + ICON_FORCE_CURVE, + "Curve Guide", + "Create a force along a curve object"}, + {PFIELD_DRAG, "DRAG", ICON_FORCE_DRAG, "Drag", "Create a force that dampens motion"}, + {PFIELD_FLUIDFLOW, + "FLUID_FLOW", + ICON_FORCE_FLUIDFLOW, + "Fluid Flow", + "Create a force based on fluid simulation velocities"}, {PFIELD_FORCE, "FORCE", ICON_FORCE_FORCE, "Force", "Radial field toward the center of object"}, - {PFIELD_WIND, - "WIND", - ICON_FORCE_WIND, - "Wind", - "Constant force along the force object's local Z axis"}, - {PFIELD_VORTEX, - "VORTEX", - ICON_FORCE_VORTEX, - "Vortex", - "Spiraling force that twists the force object's local Z axis"}, - {PFIELD_MAGNET, - "MAGNET", - ICON_FORCE_MAGNETIC, - "Magnetic", - "Forcefield depends on the speed of the particles"}, {PFIELD_HARMONIC, "HARMONIC", ICON_FORCE_HARMONIC, "Harmonic", "The source of this force field is the zero point of a harmonic oscillator"}, - {PFIELD_CHARGE, - "CHARGE", - ICON_FORCE_CHARGE, - "Charge", - "Spherical forcefield based on the charge of particles, " - "only influences other charge force fields"}, {PFIELD_LENNARDJ, "LENNARDJ", ICON_FORCE_LENNARDJONES, "Lennard-Jones", "Forcefield based on the Lennard-Jones potential"}, + {PFIELD_MAGNET, + "MAGNET", + ICON_FORCE_MAGNETIC, + "Magnetic", + "Forcefield depends on the speed of the particles"}, {PFIELD_TEXTURE, "TEXTURE", ICON_FORCE_TEXTURE, "Texture", "Force field based on a texture"}, - {PFIELD_GUIDE, - "GUIDE", - ICON_FORCE_CURVE, - "Curve Guide", - "Create a force along a curve object"}, - {PFIELD_BOID, - "BOID", - ICON_FORCE_BOID, - "Boid", - "Create a force that acts as a boid's predators or target"}, {PFIELD_TURBULENCE, "TURBULENCE", ICON_FORCE_TURBULENCE, "Turbulence", "Create turbulence with a noise field"}, - {PFIELD_DRAG, "DRAG", ICON_FORCE_DRAG, "Drag", "Create a force that dampens motion"}, - {PFIELD_FLUIDFLOW, - "FLUID_FLOW", - ICON_FORCE_FLUIDFLOW, - "Fluid Flow", - "Create a force based on fluid simulation velocities"}, + {PFIELD_VORTEX, + "VORTEX", + ICON_FORCE_VORTEX, + "Vortex", + "Spiraling force that twists the force object's local Z axis"}, + {PFIELD_WIND, + "WIND", + ICON_FORCE_WIND, + "Wind", + "Constant force along the force object's local Z axis"}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem falloff_items[] = { + {PFIELD_FALL_CONE, "CONE", 0, "Cone", ""}, {PFIELD_FALL_SPHERE, "SPHERE", 0, "Sphere", ""}, {PFIELD_FALL_TUBE, "TUBE", 0, "Tube", ""}, - {PFIELD_FALL_CONE, "CONE", 0, "Cone", ""}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem texture_items[] = { - {PFIELD_TEX_RGB, "RGB", 0, "RGB", ""}, - {PFIELD_TEX_GRAD, "GRADIENT", 0, "Gradient", ""}, {PFIELD_TEX_CURL, "CURL", 0, "Curl", ""}, + {PFIELD_TEX_GRAD, "GRADIENT", 0, "Gradient", ""}, + {PFIELD_TEX_RGB, "RGB", 0, "RGB", ""}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem zdirection_items[] = { - {PFIELD_Z_BOTH, "BOTH", 0, "Both Z", ""}, {PFIELD_Z_POS, "POSITIVE", 0, "+Z", ""}, {PFIELD_Z_NEG, "NEGATIVE", 0, "-Z", ""}, + {PFIELD_Z_BOTH, "BOTH", 0, "Both Z", ""}, {0, NULL, 0, NULL, NULL}, }; static const EnumPropertyItem guide_kink_items[] = { - {0, "NONE", 0, "Nothing", ""}, + {0, "NONE", 0, "None", ""}, + {4, "BRAID", 0, "Braid", ""}, {1, "CURL", 0, "Curl", ""}, {2, "RADIAL", 0, "Radial", ""}, - {3, "WAVE", 0, "Wave", ""}, - {4, "BRAID", 0, "Braid", ""}, - {5, "ROTATION", 0, "Rotation", ""}, {6, "ROLL", 0, "Roll", ""}, + {5, "ROTATION", 0, "Rotation", ""}, + {3, "WAVE", 0, "Wave", ""}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 6f2264680c8..a67b0f7c8e6 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -660,7 +660,7 @@ static void rna_ParticleSystem_uv_on_emitter(ParticleSystem *particlesystem, } else { MFace *mface = &modifier->mesh_final->mface[num]; - MTFace *mtface = (MTFace *)CustomData_get_layer_n( + const MTFace *mtface = (const MTFace *)CustomData_get_layer_n( &modifier->mesh_final->fdata, CD_MTFACE, uv_no); psys_interpolate_uvs(&mtface[num], mface->v4, *fuv, r_uv); @@ -694,7 +694,8 @@ static void rna_ParticleSystem_mcol_on_emitter(ParticleSystem *particlesystem, } else { MFace *mface = &modifier->mesh_final->mface[num]; - MCol *mc = (MCol *)CustomData_get_layer_n(&modifier->mesh_final->fdata, CD_MCOL, vcol_no); + const MCol *mc = (const MCol *)CustomData_get_layer_n( + &modifier->mesh_final->fdata, CD_MCOL, vcol_no); MCol mcol; psys_interpolate_mcol(&mc[num * 4], mface->v4, *fuv, &mcol); @@ -1207,19 +1208,19 @@ static int rna_ParticleTarget_name_length(PointerRNA *ptr) return strlen(tstr); } -static int particle_id_check(PointerRNA *ptr) +static int particle_id_check(const PointerRNA *ptr) { - ID *id = ptr->owner_id; + const ID *id = ptr->owner_id; return (GS(id->name) == ID_PA); } -static char *rna_SPHFluidSettings_path(PointerRNA *ptr) +static char *rna_SPHFluidSettings_path(const PointerRNA *ptr) { - SPHFluidSettings *fluid = (SPHFluidSettings *)ptr->data; + const SPHFluidSettings *fluid = (SPHFluidSettings *)ptr->data; if (particle_id_check(ptr)) { - ParticleSettings *part = (ParticleSettings *)ptr->owner_id; + const ParticleSettings *part = (ParticleSettings *)ptr->owner_id; if (part->fluid == fluid) { return BLI_strdup("fluid"); @@ -1462,9 +1463,9 @@ static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int i } } -static char *rna_ParticleSystem_path(PointerRNA *ptr) +static char *rna_ParticleSystem_path(const PointerRNA *ptr) { - ParticleSystem *psys = (ParticleSystem *)ptr->data; + const ParticleSystem *psys = (ParticleSystem *)ptr->data; char name_esc[sizeof(psys->name) * 2]; BLI_str_escape(name_esc, psys->name, sizeof(name_esc)); diff --git a/source/blender/makesrna/intern/rna_pointcloud.c b/source/blender/makesrna/intern/rna_pointcloud.c index 075d660ba2b..4c5dcd5a587 100644 --- a/source/blender/makesrna/intern/rna_pointcloud.c +++ b/source/blender/makesrna/intern/rna_pointcloud.c @@ -27,18 +27,23 @@ # include "WM_api.h" # include "WM_types.h" -static PointCloud *rna_pointcloud(PointerRNA *ptr) +static PointCloud *rna_pointcloud(const PointerRNA *ptr) { return (PointCloud *)ptr->owner_id; } -static int rna_Point_index_get(PointerRNA *ptr) +static int rna_Point_index_get_const(const PointerRNA *ptr) { const PointCloud *pointcloud = rna_pointcloud(ptr); const float(*co)[3] = ptr->data; return (int)(co - pointcloud->co); } +static int rna_Point_index_get(PointerRNA *ptr) +{ + return rna_Point_index_get_const(ptr); +} + static void rna_Point_location_get(PointerRNA *ptr, float value[3]) { copy_v3_v3(value, (const float *)ptr->data); @@ -69,9 +74,9 @@ static void rna_Point_radius_set(PointerRNA *ptr, float value) pointcloud->radius[co - pointcloud->co] = value; } -static char *rna_Point_path(PointerRNA *ptr) +static char *rna_Point_path(const PointerRNA *ptr) { - return BLI_sprintfN("points[%d]", rna_Point_index_get(ptr)); + return BLI_sprintfN("points[%d]", rna_Point_index_get_const(ptr)); } static void rna_PointCloud_update_data(struct Main *UNUSED(bmain), diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index a80e9573657..4108baca2fa 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -108,14 +108,14 @@ static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe BIK_clear_data(ob->pose); } -static char *rna_Pose_path(PointerRNA *UNUSED(ptr)) +static char *rna_Pose_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("pose"); } -static char *rna_PoseBone_path(PointerRNA *ptr) +static char *rna_PoseBone_path(const PointerRNA *ptr) { - bPoseChannel *pchan = ptr->data; + const bPoseChannel *pchan = ptr->data; char name_esc[sizeof(pchan->name) * 2]; BLI_str_escape(name_esc, pchan->name, sizeof(name_esc)); diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 997c110134d..11a7be69f68 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -483,9 +483,10 @@ static void rna_RenderLayer_passes_begin(CollectionPropertyIterator *iter, Point rna_iterator_listbase_begin(iter, &rl->passes, NULL); } -static int rna_RenderPass_rect_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) +static int rna_RenderPass_rect_get_length(const PointerRNA *ptr, + int length[RNA_MAX_ARRAY_DIMENSION]) { - RenderPass *rpass = (RenderPass *)ptr->data; + const RenderPass *rpass = (RenderPass *)ptr->data; length[0] = rpass->rectx * rpass->recty; length[1] = rpass->channels; diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c index c1012f67c5a..0c1fd8cab3c 100644 --- a/source/blender/makesrna/intern/rna_rigidbody.c +++ b/source/blender/makesrna/intern/rna_rigidbody.c @@ -148,7 +148,7 @@ static void rna_RigidBodyWorld_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), BKE_rigidbody_cache_reset(rbw); } -static char *rna_RigidBodyWorld_path(PointerRNA *UNUSED(ptr)) +static char *rna_RigidBodyWorld_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("rigidbody_world"); } @@ -240,7 +240,7 @@ static void rna_RigidBodyOb_mesh_source_update(Main *bmain, Scene *scene, Pointe WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob); } -static char *rna_RigidBodyOb_path(PointerRNA *UNUSED(ptr)) +static char *rna_RigidBodyOb_path(const PointerRNA *UNUSED(ptr)) { /* NOTE: this hardcoded path should work as long as only Objects have this */ return BLI_strdup("rigid_body"); @@ -432,7 +432,7 @@ static void rna_RigidBodyOb_angular_damping_set(PointerRNA *ptr, float value) # endif } -static char *rna_RigidBodyCon_path(PointerRNA *UNUSED(ptr)) +static char *rna_RigidBodyCon_path(const PointerRNA *UNUSED(ptr)) { /* NOTE: this hardcoded path should work as long as only Objects have this */ return BLI_strdup("rigid_body_constraint"); diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index a7d673d3fe1..72ad695cd03 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -50,56 +50,85 @@ const EnumPropertyItem rna_enum_property_type_items[] = { {0, NULL, 0, NULL, NULL}, }; -/* Keep in sync with RNA_types.h PropertySubType and bpy_props.c's property_subtype_xxx_items */ +/* Wraps multiple enums onto a single line in a way that is difficult to read. + * NOTE: these enums are split up based on their use in `bpy.props` Python module. */ + +/* clang-format off */ +#define RNA_ENUM_PROPERTY_SUBTYPE_STRING_ITEMS \ + {PROP_FILEPATH, "FILE_PATH", 0, "File Path", ""}, \ + {PROP_DIRPATH, "DIR_PATH", 0, "Directory Path", ""}, \ + {PROP_FILENAME, "FILE_NAME", 0, "File Name", ""}, \ + {PROP_BYTESTRING, "BYTE_STRING", 0, "Byte String", ""}, \ + {PROP_PASSWORD, "PASSWORD", 0, "Password", "A string that is displayed hidden ('********')"} + +#define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ITEMS \ + {PROP_PIXEL, "PIXEL", 0, "Pixel", ""}, \ + {PROP_UNSIGNED, "UNSIGNED", 0, "Unsigned", ""}, \ + {PROP_PERCENTAGE, "PERCENTAGE", 0, "Percentage", ""}, \ + {PROP_FACTOR, "FACTOR", 0, "Factor", ""}, \ + {PROP_ANGLE, "ANGLE", 0, "Angle", ""}, \ + {PROP_TIME, "TIME", 0, "Time (Scene Relative)", \ + "Time specified in frames, converted to seconds based on scene frame rate"}, \ + {PROP_TIME_ABSOLUTE, "TIME_ABSOLUTE", 0, "Time (Absolute)", \ + "Time specified in seconds, independent of the scene"}, \ + {PROP_DISTANCE, "DISTANCE", 0, "Distance", ""}, \ + {PROP_DISTANCE_CAMERA, "DISTANCE_CAMERA", 0, "Camera Distance", ""}, \ + {PROP_POWER, "POWER", 0, "Power", ""}, \ + {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""} + +#define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS \ + {PROP_COLOR, "COLOR", 0, "Color", ""}, \ + {PROP_TRANSLATION, "TRANSLATION", 0, "Translation", ""}, \ + {PROP_DIRECTION, "DIRECTION", 0, "Direction", ""}, \ + {PROP_VELOCITY, "VELOCITY", 0, "Velocity", ""}, \ + {PROP_ACCELERATION, "ACCELERATION", 0, "Acceleration", ""}, \ + {PROP_MATRIX, "MATRIX", 0, "Matrix", ""}, \ + {PROP_EULER, "EULER", 0, "Euler Angles", ""}, \ + {PROP_QUATERNION, "QUATERNION", 0, "Quaternion", ""}, \ + {PROP_AXISANGLE, "AXISANGLE", 0, "Axis-Angle", ""}, \ + {PROP_XYZ, "XYZ", 0, "XYZ", ""}, \ + {PROP_XYZ_LENGTH, "XYZ_LENGTH", 0, "XYZ Length", ""}, \ + {PROP_COLOR_GAMMA, "COLOR_GAMMA", 0, "Color", ""}, \ + {PROP_COORDS, "COORDS", 0, "Coordinates", ""}, \ + /* Boolean. */ \ + {PROP_LAYER, "LAYER", 0, "Layer", ""}, \ + {PROP_LAYER_MEMBER, "LAYER_MEMBER", 0, "Layer Member", ""} + +/* clang-format on */ + +const EnumPropertyItem rna_enum_property_subtype_string_items[] = { + RNA_ENUM_PROPERTY_SUBTYPE_STRING_ITEMS, + + {PROP_NONE, "NONE", 0, "None", ""}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_property_subtype_number_items[] = { + RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ITEMS, + + {PROP_NONE, "NONE", 0, "None", ""}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_property_subtype_number_array_items[] = { + RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS, + + {PROP_NONE, "NONE", 0, "None", ""}, + {0, NULL, 0, NULL, NULL}, +}; + const EnumPropertyItem rna_enum_property_subtype_items[] = { {PROP_NONE, "NONE", 0, "None", ""}, - /* strings */ - {PROP_FILEPATH, "FILEPATH", 0, "File Path", ""}, - {PROP_DIRPATH, "DIRPATH", 0, "Directory Path", ""}, - {PROP_FILENAME, "FILENAME", 0, "File Name", ""}, - {PROP_BYTESTRING, "BYTESTRING", 0, "Byte String", ""}, - {PROP_PASSWORD, "PASSWORD", 0, "Password", "A string that is displayed hidden ('********')"}, - - /* numbers */ - {PROP_PIXEL, "PIXEL", 0, "Pixel", ""}, - {PROP_UNSIGNED, "UNSIGNED", 0, "Unsigned", ""}, - {PROP_PERCENTAGE, "PERCENTAGE", 0, "Percentage", ""}, - {PROP_FACTOR, "FACTOR", 0, "Factor", ""}, - {PROP_ANGLE, "ANGLE", 0, "Angle", ""}, - {PROP_TIME, - "TIME", - 0, - "Time (Scene Relative)", - "Time specified in frames, converted to seconds based on scene frame rate"}, - {PROP_TIME_ABSOLUTE, - "TIME_ABSOLUTE", - 0, - "Time (Absolute)", - "Time specified in seconds, independent of the scene"}, - {PROP_DISTANCE, "DISTANCE", 0, "Distance", ""}, - {PROP_DISTANCE_CAMERA, "DISTANCE_CAMERA", 0, "Camera Distance", ""}, - {PROP_POWER, "POWER", 0, "Power", ""}, - {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}, - - /* number arrays */ - {PROP_COLOR, "COLOR", 0, "Color", ""}, - {PROP_TRANSLATION, "TRANSLATION", 0, "Translation", ""}, - {PROP_DIRECTION, "DIRECTION", 0, "Direction", ""}, - {PROP_VELOCITY, "VELOCITY", 0, "Velocity", ""}, - {PROP_ACCELERATION, "ACCELERATION", 0, "Acceleration", ""}, - {PROP_MATRIX, "MATRIX", 0, "Matrix", ""}, - {PROP_EULER, "EULER", 0, "Euler Angles", ""}, - {PROP_QUATERNION, "QUATERNION", 0, "Quaternion", ""}, - {PROP_AXISANGLE, "AXISANGLE", 0, "Axis-Angle", ""}, - {PROP_XYZ, "XYZ", 0, "XYZ", ""}, - {PROP_XYZ_LENGTH, "XYZ_LENGTH", 0, "XYZ Length", ""}, - {PROP_COLOR_GAMMA, "COLOR_GAMMA", 0, "Color", ""}, - {PROP_COORDS, "COORDS", 0, "Coordinates", ""}, - - /* booleans */ - {PROP_LAYER, "LAYER", 0, "Layer", ""}, - {PROP_LAYER_MEMBER, "LAYER_MEMBER", 0, "Layer Member", ""}, + /* String. */ + RNA_ENUM_PROPERTY_SUBTYPE_STRING_ITEMS, + + /* Number. */ + RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ITEMS, + + /* Number array. */ + RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS, + {0, NULL, 0, NULL, NULL}, }; @@ -120,6 +149,69 @@ const EnumPropertyItem rna_enum_property_unit_items[] = { {0, NULL, 0, NULL, NULL}, }; +const EnumPropertyItem rna_enum_property_flag_items[] = { + {PROP_HIDDEN, "HIDDEN", 0, "Hidden", ""}, + {PROP_SKIP_SAVE, "SKIP_SAVE", 0, "Skip Save", ""}, + {PROP_ANIMATABLE, "ANIMATABLE", 0, "Animatable", ""}, + {PROP_LIB_EXCEPTION, "LIBRARY_EDITABLE", 0, "Library Editable", ""}, + {PROP_PROPORTIONAL, "PROPORTIONAL", 0, "Adjust values proportionally to eachother", ""}, + {PROP_TEXTEDIT_UPDATE, + "TEXTEDIT_UPDATE", + 0, + "Update on every keystroke in textedit 'mode'", + ""}, + {0, NULL, 0, NULL, NULL}, +}; + +/** Only for enum type properties. */ +const EnumPropertyItem rna_enum_property_flag_enum_items[] = { + {PROP_HIDDEN, "HIDDEN", 0, "Hidden", ""}, + {PROP_SKIP_SAVE, "SKIP_SAVE", 0, "Skip Save", ""}, + {PROP_ANIMATABLE, "ANIMATABLE", 0, "Animatable", ""}, + {PROP_LIB_EXCEPTION, "LIBRARY_EDITABLE", 0, "Library Editable", ""}, + {PROP_ENUM_FLAG, "ENUM_FLAG", 0, "Enum Flag", ""}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_property_override_flag_items[] = { + {PROPOVERRIDE_OVERRIDABLE_LIBRARY, + "LIBRARY_OVERRIDABLE", + 0, + "Library Overridable", + "Make that property editable in library overrides of linked data-blocks"}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_property_override_flag_collection_items[] = { + {PROPOVERRIDE_OVERRIDABLE_LIBRARY, + "LIBRARY_OVERRIDABLE", + 0, + "Library Overridable", + "Make that property editable in library overrides of linked data-blocks"}, + {PROPOVERRIDE_NO_PROP_NAME, + "NO_PROPERTY_NAME", + 0, + "No Name", + "Do not use the names of the items, only their indices in the collection"}, + {PROPOVERRIDE_LIBRARY_INSERTION, + "USE_INSERTION", + 0, + "Use Insertion", + "Allow users to add new items in that collection in library overrides"}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_property_string_search_flag_items[] = { + {PROP_STRING_SEARCH_SORT, "SORT", 0, "Sort Search Results", ""}, + {PROP_STRING_SEARCH_SUGGESTION, + "SUGGESTION", + 0, + "Suggestion", + "Search results are suggestions (other values may be entered)"}, + + {0, NULL, 0, NULL, NULL}, +}; + /** \} */ #ifdef RNA_RUNTIME @@ -721,7 +813,7 @@ static int rna_IntProperty_default_get(PointerRNA *ptr) return ((IntPropertyRNA *)prop)->defaultvalue; } /* int/float/bool */ -static int rna_NumberProperty_default_array_get_length(PointerRNA *ptr, +static int rna_NumberProperty_default_array_get_length(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { PropertyRNA *prop = (PropertyRNA *)ptr->data; @@ -941,17 +1033,29 @@ static int rna_EnumPropertyItem_identifier_length(PointerRNA *ptr) static void rna_EnumPropertyItem_name_get(PointerRNA *ptr, char *value) { - strcpy(value, ((EnumPropertyItem *)ptr->data)->name); + const EnumPropertyItem *eprop = ptr->data; + /* Name can be NULL in the case of separators + * which are exposed via `_bpy.rna_enum_items_static`. */ + if (eprop->name) { + strcpy(value, eprop->name); + } + else { + value[0] = '\0'; + } } static int rna_EnumPropertyItem_name_length(PointerRNA *ptr) { - return strlen(((EnumPropertyItem *)ptr->data)->name); + const EnumPropertyItem *eprop = ptr->data; + if (eprop->name) { + return strlen(eprop->name); + } + return 0; } static void rna_EnumPropertyItem_description_get(PointerRNA *ptr, char *value) { - EnumPropertyItem *eprop = (EnumPropertyItem *)ptr->data; + const EnumPropertyItem *eprop = ptr->data; if (eprop->description) { strcpy(value, eprop->description); @@ -968,9 +1072,7 @@ static int rna_EnumPropertyItem_description_length(PointerRNA *ptr) if (eprop->description) { return strlen(eprop->description); } - else { - return 0; - } + return 0; } static int rna_EnumPropertyItem_value_get(PointerRNA *ptr) @@ -2655,7 +2757,7 @@ bool rna_property_override_apply_default(Main *bmain, break; } default: - BLI_assert(0); + BLI_assert_unreachable(); return false; } diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index b647a823929..9b8e94db081 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -345,9 +345,9 @@ const EnumPropertyItem rna_enum_curve_fit_method_items[] = { R_IMF_ENUM_JPEG \ R_IMF_ENUM_JPEG2K \ R_IMF_ENUM_TAGA \ - R_IMF_ENUM_TAGA_RAW{0, "", 0, " ", NULL}, \ - R_IMF_ENUM_CINEON R_IMF_ENUM_DPX R_IMF_ENUM_EXR_MULTILAYER R_IMF_ENUM_EXR R_IMF_ENUM_HDR \ - R_IMF_ENUM_TIFF R_IMF_ENUM_WEBP + R_IMF_ENUM_TAGA_RAW \ + RNA_ENUM_ITEM_SEPR_COLUMN, R_IMF_ENUM_CINEON R_IMF_ENUM_DPX R_IMF_ENUM_EXR_MULTILAYER \ + R_IMF_ENUM_EXR R_IMF_ENUM_HDR R_IMF_ENUM_TIFF R_IMF_ENUM_WEBP #ifdef RNA_RUNTIME static const EnumPropertyItem image_only_type_items[] = { @@ -359,11 +359,11 @@ static const EnumPropertyItem image_only_type_items[] = { #endif const EnumPropertyItem rna_enum_image_type_items[] = { - {0, "", 0, N_("Image"), NULL}, + RNA_ENUM_ITEM_HEADING(N_("Image"), NULL), IMAGE_TYPE_ITEMS_IMAGE_ONLY - {0, "", 0, N_("Movie"), NULL}, + RNA_ENUM_ITEM_HEADING(N_("Movie"), NULL), {R_IMF_IMTYPE_AVIJPEG, "AVI_JPEG", ICON_FILE_MOVIE, @@ -1100,12 +1100,12 @@ static void rna_Scene_all_keyingsets_next(CollectionPropertyIterator *iter) iter->valid = (internal->link != NULL); } -static char *rna_SceneEEVEE_path(PointerRNA *UNUSED(ptr)) +static char *rna_SceneEEVEE_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("eevee"); } -static char *rna_SceneGpencil_path(PointerRNA *UNUSED(ptr)) +static char *rna_SceneGpencil_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("grease_pencil_settings"); } @@ -1129,17 +1129,17 @@ static void rna_RenderSettings_stereoViews_begin(CollectionPropertyIterator *ite rna_iterator_listbase_begin(iter, &rd->views, rna_RenderSettings_stereoViews_skip); } -static char *rna_RenderSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_RenderSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("render"); } -static char *rna_BakeSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_BakeSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("render.bake"); } -static char *rna_ImageFormatSettings_path(PointerRNA *ptr) +static char *rna_ImageFormatSettings_path(const PointerRNA *ptr) { ImageFormatData *imf = (ImageFormatData *)ptr->data; ID *id = ptr->owner_id; @@ -1787,10 +1787,11 @@ void rna_ViewLayer_pass_update(Main *bmain, Scene *activescene, PointerRNA *ptr) rna_Scene_glsl_update(bmain, activescene, ptr); } -static char *rna_ViewLayerEEVEE_path(PointerRNA *ptr) +static char *rna_ViewLayerEEVEE_path(const PointerRNA *ptr) { - ViewLayerEEVEE *view_layer_eevee = (ViewLayerEEVEE *)ptr->data; - ViewLayer *view_layer = (ViewLayer *)((uint8_t *)view_layer_eevee - offsetof(ViewLayer, eevee)); + const ViewLayerEEVEE *view_layer_eevee = (ViewLayerEEVEE *)ptr->data; + const ViewLayer *view_layer = (ViewLayer *)((uint8_t *)view_layer_eevee - + offsetof(ViewLayer, eevee)); char rna_path[sizeof(view_layer->name) * 3]; const size_t view_layer_path_len = rna_ViewLayer_path_buffer_get( @@ -1801,9 +1802,9 @@ static char *rna_ViewLayerEEVEE_path(PointerRNA *ptr) return BLI_strdup(rna_path); } -static char *rna_SceneRenderView_path(PointerRNA *ptr) +static char *rna_SceneRenderView_path(const PointerRNA *ptr) { - SceneRenderView *srv = (SceneRenderView *)ptr->data; + const SceneRenderView *srv = (SceneRenderView *)ptr->data; char srv_name_esc[sizeof(srv->name) * 2]; BLI_str_escape(srv_name_esc, srv->name, sizeof(srv_name_esc)); return BLI_sprintfN("render.views[\"%s\"]", srv_name_esc); @@ -2071,10 +2072,10 @@ static void rna_View3DCursor_matrix_set(PointerRNA *ptr, const float *values) BKE_scene_cursor_from_mat4(cursor, unit_mat, false); } -static char *rna_TransformOrientationSlot_path(PointerRNA *ptr) +static char *rna_TransformOrientationSlot_path(const PointerRNA *ptr) { - Scene *scene = (Scene *)ptr->owner_id; - TransformOrientationSlot *orientation_slot = ptr->data; + const Scene *scene = (Scene *)ptr->owner_id; + const TransformOrientationSlot *orientation_slot = ptr->data; if (!ELEM(NULL, scene, orientation_slot)) { for (int i = 0; i < ARRAY_SIZE(scene->orientation_slots); i++) { @@ -2085,11 +2086,11 @@ static char *rna_TransformOrientationSlot_path(PointerRNA *ptr) } /* Should not happen, but in case, just return default path. */ - BLI_assert(0); + BLI_assert_unreachable(); return BLI_strdup("transform_orientation_slots[0]"); } -static char *rna_View3DCursor_path(PointerRNA *UNUSED(ptr)) +static char *rna_View3DCursor_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("cursor"); } @@ -2188,17 +2189,17 @@ static void rna_UnifiedPaintSettings_radius_update(bContext *C, PointerRNA *ptr) rna_UnifiedPaintSettings_update(C, ptr); } -static char *rna_UnifiedPaintSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_UnifiedPaintSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.unified_paint_settings"); } -static char *rna_CurvePaintSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_CurvePaintSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.curve_paint_settings"); } -static char *rna_SequencerToolSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_SequencerToolSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.sequencer_tool_settings"); } @@ -2222,7 +2223,7 @@ static void rna_EditMesh_update(bContext *C, PointerRNA *UNUSED(ptr)) } } -static char *rna_MeshStatVis_path(PointerRNA *UNUSED(ptr)) +static char *rna_MeshStatVis_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.statvis"); } @@ -2260,7 +2261,7 @@ static void rna_SceneSequencer_update(Main *UNUSED(bmain), Scene *UNUSED(scene), SEQ_cache_cleanup((Scene *)ptr->owner_id); } -static char *rna_ToolSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ToolSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings"); } @@ -2701,12 +2702,12 @@ static void rna_UnitSettings_system_update(Main *UNUSED(bmain), } } -static char *rna_UnitSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_UnitSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("unit_settings"); } -static char *rna_FFmpegSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_FFmpegSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("render.ffmpeg"); } diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 017e8bde7a1..ab5e4c2f0d5 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -259,7 +259,7 @@ static bool rna_ParticleEdit_hair_get(PointerRNA *ptr) return 0; } -static char *rna_ParticleEdit_path(PointerRNA *UNUSED(ptr)) +static char *rna_ParticleEdit_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.particle_edit"); } @@ -403,15 +403,15 @@ static void rna_Sculpt_ShowMask_update(bContext *C, PointerRNA *UNUSED(ptr)) WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, object); } -static char *rna_Sculpt_path(PointerRNA *UNUSED(ptr)) +static char *rna_Sculpt_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.sculpt"); } -static char *rna_VertexPaint_path(PointerRNA *ptr) +static char *rna_VertexPaint_path(const PointerRNA *ptr) { - Scene *scene = (Scene *)ptr->owner_id; - ToolSettings *ts = scene->toolsettings; + const Scene *scene = (Scene *)ptr->owner_id; + const ToolSettings *ts = scene->toolsettings; if (ptr->data == ts->vpaint) { return BLI_strdup("tool_settings.vertex_paint"); } @@ -420,47 +420,47 @@ static char *rna_VertexPaint_path(PointerRNA *ptr) } } -static char *rna_ImagePaintSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_ImagePaintSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.image_paint"); } -static char *rna_PaintModeSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_PaintModeSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.paint_mode"); } -static char *rna_UvSculpt_path(PointerRNA *UNUSED(ptr)) +static char *rna_UvSculpt_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.uv_sculpt"); } -static char *rna_CurvesSculpt_path(PointerRNA *UNUSED(ptr)) +static char *rna_CurvesSculpt_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.curves_sculpt"); } -static char *rna_GpPaint_path(PointerRNA *UNUSED(ptr)) +static char *rna_GpPaint_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_paint"); } -static char *rna_GpVertexPaint_path(PointerRNA *UNUSED(ptr)) +static char *rna_GpVertexPaint_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_vertex_paint"); } -static char *rna_GpSculptPaint_path(PointerRNA *UNUSED(ptr)) +static char *rna_GpSculptPaint_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_sculpt_paint"); } -static char *rna_GpWeightPaint_path(PointerRNA *UNUSED(ptr)) +static char *rna_GpWeightPaint_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_weight_paint"); } -static char *rna_ParticleBrush_path(PointerRNA *UNUSED(ptr)) +static char *rna_ParticleBrush_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.particle_edit.brush"); } @@ -578,12 +578,12 @@ static bool rna_ImaPaint_detect_data(ImagePaintSettings *imapaint) return imapaint->missing_data == 0; } -static char *rna_GPencilSculptSettings_path(PointerRNA *UNUSED(ptr)) +static char *rna_GPencilSculptSettings_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_sculpt"); } -static char *rna_GPencilSculptGuide_path(PointerRNA *UNUSED(ptr)) +static char *rna_GPencilSculptGuide_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_sculpt.guide"); } diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 51f62b62c8e..100d90df5d6 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -240,7 +240,7 @@ static int rna_SequenceEditor_sequences_all_lookup_string(PointerRNA *ptr, ID *id = ptr->owner_id; Scene *scene = (Scene *)id; - Sequence *seq = SEQ_sequence_lookup_by_name(scene, key); + Sequence *seq = SEQ_sequence_lookup_seq_by_name(scene, key); if (seq) { RNA_pointer_create(ptr->owner_id, &RNA_Sequence, seq, r_ptr); return true; @@ -289,26 +289,11 @@ static void rna_Sequence_views_format_update(Main *bmain, Scene *scene, PointerR static void do_sequence_frame_change_update(Scene *scene, Sequence *seq) { - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); - Sequence *tseq; - SEQ_time_update_sequence(scene, seqbase, seq); - - /* ensure effects are always fit in length to their input */ - - /* TODO(sergey): probably could be optimized. - * in terms skipping update of non-changing strips - */ - for (tseq = seqbase->first; tseq; tseq = tseq->next) { - if (tseq->seq1 || tseq->seq2 || tseq->seq3) { - SEQ_time_update_sequence(scene, seqbase, tseq); - } - } + ListBase *seqbase = SEQ_get_seqbase_by_seq(scene, seq); if (SEQ_transform_test_overlap(seqbase, seq)) { - SEQ_transform_seqbase_shuffle(seqbase, seq, scene); /* XXX: BROKEN!, uses context seqbasep. */ + SEQ_transform_seqbase_shuffle(seqbase, seq, scene); } - SEQ_sort(seqbase); if (seq->type == SEQ_TYPE_SOUND_RAM) { DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS); @@ -341,8 +326,8 @@ static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value) Sequence *seq = (Sequence *)ptr->data; Scene *scene = (Scene *)ptr->owner_id; - SEQ_transform_set_left_handle_frame(seq, value); - SEQ_transform_fix_single_image_seq_offsets(seq); + SEQ_time_left_handle_frame_set(scene, seq, value); + SEQ_transform_fix_single_image_seq_offsets(scene, seq); do_sequence_frame_change_update(scene, seq); SEQ_relations_invalidate_cache_composite(scene, seq); } @@ -352,8 +337,8 @@ static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value) Sequence *seq = (Sequence *)ptr->data; Scene *scene = (Scene *)ptr->owner_id; - SEQ_transform_set_right_handle_frame(seq, value); - SEQ_transform_fix_single_image_seq_offsets(seq); + SEQ_time_right_handle_frame_set(scene, seq, value); + SEQ_transform_fix_single_image_seq_offsets(scene, seq); do_sequence_frame_change_update(scene, seq); SEQ_relations_invalidate_cache_composite(scene, seq); } @@ -376,24 +361,6 @@ static void rna_Sequence_frame_offset_end_set(PointerRNA *ptr, int value) seq->endofs = value; } -static void rna_Sequence_frame_still_start_set(PointerRNA *ptr, int value) -{ - Sequence *seq = (Sequence *)ptr->data; - Scene *scene = (Scene *)ptr->owner_id; - - SEQ_relations_invalidate_cache_composite(scene, seq); - seq->startstill = value; -} - -static void rna_Sequence_frame_still_end_set(PointerRNA *ptr, int value) -{ - Sequence *seq = (Sequence *)ptr->data; - Scene *scene = (Scene *)ptr->owner_id; - - SEQ_relations_invalidate_cache_composite(scene, seq); - seq->endstill = value; -} - static void rna_Sequence_anim_startofs_final_set(PointerRNA *ptr, int value) { Sequence *seq = (Sequence *)ptr->data; @@ -455,7 +422,7 @@ static void rna_Sequence_frame_length_set(PointerRNA *ptr, int value) Sequence *seq = (Sequence *)ptr->data; Scene *scene = (Scene *)ptr->owner_id; - SEQ_transform_set_right_handle_frame(seq, SEQ_transform_get_left_handle_frame(seq) + value); + SEQ_time_right_handle_frame_set(scene, seq, SEQ_time_left_handle_frame_get(seq) + value); do_sequence_frame_change_update(scene, seq); SEQ_relations_invalidate_cache_composite(scene, seq); } @@ -463,7 +430,7 @@ static void rna_Sequence_frame_length_set(PointerRNA *ptr, int value) static int rna_Sequence_frame_length_get(PointerRNA *ptr) { Sequence *seq = (Sequence *)ptr->data; - return SEQ_transform_get_right_handle_frame(seq) - SEQ_transform_get_left_handle_frame(seq); + return SEQ_time_right_handle_frame_get(seq) - SEQ_time_left_handle_frame_get(seq); } static int rna_Sequence_frame_editable(PointerRNA *ptr, const char **UNUSED(r_info)) @@ -477,18 +444,15 @@ static void rna_Sequence_channel_set(PointerRNA *ptr, int value) { Sequence *seq = (Sequence *)ptr->data; Scene *scene = (Scene *)ptr->owner_id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); + ListBase *seqbase = SEQ_get_seqbase_by_seq(scene, seq); /* check channel increment or decrement */ const int channel_delta = (value >= seq->machine) ? 1 : -1; seq->machine = value; if (SEQ_transform_test_overlap(seqbase, seq)) { - /* XXX: BROKEN!, uses context seqbasep. */ SEQ_transform_seqbase_shuffle_ex(seqbase, seq, scene, channel_delta); } - SEQ_sort(seqbase); SEQ_relations_invalidate_cache_composite(scene, seq); } @@ -522,13 +486,13 @@ static Sequence *sequence_get_by_transform(Editing *ed, StripTransform *transfor return data.seq; } -static char *rna_SequenceTransform_path(PointerRNA *ptr) +static char *rna_SequenceTransform_path(const PointerRNA *ptr) { Scene *scene = (Scene *)ptr->owner_id; Editing *ed = SEQ_editing_get(scene); Sequence *seq = sequence_get_by_transform(ed, ptr->data); - if (seq && seq->name + 2) { + if (seq) { char name_esc[(sizeof(seq->name) - 2) * 2]; BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); @@ -574,13 +538,13 @@ static Sequence *sequence_get_by_crop(Editing *ed, StripCrop *crop) return data.seq; } -static char *rna_SequenceCrop_path(PointerRNA *ptr) +static char *rna_SequenceCrop_path(const PointerRNA *ptr) { Scene *scene = (Scene *)ptr->owner_id; Editing *ed = SEQ_editing_get(scene); Sequence *seq = sequence_get_by_crop(ed, ptr->data); - if (seq && seq->name + 2) { + if (seq) { char name_esc[(sizeof(seq->name) - 2) * 2]; BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); @@ -718,22 +682,17 @@ static StructRNA *rna_Sequence_refine(struct PointerRNA *ptr) } } -static char *rna_Sequence_path(PointerRNA *ptr) +static char *rna_Sequence_path(const PointerRNA *ptr) { - Sequence *seq = (Sequence *)ptr->data; + const Sequence *seq = (Sequence *)ptr->data; /* sequencer data comes from scene... * TODO: would be nice to make SequenceEditor data a data-block of its own (for shorter paths) */ - if (seq->name + 2) { - char name_esc[(sizeof(seq->name) - 2) * 2]; + char name_esc[(sizeof(seq->name) - 2) * 2]; - BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", name_esc); - } - else { - return BLI_strdup(""); - } + BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", name_esc); } static IDProperty **rna_Sequence_idprops(PointerRNA *ptr) @@ -745,8 +704,6 @@ static IDProperty **rna_Sequence_idprops(PointerRNA *ptr) static bool rna_MovieSequence_reload_if_needed(ID *scene_id, Sequence *seq, Main *bmain) { Scene *scene = (Scene *)scene_id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); bool has_reloaded; bool can_produce_frames; @@ -754,7 +711,6 @@ static bool rna_MovieSequence_reload_if_needed(ID *scene_id, Sequence *seq, Main SEQ_add_movie_reload_if_needed(bmain, scene, seq, &has_reloaded, &can_produce_frames); if (has_reloaded && can_produce_frames) { - SEQ_time_update_sequence(scene, seqbase, seq); SEQ_relations_invalidate_cache_raw(scene, seq); DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS); @@ -942,9 +898,6 @@ static void rna_Sequence_filepath_update(Main *bmain, Scene *UNUSED(scene), Poin Scene *scene = (Scene *)ptr->owner_id; Sequence *seq = (Sequence *)(ptr->data); SEQ_add_reload_new_file(bmain, scene, seq, true); - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); - SEQ_time_update_sequence(scene, seqbase, seq); rna_Sequence_invalidate_raw_update(bmain, scene, ptr); } @@ -1057,14 +1010,14 @@ static Sequence *sequence_get_by_colorbalance(Editing *ed, return data.seq; } -static char *rna_SequenceColorBalance_path(PointerRNA *ptr) +static char *rna_SequenceColorBalance_path(const PointerRNA *ptr) { Scene *scene = (Scene *)ptr->owner_id; SequenceModifierData *smd; Editing *ed = SEQ_editing_get(scene); Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data, &smd); - if (seq && seq->name + 2) { + if (seq) { char name_esc[(sizeof(seq->name) - 2) * 2]; BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); @@ -1201,14 +1154,14 @@ static StructRNA *rna_SequenceModifier_refine(struct PointerRNA *ptr) } } -static char *rna_SequenceModifier_path(PointerRNA *ptr) +static char *rna_SequenceModifier_path(const PointerRNA *ptr) { Scene *scene = (Scene *)ptr->owner_id; Editing *ed = SEQ_editing_get(scene); SequenceModifierData *smd = ptr->data; Sequence *seq = sequence_get_by_modifier(ed, smd); - if (seq && seq->name + 2) { + if (seq) { char name_esc[(sizeof(seq->name) - 2) * 2]; char name_esc_smd[sizeof(smd->name) * 2]; @@ -1360,8 +1313,7 @@ static void rna_Sequence_separate(ID *id, Sequence *seqm, Main *bmain) Scene *scene = (Scene *)id; /* Find the appropriate seqbase */ - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seqm); + ListBase *seqbase = SEQ_get_seqbase_by_seq(scene, seqm); LISTBASE_FOREACH_MUTABLE (Sequence *, seq, &seqm->seqbase) { SEQ_edit_move_strip_to_seqbase(scene, &seqm->seqbase, seq, seqbase); @@ -1419,7 +1371,7 @@ static void rna_SequenceTimelineChannel_name_set(PointerRNA *ptr, const char *va sizeof(channel->name)); } -static char *rna_SeqTimelineChannel_path(PointerRNA *ptr) +static char *rna_SeqTimelineChannel_path(const PointerRNA *ptr) { Scene *scene = (Scene *)ptr->owner_id; Editing *ed = SEQ_editing_get(scene); @@ -1802,33 +1754,33 @@ static void rna_def_strip_color_balance(BlenderRNA *brna) static const EnumPropertyItem blend_mode_items[] = { {SEQ_BLEND_REPLACE, "REPLACE", 0, "Replace", ""}, {SEQ_TYPE_CROSS, "CROSS", 0, "Cross", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_DARKEN, "DARKEN", 0, "Darken", ""}, {SEQ_TYPE_MUL, "MULTIPLY", 0, "Multiply", ""}, {SEQ_TYPE_COLOR_BURN, "BURN", 0, "Color Burn", ""}, {SEQ_TYPE_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_LIGHTEN, "LIGHTEN", 0, "Lighten", ""}, {SEQ_TYPE_SCREEN, "SCREEN", 0, "Screen", ""}, {SEQ_TYPE_DODGE, "DODGE", 0, "Color Dodge", ""}, {SEQ_TYPE_ADD, "ADD", 0, "Add", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_OVERLAY, "OVERLAY", 0, "Overlay", ""}, {SEQ_TYPE_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, {SEQ_TYPE_HARD_LIGHT, "HARD_LIGHT", 0, "Hard Light", ""}, {SEQ_TYPE_VIVID_LIGHT, "VIVID_LIGHT", 0, "Vivid Light", ""}, {SEQ_TYPE_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""}, {SEQ_TYPE_PIN_LIGHT, "PIN_LIGHT", 0, "Pin Light", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_DIFFERENCE, "DIFFERENCE", 0, "Difference", ""}, {SEQ_TYPE_EXCLUSION, "EXCLUSION", 0, "Exclusion", ""}, {SEQ_TYPE_SUB, "SUBTRACT", 0, "Subtract", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_HUE, "HUE", 0, "Hue", ""}, {SEQ_TYPE_SATURATION, "SATURATION", 0, "Saturation", ""}, {SEQ_TYPE_BLEND_COLOR, "COLOR", 0, "Color", ""}, {SEQ_TYPE_VALUE, "VALUE", 0, "Value", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", ""}, {SEQ_TYPE_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", ""}, {SEQ_TYPE_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", ""}, @@ -2037,22 +1989,6 @@ static void rna_def_sequence(BlenderRNA *brna) prop, NULL, "rna_Sequence_frame_offset_end_set", "rna_Sequence_frame_offset_end_range"); RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_frame_change_update"); - prop = RNA_def_property(srna, "frame_still_start", PROP_INT, PROP_TIME); - RNA_def_property_int_sdna(prop, NULL, "startstill"); - // RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* overlap tests */ - RNA_def_property_range(prop, 0, MAXFRAME); - RNA_def_property_ui_text(prop, "Start Still", ""); - RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_frame_still_start_set", NULL); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_frame_change_update"); - - prop = RNA_def_property(srna, "frame_still_end", PROP_INT, PROP_TIME); - RNA_def_property_int_sdna(prop, NULL, "endstill"); - // RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* overlap tests */ - RNA_def_property_range(prop, 0, MAXFRAME); - RNA_def_property_ui_text(prop, "End Still", ""); - RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_frame_still_end_set", NULL); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_frame_change_update"); - prop = RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "machine"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); @@ -3203,23 +3139,23 @@ static void rna_def_color_mix(StructRNA *srna) {SEQ_TYPE_MUL, "MULTIPLY", 0, "Multiply", ""}, {SEQ_TYPE_COLOR_BURN, "BURN", 0, "Color Burn", ""}, {SEQ_TYPE_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_LIGHTEN, "LIGHTEN", 0, "Lighten", ""}, {SEQ_TYPE_SCREEN, "SCREEN", 0, "Screen", ""}, {SEQ_TYPE_DODGE, "DODGE", 0, "Color Dodge", ""}, {SEQ_TYPE_ADD, "ADD", 0, "Add", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_OVERLAY, "OVERLAY", 0, "Overlay", ""}, {SEQ_TYPE_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, {SEQ_TYPE_HARD_LIGHT, "HARD_LIGHT", 0, "Hard Light", ""}, {SEQ_TYPE_VIVID_LIGHT, "VIVID_LIGHT", 0, "Vivid Light", ""}, {SEQ_TYPE_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""}, {SEQ_TYPE_PIN_LIGHT, "PIN_LIGHT", 0, "Pin Light", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_DIFFERENCE, "DIFFERENCE", 0, "Difference", ""}, {SEQ_TYPE_EXCLUSION, "EXCLUSION", 0, "Exclusion", ""}, {SEQ_TYPE_SUB, "SUBTRACT", 0, "Subtract", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {SEQ_TYPE_HUE, "HUE", 0, "Hue", ""}, {SEQ_TYPE_SATURATION, "SATURATION", 0, "Saturation", ""}, {SEQ_TYPE_BLEND_COLOR, "COLOR", 0, "Color", ""}, diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c b/source/blender/makesrna/intern/rna_sequencer_api.c index 36bc50e73fb..52de98be502 100644 --- a/source/blender/makesrna/intern/rna_sequencer_api.c +++ b/source/blender/makesrna/intern/rna_sequencer_api.c @@ -49,20 +49,6 @@ # include "WM_api.h" -static void rna_Sequence_update_rnafunc(ID *id, Sequence *self, bool do_data) -{ - Scene *scene = (Scene *)id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, self); - - if (do_data) { - SEQ_time_update_recursive(scene, self); - // new_tstripdata(self); /* need 2.6x version of this. */ - } - - SEQ_time_update_sequence(scene, seqbase, self); -} - static void rna_Sequence_swap_internal(Sequence *seq_self, ReportList *reports, Sequence *seq_other) @@ -96,8 +82,7 @@ static Sequence *rna_Sequence_split( ID *id, Sequence *seq, Main *bmain, ReportList *reports, int frame, int split_method) { Scene *scene = (Scene *)id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); + ListBase *seqbase = SEQ_get_seqbase_by_seq(scene, seq); const char *error_msg = NULL; Sequence *r_seq = SEQ_edit_strip_split( @@ -576,8 +561,6 @@ static void rna_Sequences_meta_remove( static StripElem *rna_SequenceElements_append(ID *id, Sequence *seq, const char *filename) { Scene *scene = (Scene *)id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); StripElem *se; seq->strip->stripdata = se = MEM_reallocN(seq->strip->stripdata, @@ -586,7 +569,6 @@ static StripElem *rna_SequenceElements_append(ID *id, Sequence *seq, const char BLI_strncpy(se->name, filename, sizeof(se->name)); seq->len++; - SEQ_time_update_sequence(scene, seqbase, seq); WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene); return se; @@ -595,8 +577,6 @@ static StripElem *rna_SequenceElements_append(ID *id, Sequence *seq, const char static void rna_SequenceElements_pop(ID *id, Sequence *seq, ReportList *reports, int index) { Scene *scene = (Scene *)id; - Editing *ed = SEQ_editing_get(scene); - ListBase *seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, seq); StripElem *new_seq, *se; if (seq->len == 1) { @@ -629,8 +609,6 @@ static void rna_SequenceElements_pop(ID *id, Sequence *seq, ReportList *reports, MEM_freeN(seq->strip->stripdata); seq->strip->stripdata = new_seq; - SEQ_time_update_sequence(scene, seqbase, seq); - WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene); } @@ -669,11 +647,6 @@ void RNA_api_sequence_strip(StructRNA *srna) {0, NULL, 0, NULL, NULL}, }; - func = RNA_def_function(srna, "update", "rna_Sequence_update_rnafunc"); - RNA_def_function_flag(func, FUNC_USE_SELF_ID); - RNA_def_function_ui_description(func, "Update the strip dimensions"); - parm = RNA_def_boolean(func, "data", false, "Data", "Update strip data"); - func = RNA_def_function(srna, "strip_elem_from_frame", "SEQ_render_give_stripelem"); RNA_def_function_ui_description(func, "Return the strip element from a given frame or None"); parm = RNA_def_int(func, diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c index cefa445740d..0a656222fd5 100644 --- a/source/blender/makesrna/intern/rna_shader_fx.c +++ b/source/blender/makesrna/intern/rna_shader_fx.c @@ -142,9 +142,9 @@ static void rna_ShaderFx_name_set(PointerRNA *ptr, const char *value) BKE_animdata_fix_paths_rename_all(NULL, "shader_effects", oldname, gmd->name); } -static char *rna_ShaderFx_path(PointerRNA *ptr) +static char *rna_ShaderFx_path(const PointerRNA *ptr) { - ShaderFxData *gmd = ptr->data; + const ShaderFxData *gmd = ptr->data; char name_esc[sizeof(gmd->name) * 2]; BLI_str_escape(name_esc, gmd->name, sizeof(name_esc)); diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c index 3d51f80adde..e38481a845a 100644 --- a/source/blender/makesrna/intern/rna_sound.c +++ b/source/blender/makesrna/intern/rna_sound.c @@ -12,6 +12,22 @@ #include "DNA_sound_types.h" +#include "BKE_sound.h" + +/* Enumeration for Audio Channels, compatible with eSoundChannels */ +static const EnumPropertyItem rna_enum_audio_channels_items[] = { + {SOUND_CHANNELS_INVALID, "INVALID", ICON_NONE, "Invalid", "Invalid"}, + {SOUND_CHANNELS_MONO, "MONO", ICON_NONE, "Mono", "Mono"}, + {SOUND_CHANNELS_STEREO, "STEREO", ICON_NONE, "Stereo", "Stereo"}, + {SOUND_CHANNELS_STEREO_LFE, "STEREO_LFE", ICON_NONE, "Stereo LFE", "Stereo FX"}, + {SOUND_CHANNELS_SURROUND4, "CHANNELS_4", ICON_NONE, "4 Channels", "4 Channels"}, + {SOUND_CHANNELS_SURROUND5, "CHANNELS_5", ICON_NONE, "5 Channels", "5 Channels"}, + {SOUND_CHANNELS_SURROUND51, "SURROUND_51", ICON_NONE, "5.1 Surround", "5.1 Surround"}, + {SOUND_CHANNELS_SURROUND61, "SURROUND_61", ICON_NONE, "6.1 Surround", "6.1 Surround"}, + {SOUND_CHANNELS_SURROUND71, "SURROUND_71", ICON_NONE, "7.1 Surround", "7.1 Surround"}, + {0, NULL, 0, NULL, NULL}, +}; + #ifdef RNA_RUNTIME # include "BKE_context.h" @@ -70,6 +86,18 @@ static void rna_def_sound(BlenderRNA *brna) "If the file contains multiple audio channels they are rendered to a single one"); RNA_def_property_update(prop, 0, "rna_Sound_update"); + prop = RNA_def_property(srna, "samplerate", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "samplerate"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Samplerate", "Samplerate of the audio in Hz"); + + prop = RNA_def_property(srna, "channels", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "audio_channels"); + RNA_def_property_enum_items(prop, rna_enum_audio_channels_items); + RNA_def_property_enum_default(prop, SOUND_CHANNELS_INVALID); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Audio channels", "Definition of audio channels"); + RNA_api_sound(srna); } diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 47871f83392..cae86801402 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -87,8 +87,8 @@ const EnumPropertyItem rna_enum_space_type_items[] = { /* empty must be here for python, is skipped for UI */ {SPACE_EMPTY, "EMPTY", ICON_NONE, "Empty", ""}, - /* General */ - {0, "", ICON_NONE, "General", ""}, + /* General. */ + RNA_ENUM_ITEM_HEADING("General", NULL), {SPACE_VIEW3D, "VIEW_3D", ICON_VIEW3D, @@ -107,8 +107,8 @@ const EnumPropertyItem rna_enum_space_type_items[] = { {SPACE_SEQ, "SEQUENCE_EDITOR", ICON_SEQUENCE, "Video Sequencer", "Video editing tools"}, {SPACE_CLIP, "CLIP_EDITOR", ICON_TRACKER, "Movie Clip Editor", "Motion tracking tools"}, - /* Animation */ - {0, "", ICON_NONE, "Animation", ""}, + /* Animation. */ + RNA_ENUM_ITEM_HEADING("Animation", NULL), #if 0 {SPACE_ACTION, "TIMELINE", @@ -124,8 +124,8 @@ const EnumPropertyItem rna_enum_space_type_items[] = { "Edit drivers and keyframe interpolation"}, {SPACE_NLA, "NLA_EDITOR", ICON_NLA, "Nonlinear Animation", "Combine and layer Actions"}, - /* Scripting */ - {0, "", ICON_NONE, "Scripting", ""}, + /* Scripting. */ + RNA_ENUM_ITEM_HEADING("Scripting", NULL), {SPACE_TEXT, "TEXT_EDITOR", ICON_TEXT, @@ -152,8 +152,8 @@ const EnumPropertyItem rna_enum_space_type_items[] = { "Global bar at the bottom of the " "screen for general status information"}, - /* Data */ - {0, "", ICON_NONE, "Data", ""}, + /* Data. */ + RNA_ENUM_ITEM_HEADING("Data", NULL), {SPACE_OUTLINER, "OUTLINER", ICON_OUTLINER, @@ -435,28 +435,28 @@ static const EnumPropertyItem rna_enum_studio_light_items[] = { }; static const EnumPropertyItem rna_enum_view3dshading_render_pass_type_items[] = { - {0, "", ICON_NONE, "General", ""}, + RNA_ENUM_ITEM_HEADING("General", NULL), {EEVEE_RENDER_PASS_COMBINED, "COMBINED", 0, "Combined", ""}, {EEVEE_RENDER_PASS_EMIT, "EMISSION", 0, "Emission", ""}, {EEVEE_RENDER_PASS_ENVIRONMENT, "ENVIRONMENT", 0, "Environment", ""}, {EEVEE_RENDER_PASS_AO, "AO", 0, "Ambient Occlusion", ""}, {EEVEE_RENDER_PASS_SHADOW, "SHADOW", 0, "Shadow", ""}, - {0, "", ICON_NONE, "Light", ""}, + RNA_ENUM_ITEM_HEADING("Light", NULL), {EEVEE_RENDER_PASS_DIFFUSE_LIGHT, "DIFFUSE_LIGHT", 0, "Diffuse Light", ""}, {EEVEE_RENDER_PASS_DIFFUSE_COLOR, "DIFFUSE_COLOR", 0, "Diffuse Color", ""}, {EEVEE_RENDER_PASS_SPECULAR_LIGHT, "SPECULAR_LIGHT", 0, "Specular Light", ""}, {EEVEE_RENDER_PASS_SPECULAR_COLOR, "SPECULAR_COLOR", 0, "Specular Color", ""}, {EEVEE_RENDER_PASS_VOLUME_LIGHT, "VOLUME_LIGHT", 0, "Volume Light", ""}, - {0, "", ICON_NONE, "Effects", ""}, + RNA_ENUM_ITEM_HEADING("Effects", NULL), {EEVEE_RENDER_PASS_BLOOM, "BLOOM", 0, "Bloom", ""}, - {0, "", ICON_NONE, "Data", ""}, + RNA_ENUM_ITEM_HEADING("Data", NULL), {EEVEE_RENDER_PASS_NORMAL, "NORMAL", 0, "Normal", ""}, {EEVEE_RENDER_PASS_MIST, "MIST", 0, "Mist", ""}, - {0, "", ICON_NONE, "Shader AOV", ""}, + RNA_ENUM_ITEM_HEADING("Shader AOV", NULL), {EEVEE_RENDER_PASS_AOV, "AOV", 0, "AOV", ""}, {0, NULL, 0, NULL, NULL}, @@ -1565,7 +1565,7 @@ static int rna_SpaceView3D_icon_from_show_object_viewport_get(PointerRNA *ptr) &v3d->object_type_exclude_select); } -static char *rna_View3DShading_path(PointerRNA *UNUSED(ptr)) +static char *rna_View3DShading_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("shading"); } @@ -1575,7 +1575,7 @@ static PointerRNA rna_SpaceView3D_overlay_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_View3DOverlay, ptr->data); } -static char *rna_View3DOverlay_path(PointerRNA *UNUSED(ptr)) +static char *rna_View3DOverlay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("overlay"); } @@ -1587,12 +1587,12 @@ static PointerRNA rna_SpaceImage_overlay_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_SpaceImageOverlay, ptr->data); } -static char *rna_SpaceImageOverlay_path(PointerRNA *UNUSED(ptr)) +static char *rna_SpaceImageOverlay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("overlay"); } -static char *rna_SpaceUVEditor_path(PointerRNA *UNUSED(ptr)) +static char *rna_SpaceUVEditor_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("uv_editor"); } @@ -2024,7 +2024,7 @@ static void rna_SpaceProperties_context_update(Main *UNUSED(bmain), } } -static int rna_SpaceProperties_tab_search_results_getlength(PointerRNA *ptr, +static int rna_SpaceProperties_tab_search_results_getlength(const PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) { SpaceProperties *sbuts = ptr->data; @@ -2426,12 +2426,12 @@ static void rna_Sequencer_view_type_update(Main *UNUSED(bmain), ED_area_tag_refresh(area); } -static char *rna_SpaceSequencerPreviewOverlay_path(PointerRNA *UNUSED(ptr)) +static char *rna_SpaceSequencerPreviewOverlay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("preview_overlay"); } -static char *rna_SpaceSequencerTimelineOverlay_path(PointerRNA *UNUSED(ptr)) +static char *rna_SpaceSequencerTimelineOverlay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("timeline_overlay"); } @@ -2442,7 +2442,7 @@ static PointerRNA rna_SpaceNode_overlay_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_SpaceNodeOverlay, ptr->data); } -static char *rna_SpaceNodeOverlay_path(PointerRNA *UNUSED(ptr)) +static char *rna_SpaceNodeOverlay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("overlay"); } @@ -2635,7 +2635,7 @@ static void rna_SpaceClipEditor_view_type_update(Main *UNUSED(bmain), /* File browser. */ -static char *rna_FileSelectParams_path(PointerRNA *UNUSED(ptr)) +static char *rna_FileSelectParams_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("params"); } @@ -3338,7 +3338,7 @@ static struct IDFilterEnumPropertyItem rna_enum_space_file_id_filter_categories[ {FILTER_ID_AR | FILTER_ID_CU_LEGACY | FILTER_ID_LT | FILTER_ID_MB | FILTER_ID_ME | FILTER_ID_CV | FILTER_ID_PT | FILTER_ID_VO, "category_geometry", - ICON_NODETREE, + ICON_GEOMETRY_NODES, "Geometry", "Show meshes, curves, lattice, armatures and metaballs data"}, {FILTER_ID_LS | FILTER_ID_MA | FILTER_ID_NT | FILTER_ID_TE, @@ -5461,6 +5461,17 @@ static void rna_def_space_image(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Show Mask Editor", "Show Mask editing related properties"); + /* Gizmo Toggles. */ + prop = RNA_def_property(srna, "show_gizmo", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "gizmo_flag", SI_GIZMO_HIDE); + RNA_def_property_ui_text(prop, "Show Gizmo", "Show gizmos of all types"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL); + + prop = RNA_def_property(srna, "show_gizmo_navigate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "gizmo_flag", SI_GIZMO_HIDE_NAVIGATE); + RNA_def_property_ui_text(prop, "Navigate Gizmo", "Viewport navigation gizmo"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL); + /* Overlays */ prop = RNA_def_property(srna, "overlay", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_NEVER_NULL); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 6f7ee966723..3b28dc70e9e 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -98,22 +98,22 @@ const EnumPropertyItem rna_enum_texture_type_items[] = { #ifndef RNA_RUNTIME static const EnumPropertyItem blend_type_items[] = { {MTEX_BLEND, "MIX", 0, "Mix", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MTEX_DARK, "DARKEN", 0, "Darken", ""}, {MTEX_MUL, "MULTIPLY", 0, "Multiply", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MTEX_LIGHT, "LIGHTEN", 0, "Lighten", ""}, {MTEX_SCREEN, "SCREEN", 0, "Screen", ""}, {MTEX_ADD, "ADD", 0, "Add", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MTEX_OVERLAY, "OVERLAY", 0, "Overlay", ""}, {MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, {MTEX_LIN_LIGHT, "LINEAR_LIGHT", 0, "Linear Light", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MTEX_DIFF, "DIFFERENCE", 0, "Difference", ""}, {MTEX_SUB, "SUBTRACT", 0, "Subtract", ""}, {MTEX_DIV, "DIVIDE", 0, "Divide", ""}, - {0, "", ICON_NONE, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MTEX_BLEND_HUE, "HUE", 0, "Hue", ""}, {MTEX_BLEND_SAT, "SATURATION", 0, "Saturation", ""}, {MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""}, @@ -291,7 +291,7 @@ void rna_TextureSlot_update(bContext *C, PointerRNA *ptr) } } -char *rna_TextureSlot_path(PointerRNA *ptr) +char *rna_TextureSlot_path(const PointerRNA *ptr) { MTex *mtex = ptr->data; diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index e604469e3fd..b9acd57430b 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -41,7 +41,7 @@ # include "WM_api.h" -static char *rna_tracking_path(PointerRNA *UNUSED(ptr)) +static char *rna_tracking_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tracking"); } @@ -72,7 +72,7 @@ static void rna_tracking_defaultSettings_searchUpdate(Main *UNUSED(bmain), } } -static char *rna_trackingTrack_path(PointerRNA *ptr) +static char *rna_trackingTrack_path(const PointerRNA *ptr) { MovieClip *clip = (MovieClip *)ptr->owner_id; MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data; @@ -255,7 +255,7 @@ static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value) } } -static char *rna_trackingPlaneTrack_path(PointerRNA *ptr) +static char *rna_trackingPlaneTrack_path(const PointerRNA *ptr) { MovieClip *clip = (MovieClip *)ptr->owner_id; MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data; @@ -289,7 +289,7 @@ static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value) } } -static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr)) +static char *rna_trackingCamera_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tracking.camera"); } @@ -321,7 +321,7 @@ static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value) } } -static char *rna_trackingStabilization_path(PointerRNA *UNUSED(ptr)) +static char *rna_trackingStabilization_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("tracking.stabilization"); } @@ -557,7 +557,7 @@ static void rna_tracking_markerPattern_update(Main *UNUSED(bmain), { MovieTrackingMarker *marker = (MovieTrackingMarker *)ptr->data; - BKE_tracking_marker_clamp(marker, CLAMP_PAT_DIM); + BKE_tracking_marker_clamp_search_size(marker); } static void rna_tracking_markerSearch_update(Main *UNUSED(bmain), @@ -566,7 +566,7 @@ static void rna_tracking_markerSearch_update(Main *UNUSED(bmain), { MovieTrackingMarker *marker = (MovieTrackingMarker *)ptr->data; - BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM); + BKE_tracking_marker_clamp_search_size(marker); } static void rna_tracking_markerPattern_boundbox_get(PointerRNA *ptr, float *values) diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 6f57e2755ee..43e8879fc17 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -62,23 +62,23 @@ const EnumPropertyItem rna_enum_preference_section_items[] = { {USER_SECTION_LIGHT, "LIGHTS", 0, "Lights", ""}, {USER_SECTION_EDITING, "EDITING", 0, "Editing", ""}, {USER_SECTION_ANIMATION, "ANIMATION", 0, "Animation", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {USER_SECTION_ADDONS, "ADDONS", 0, "Add-ons", ""}, #if 0 /* def WITH_USERDEF_WORKSPACES */ - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {USER_SECTION_WORKSPACE_CONFIG, "WORKSPACE_CONFIG", 0, "Configuration File", ""}, {USER_SECTION_WORKSPACE_ADDONS, "WORKSPACE_ADDONS", 0, "Add-on Overrides", ""}, {USER_SECTION_WORKSPACE_KEYMAPS, "WORKSPACE_KEYMAPS", 0, "Keymap Overrides", ""}, #endif - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {USER_SECTION_INPUT, "INPUT", 0, "Input", ""}, {USER_SECTION_NAVIGATION, "NAVIGATION", 0, "Navigation", ""}, {USER_SECTION_KEYMAP, "KEYMAP", 0, "Keymap", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {USER_SECTION_SYSTEM, "SYSTEM", 0, "System", ""}, {USER_SECTION_SAVE_LOAD, "SAVE_LOAD", 0, "Save & Load", ""}, {USER_SECTION_FILE_PATHS, "FILE_PATHS", 0, "File Paths", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {USER_SECTION_EXPERIMENTAL, "EXPERIMENTAL", 0, "Experimental", ""}, {0, NULL, 0, NULL, NULL}, }; @@ -1101,6 +1101,16 @@ int rna_show_statusbar_vram_editable(struct PointerRNA *UNUSED(ptr), const char return GPU_mem_stats_supported() ? PROP_EDITABLE : 0; } +static int rna_userdef_experimental_use_new_curve_tools_editable(struct PointerRNA *UNUSED(ptr), + const char **r_info) +{ + if (U.experimental.use_new_curves_type) { + return PROP_EDITABLE; + } + *r_info = "Only available when new curves type is enabled"; + return 0; +} + #else # define USERDEF_TAG_DIRTY_PROPERTY_UPDATE_ENABLE \ @@ -6394,6 +6404,12 @@ static void rna_def_userdef_experimental(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "use_new_curves_type", 1); RNA_def_property_ui_text(prop, "New Curves Type", "Enable the new curves data type in the UI"); + prop = RNA_def_property(srna, "use_new_curves_tools", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "use_new_curves_tools", 1); + RNA_def_property_editable_func(prop, "rna_userdef_experimental_use_new_curve_tools_editable"); + RNA_def_property_ui_text( + prop, "New Curves Tools", "Enable additional features for the new curves data block"); + prop = RNA_def_property(srna, "use_cycles_debug", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "use_cycles_debug", 1); RNA_def_property_ui_text(prop, "Cycles Debug", "Enable Cycles debugging options for developers"); diff --git a/source/blender/makesrna/intern/rna_volume.c b/source/blender/makesrna/intern/rna_volume.c index 12cb35b239d..6d4ea18fc38 100644 --- a/source/blender/makesrna/intern/rna_volume.c +++ b/source/blender/makesrna/intern/rna_volume.c @@ -46,12 +46,12 @@ const EnumPropertyItem rna_enum_volume_grid_data_type_items[] = { # include "WM_api.h" # include "WM_types.h" -static char *rna_VolumeRender_path(PointerRNA *UNUSED(ptr)) +static char *rna_VolumeRender_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("render"); } -static char *rna_VolumeDisplay_path(PointerRNA *UNUSED(ptr)) +static char *rna_VolumeDisplay_path(const PointerRNA *UNUSED(ptr)) { return BLI_strdup("display"); } @@ -485,6 +485,21 @@ static void rna_def_volume_render(BlenderRNA *brna) RNA_def_struct_sdna(srna, "VolumeRender"); RNA_def_struct_path_func(srna, "rna_VolumeRender_path"); + static const EnumPropertyItem precision_items[] = { + {VOLUME_PRECISION_FULL, "FULL", 0, "Full", "Full float (Use 32 bit for all data)"}, + {VOLUME_PRECISION_HALF, "HALF", 0, "Half", "Half float (Use 16 bit for all data)"}, + {VOLUME_PRECISION_VARIABLE, "VARIABLE", 0, "Variable", "Use variable bit quantization"}, + {0, NULL, 0, NULL, NULL}, + }; + + prop = RNA_def_property(srna, "precision", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, precision_items); + RNA_def_property_ui_text(prop, + "Precision", + "Specify volume data precision. Lower values reduce memory consumption " + "at the cost of detail"); + RNA_def_property_update(prop, 0, "rna_Volume_update_display"); + static const EnumPropertyItem space_items[] = { {VOLUME_SPACE_OBJECT, "OBJECT", diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index b09a9ab0733..3ff9e6be3ce 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -24,6 +24,7 @@ #include "rna_internal.h" +#include "WM_api.h" #include "WM_types.h" #ifdef RNA_RUNTIME @@ -36,16 +37,16 @@ static const EnumPropertyItem event_mouse_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5", ""}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6", ""}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MOUSEMOVE, "MOUSEMOVE", 0, "Move", ""}, {MOUSEPAN, "TRACKPADPAN", 0, "Mouse/Trackpad Pan", ""}, {MOUSEZOOM, "TRACKPADZOOM", 0, "Mouse/Trackpad Zoom", ""}, {MOUSEROTATE, "MOUSEROTATE", 0, "Mouse/Trackpad Rotate", ""}, {MOUSESMARTZOOM, "MOUSESMARTZOOM", 0, "Mouse/Trackpad Smart Zoom", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {WHEELUPMOUSE, "WHEELUPMOUSE", 0, "Wheel Up", ""}, {WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, "Wheel Down", ""}, {WHEELINMOUSE, "WHEELINMOUSE", 0, "Wheel In", ""}, @@ -123,6 +124,23 @@ static const EnumPropertyItem event_ndof_type_items[] = { }; #endif /* RNA_RUNTIME */ +/** + * Job types for use in the `bpy.app.is_job_running(job_type)` call. + * + * This is a subset of the `WM_JOB_TYPE_...` anonymous enum defined in `WM_api.h`. It is + * intentionally kept as a subset, such that by default how jobs are handled is kept as an + * "internal implementation detail" of Blender, rather than a public, reliable part of the API. + * + * This array can be expanded on a case-by-case basis, when there is a clear and testable use case. + */ +const EnumPropertyItem rna_enum_wm_job_type_items[] = { + {WM_JOB_TYPE_RENDER, "RENDER", 0, "Regular rendering", ""}, + {WM_JOB_TYPE_RENDER_PREVIEW, "RENDER_PREVIEW", 0, "Rendering previews", ""}, + {WM_JOB_TYPE_OBJECT_BAKE, "OBJECT_BAKE", 0, "Object Baking", ""}, + {WM_JOB_TYPE_COMPOSITE, "COMPOSITE", 0, "Compositing", ""}, + {0, NULL, 0, NULL, NULL}, +}; + const EnumPropertyItem rna_enum_event_type_items[] = { /* - Note we abuse 'tooltip' message here to store a 'compact' form of some (too) long names. * - Intentionally excluded: #CAPSLOCKKEY, #UNKNOWNKEY. @@ -135,22 +153,22 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", "MB5"}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", "MB6"}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", "MB7"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {MOUSEMOVE, "MOUSEMOVE", 0, "Mouse Move", "MsMov"}, {INBETWEEN_MOUSEMOVE, "INBETWEEN_MOUSEMOVE", 0, "In-between Move", "MsSubMov"}, {MOUSEPAN, "TRACKPADPAN", 0, "Mouse/Trackpad Pan", "MsPan"}, {MOUSEZOOM, "TRACKPADZOOM", 0, "Mouse/Trackpad Zoom", "MsZoom"}, {MOUSEROTATE, "MOUSEROTATE", 0, "Mouse/Trackpad Rotate", "MsRot"}, {MOUSESMARTZOOM, "MOUSESMARTZOOM", 0, "Mouse/Trackpad Smart Zoom", "MsSmartZoom"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {WHEELUPMOUSE, "WHEELUPMOUSE", 0, "Wheel Up", "WhUp"}, {WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, "Wheel Down", "WhDown"}, {WHEELINMOUSE, "WHEELINMOUSE", 0, "Wheel In", "WhIn"}, {WHEELOUTMOUSE, "WHEELOUTMOUSE", 0, "Wheel Out", "WhOut"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {EVT_AKEY, "A", 0, "A", ""}, {EVT_BKEY, "B", 0, "B", ""}, {EVT_CKEY, "C", 0, "C", ""}, @@ -177,7 +195,7 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {EVT_XKEY, "X", 0, "X", ""}, {EVT_YKEY, "Y", 0, "Y", ""}, {EVT_ZKEY, "Z", 0, "Z", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {EVT_ZEROKEY, "ZERO", 0, "0", ""}, {EVT_ONEKEY, "ONE", 0, "1", ""}, {EVT_TWOKEY, "TWO", 0, "2", ""}, @@ -188,14 +206,14 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {EVT_SEVENKEY, "SEVEN", 0, "7", ""}, {EVT_EIGHTKEY, "EIGHT", 0, "8", ""}, {EVT_NINEKEY, "NINE", 0, "9", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {EVT_LEFTCTRLKEY, "LEFT_CTRL", 0, "Left Ctrl", "CtrlL"}, {EVT_LEFTALTKEY, "LEFT_ALT", 0, "Left Alt", "AltL"}, {EVT_LEFTSHIFTKEY, "LEFT_SHIFT", 0, "Left Shift", "ShiftL"}, {EVT_RIGHTALTKEY, "RIGHT_ALT", 0, "Right Alt", "AltR"}, {EVT_RIGHTCTRLKEY, "RIGHT_CTRL", 0, "Right Ctrl", "CtrlR"}, {EVT_RIGHTSHIFTKEY, "RIGHT_SHIFT", 0, "Right Shift", "ShiftR"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {EVT_OSKEY, "OSKEY", 0, "OS Key", "Cmd"}, {EVT_APPKEY, "APP", 0, "Application", "App"}, {EVT_GRLESSKEY, "GRLESS", 0, "Grless", ""}, @@ -268,14 +286,14 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {EVT_PAGEUPKEY, "PAGE_UP", 0, "Page Up", "PgUp"}, {EVT_PAGEDOWNKEY, "PAGE_DOWN", 0, "Page Down", "PgDown"}, {EVT_ENDKEY, "END", 0, "End", ""}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {EVT_MEDIAPLAY, "MEDIA_PLAY", 0, "Media Play/Pause", ">/||"}, {EVT_MEDIASTOP, "MEDIA_STOP", 0, "Media Stop", "Stop"}, {EVT_MEDIAFIRST, "MEDIA_FIRST", 0, "Media First", "|<<"}, {EVT_MEDIALAST, "MEDIA_LAST", 0, "Media Last", ">>|"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {KM_TEXTINPUT, "TEXTINPUT", 0, "Text Input", "TxtIn"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {WINDEACTIVATE, "WINDOW_DEACTIVATE", 0, "Window Deactivate", ""}, {TIMER, "TIMER", 0, "Timer", "Tmr"}, {TIMER0, "TIMER0", 0, "Timer 0", "Tmr0"}, @@ -285,7 +303,7 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {TIMERAUTOSAVE, "TIMER_AUTOSAVE", 0, "Timer Autosave", "TmrSave"}, {TIMERREPORT, "TIMER_REPORT", 0, "Timer Report", "TmrReport"}, {TIMERREGION, "TIMERREGION", 0, "Timer Region", "TmrReg"}, - {0, "", 0, NULL, NULL}, + RNA_ENUM_ITEM_SEPR, {NDOF_MOTION, "NDOF_MOTION", 0, "NDOF Motion", "NdofMov"}, /* buttons on all 3dconnexion devices */ {NDOF_BUTTON_MENU, "NDOF_BUTTON_MENU", 0, "NDOF Menu", "NdofMenu"}, @@ -896,8 +914,10 @@ static void rna_wmKeyMapItem_map_type_set(PointerRNA *ptr, int value) } } -/* assumes value to be an enum from rna_enum_event_type_items */ -/* function makes sure keymodifiers are only valid keys, ESC keeps it unaltered */ +/** + * Assumes value to be an enum from rna_enum_event_type_items. + * Function makes sure key-modifiers are only valid keys, ESC keeps it unaltered. + */ static void rna_wmKeyMapItem_keymodifier_set(PointerRNA *ptr, int value) { wmKeyMapItem *kmi = ptr->data; @@ -1155,9 +1175,7 @@ static int rna_wmKeyMapItem_idname_length(PointerRNA *ptr) { wmKeyMapItem *kmi = ptr->data; char pyname[OP_MAX_TYPENAME]; - - WM_operator_py_idname(pyname, kmi->idname); - return strlen(pyname); + return WM_operator_py_idname(pyname, kmi->idname); } static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value) @@ -2599,6 +2617,9 @@ static void rna_def_keyconfig(BlenderRNA *brna) "rna_wmKeyMapItem_idname_get", "rna_wmKeyMapItem_idname_length", "rna_wmKeyMapItem_idname_set"); + RNA_def_property_string_search_func(prop, + "WM_operatortype_idname_visit_for_search", + PROP_STRING_SEARCH_SORT | PROP_STRING_SEARCH_SUGGESTION); RNA_def_struct_name_property(srna, prop); RNA_def_property_update(prop, 0, "rna_KeyMapItem_update"); diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 5da65510399..b9f36d35ee8 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -23,6 +23,7 @@ #include "wm_cursors.h" #include "wm_event_types.h" +#include "WM_api.h" #include "WM_types.h" #include "rna_internal.h" /* own include */ diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c index a04b29b8815..dcfa1bbca51 100644 --- a/source/blender/makesrna/intern/rna_xr.c +++ b/source/blender/makesrna/intern/rna_xr.c @@ -849,7 +849,7 @@ bool rna_XrSessionState_active_action_set_set(bContext *C, const char *action_se { # ifdef WITH_XR_OPENXR wmWindowManager *wm = CTX_wm_manager(C); - return WM_xr_active_action_set_set(&wm->xr, action_set_name); + return WM_xr_active_action_set_set(&wm->xr, action_set_name, true); # else UNUSED_VARS(C, action_set_name); return false; @@ -1196,6 +1196,50 @@ static int rna_XrEventData_action_length(PointerRNA *ptr) # endif } +static void rna_XrEventData_user_path_get(PointerRNA *ptr, char *r_value) +{ +# ifdef WITH_XR_OPENXR + const wmXrActionData *data = ptr->data; + strcpy(r_value, data->user_path); +# else + UNUSED_VARS(ptr); + r_value[0] = '\0'; +# endif +} + +static int rna_XrEventData_user_path_length(PointerRNA *ptr) +{ +# ifdef WITH_XR_OPENXR + const wmXrActionData *data = ptr->data; + return strlen(data->user_path); +# else + UNUSED_VARS(ptr); + return 0; +# endif +} + +static void rna_XrEventData_user_path_other_get(PointerRNA *ptr, char *r_value) +{ +# ifdef WITH_XR_OPENXR + const wmXrActionData *data = ptr->data; + strcpy(r_value, data->user_path_other); +# else + UNUSED_VARS(ptr); + r_value[0] = '\0'; +# endif +} + +static int rna_XrEventData_user_path_other_length(PointerRNA *ptr) +{ +# ifdef WITH_XR_OPENXR + const wmXrActionData *data = ptr->data; + return strlen(data->user_path_other); +# else + UNUSED_VARS(ptr); + return 0; +# endif +} + static int rna_XrEventData_type_get(PointerRNA *ptr) { # ifdef WITH_XR_OPENXR @@ -2402,6 +2446,19 @@ static void rna_def_xr_eventdata(BlenderRNA *brna) prop, "rna_XrEventData_action_get", "rna_XrEventData_action_length", NULL); RNA_def_property_ui_text(prop, "Action", "XR action name"); + prop = RNA_def_property(srna, "user_path", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_string_funcs( + prop, "rna_XrEventData_user_path_get", "rna_XrEventData_user_path_length", NULL); + RNA_def_property_ui_text(prop, "User Path", "User path of the action. E.g. \"/user/hand/left\""); + + prop = RNA_def_property(srna, "user_path_other", PROP_STRING, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_string_funcs( + prop, "rna_XrEventData_user_path_other_get", "rna_XrEventData_user_path_other_length", NULL); + RNA_def_property_ui_text( + prop, "User Path Other", "Other user path, for bimanual actions. E.g. \"/user/hand/right\""); + prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_items(prop, rna_enum_xr_action_types); |