RNA: add array get/set functions that limit the number of elements

Add the corresponding int/boolean functions for
RNA_property_float_{get/set}_array_at_most functions.
This commit is contained in:
Campbell Barton
2025-02-16 18:39:33 +11:00
parent 3b11f5dc44
commit a8feffdc18
2 changed files with 82 additions and 0 deletions

View File

@@ -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);

View File

@@ -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<bool, RNA_STACK_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<bool, RNA_STACK_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<int, RNA_STACK_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<int, RNA_STACK_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)
{