Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2018-11-11 20:56:42 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2018-11-15 19:42:03 +0300
commite6276e1748912183ca87df21f0efdeefd77639f7 (patch)
tree6a5b610da7892c45e562acaf94f24f1ee88db0f0 /source/blender/makesrna/intern/rna_access.c
parent8610b57271eb792b7fbdf31596ab432794ba7a88 (diff)
RNA: always allow fallback from defaultarray to defaultvalue.
The python getters for the array already allowed that, but not the actual C RNA access functions. This is inconsistent, so implement the fallback in all cases. Now if by default the property should contain the same value in all positions, it is not necessary to actually use an array. Reviewers: campbellbarton Differential Revision: https://developer.blender.org/D3940
Diffstat (limited to 'source/blender/makesrna/intern/rna_access.c')
-rw-r--r--source/blender/makesrna/intern/rna_access.c72
1 files changed, 51 insertions, 21 deletions
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index f52e13ba1c9..a0ceb6ce66a 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -2309,6 +2309,20 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
}
}
+static void rna_property_boolean_get_default_array_values(BoolPropertyRNA *bprop, bool *values)
+{
+ unsigned int length = bprop->property.totarraylength;
+
+ if (bprop->defaultarray) {
+ memcpy(values, bprop->defaultarray, sizeof(bool) * length);
+ }
+ else {
+ for (unsigned int i = 0; i < length; i++) {
+ values[i] = bprop->defaultvalue;
+ }
+ }
+}
+
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
{
BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
@@ -2334,10 +2348,8 @@ void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *va
bprop->getarray(ptr, values);
else if (bprop->getarray_ex)
bprop->getarray_ex(ptr, prop, values);
- else if (bprop->defaultarray)
- memcpy(values, bprop->defaultarray, sizeof(bool) * prop->totarraylength);
else
- memset(values, 0, sizeof(bool) * prop->totarraylength);
+ rna_property_boolean_get_default_array_values(bprop, values);
}
bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -2461,10 +2473,8 @@ void RNA_property_boolean_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA
if (prop->arraydimension == 0)
values[0] = bprop->defaultvalue;
- else if (bprop->defaultarray)
- memcpy(values, bprop->defaultarray, sizeof(bool) * prop->totarraylength);
else
- memset(values, 0, sizeof(bool) * prop->totarraylength);
+ rna_property_boolean_get_default_array_values(bprop, values);
}
bool RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -2544,6 +2554,20 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
}
}
+static void rna_property_int_get_default_array_values(IntPropertyRNA *iprop, int *values)
+{
+ unsigned int length = iprop->property.totarraylength;
+
+ if (iprop->defaultarray) {
+ memcpy(values, iprop->defaultarray, sizeof(int) * length);
+ }
+ else {
+ for (unsigned int i = 0; i < length; i++) {
+ values[i] = iprop->defaultvalue;
+ }
+ }
+}
+
void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
{
IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
@@ -2565,10 +2589,8 @@ void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
iprop->getarray(ptr, values);
else if (iprop->getarray_ex)
iprop->getarray_ex(ptr, prop, values);
- else if (iprop->defaultarray)
- memcpy(values, iprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int) * prop->totarraylength);
+ rna_property_int_get_default_array_values(iprop, values);
}
void RNA_property_int_get_array_range(PointerRNA *ptr, PropertyRNA *prop, int values[2])
@@ -2716,10 +2738,8 @@ void RNA_property_int_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *pr
if (prop->arraydimension == 0)
values[0] = iprop->defaultvalue;
- else if (iprop->defaultarray)
- memcpy(values, iprop->defaultarray, sizeof(int) * prop->totarraylength);
else
- memset(values, 0, sizeof(int) * prop->totarraylength);
+ rna_property_int_get_default_array_values(iprop, values);
}
int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -2809,6 +2829,20 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
}
}
+static void rna_property_float_get_default_array_values(FloatPropertyRNA *fprop, float *values)
+{
+ unsigned int length = fprop->property.totarraylength;
+
+ if (fprop->defaultarray) {
+ memcpy(values, fprop->defaultarray, sizeof(float) * length);
+ }
+ else {
+ for (unsigned int i = 0; i < length; i++) {
+ values[i] = fprop->defaultvalue;
+ }
+ }
+}
+
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
{
FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop;
@@ -2836,10 +2870,8 @@ void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *val
fprop->getarray(ptr, values);
else if (fprop->getarray_ex)
fprop->getarray_ex(ptr, prop, values);
- else if (fprop->defaultarray)
- memcpy(values, fprop->defaultarray, sizeof(float) * prop->totarraylength);
else
- memset(values, 0, sizeof(float) * prop->totarraylength);
+ rna_property_float_get_default_array_values(fprop, values);
}
void RNA_property_float_get_array_range(PointerRNA *ptr, PropertyRNA *prop, float values[2])
@@ -3003,10 +3035,8 @@ void RNA_property_float_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *
if (prop->arraydimension == 0)
values[0] = fprop->defaultvalue;
- else if (fprop->defaultarray)
- memcpy(values, fprop->defaultarray, sizeof(float) * prop->totarraylength);
else
- memset(values, 0, sizeof(float) * prop->totarraylength);
+ rna_property_float_get_default_array_values(fprop, values);
}
float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
@@ -6438,15 +6468,15 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *UNUSE
if (!(parm->flag_parameter & PARM_REQUIRED) && !(parm->flag & PROP_DYNAMIC)) {
switch (parm->type) {
case PROP_BOOLEAN:
- if (parm->arraydimension) memcpy(data, ((BoolPropertyRNA *)parm)->defaultarray, size);
+ if (parm->arraydimension) rna_property_boolean_get_default_array_values((BoolPropertyRNA *)parm, data);
else memcpy(data, &((BoolPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_INT:
- if (parm->arraydimension) memcpy(data, ((IntPropertyRNA *)parm)->defaultarray, size);
+ if (parm->arraydimension) rna_property_int_get_default_array_values((IntPropertyRNA *)parm, data);
else memcpy(data, &((IntPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_FLOAT:
- if (parm->arraydimension) memcpy(data, ((FloatPropertyRNA *)parm)->defaultarray, size);
+ if (parm->arraydimension) rna_property_float_get_default_array_values((FloatPropertyRNA *)parm, data);
else memcpy(data, &((FloatPropertyRNA *)parm)->defaultvalue, size);
break;
case PROP_ENUM: