diff --git a/source/blender/makesrna/RNA_access.hh b/source/blender/makesrna/RNA_access.hh index a958ad988af..3114202a32a 100644 --- a/source/blender/makesrna/RNA_access.hh +++ b/source/blender/makesrna/RNA_access.hh @@ -418,8 +418,16 @@ bool RNA_property_update_check(PropertyRNA *prop); bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value); void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values); +void RNA_property_boolean_get_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + bool *values, + int values_num); bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const bool *values); +void RNA_property_boolean_set_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + const bool *values, + int values_num); void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, bool value); bool RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, bool *values); @@ -428,10 +436,18 @@ bool RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value); void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values); +void RNA_property_int_get_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + int *values, + int values_num); void RNA_property_int_get_array_range(PointerRNA *ptr, PropertyRNA *prop, int values[2]); int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index); void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values); void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value); +void RNA_property_int_set_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + const int *values, + int values_num); int RNA_property_int_get_default(PointerRNA *ptr, PropertyRNA *prop); bool RNA_property_int_set_default(PropertyRNA *prop, int value); void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values); diff --git a/source/blender/makesrna/intern/rna_access.cc b/source/blender/makesrna/intern/rna_access.cc index 1e96f4d760e..6f106efae9b 100644 --- a/source/blender/makesrna/intern/rna_access.cc +++ b/source/blender/makesrna/intern/rna_access.cc @@ -2585,6 +2585,22 @@ void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *va rna_property_boolean_get_default_array_values(ptr, bprop, values); } } +void RNA_property_boolean_get_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + bool *values, + int values_num) +{ + BLI_assert(values_num >= 0); + const int array_num = RNA_property_array_length(ptr, prop); + if (values_num >= array_num) { + RNA_property_boolean_get_array(ptr, prop, values); + return; + } + + blender::Array value_buf(array_num); + RNA_property_boolean_get_array(ptr, prop, value_buf.data()); + memcpy(values, value_buf.data(), sizeof(*values) * values_num); +} bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index) { @@ -2672,6 +2688,23 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const bo } } } +void RNA_property_boolean_set_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + const bool *values, + int values_num) +{ + BLI_assert(values_num >= 0); + const int array_num = RNA_property_array_length(ptr, prop); + if (values_num >= array_num) { + RNA_property_boolean_set_array(ptr, prop, values); + return; + } + + blender::Array value_buf(array_num); + RNA_property_boolean_get_array(ptr, prop, value_buf.data()); + memcpy(value_buf.data(), values, sizeof(*values) * values_num); + RNA_property_boolean_set_array(ptr, prop, value_buf.data()); +} void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, bool value) { @@ -2928,6 +2961,22 @@ void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values) rna_property_int_get_default_array_values(ptr, iprop, values); } } +void RNA_property_int_get_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + int *values, + int values_num) +{ + BLI_assert(values_num >= 0); + const int array_num = RNA_property_array_length(ptr, prop); + if (values_num >= array_num) { + RNA_property_int_get_array(ptr, prop, values); + return; + } + + blender::Array value_buf(array_num); + RNA_property_int_get_array(ptr, prop, value_buf.data()); + memcpy(values, value_buf.data(), sizeof(*values) * values_num); +} void RNA_property_int_get_array_range(PointerRNA *ptr, PropertyRNA *prop, int values[2]) { @@ -3031,6 +3080,23 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v } } } +void RNA_property_int_set_array_at_most(PointerRNA *ptr, + PropertyRNA *prop, + const int *values, + int values_num) +{ + BLI_assert(values_num >= 0); + const int array_num = RNA_property_array_length(ptr, prop); + if (values_num >= array_num) { + RNA_property_int_set_array(ptr, prop, values); + return; + } + + blender::Array value_buf(array_num); + RNA_property_int_get_array(ptr, prop, value_buf.data()); + memcpy(value_buf.data(), values, sizeof(*values) * values_num); + RNA_property_int_set_array(ptr, prop, value_buf.data()); +} void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value) {