[Bf-blender-cvs] [ba1d1a6923e] temp-dynamic-overrides: Hard-coded support for arrays, color works
Dalai Felinto
noreply at git.blender.org
Tue May 15 14:26:23 CEST 2018
Commit: ba1d1a6923eb648df24938ea511023c00af5b3fd
Author: Dalai Felinto
Date: Mon May 14 22:21:34 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rBba1d1a6923eb648df24938ea511023c00af5b3fd
Hard-coded support for arrays, color works
===================================================================
M release/scripts/startup/bl_ui/properties_view_layer.py
M source/blender/blenkernel/intern/layer.c
M source/blender/makesdna/DNA_layer_types.h
M source/blender/makesrna/intern/rna_layer.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_view_layer.py b/release/scripts/startup/bl_ui/properties_view_layer.py
index a46c8087d32..302264f15fd 100644
--- a/release/scripts/startup/bl_ui/properties_view_layer.py
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -154,18 +154,39 @@ class VIEWLAYER_OT_overrides(ViewLayerButtonsPanel, Panel):
def _icon_from_id_type(id_type):
return id_type + '_DATA'
- def _draw_property(self, layout, dyn_prop, index, property_type):
+ @staticmethod
+ def _value_name_override_mode_get(data_type, data_subtype):
+ """
+ return Tuple: value name and whether the property supports override modes
+ """
# TODO: Finish this.
proptype_map = {
- 'BOOLEAN': ("value_boolean", False),
- 'INT': ("value_int", True),
- 'FLOAT': ("value_float", True),
- 'STRING': (None, False),
- 'ENUM': (None, False),
- 'POINTER': (None, False),
- 'COLLECTION': (None, False),
+ 'BOOLEAN': {
+ 'NONE': ("value_boolean", False)},
+ 'INT': {
+ 'NONE': ("value_int", True)},
+ 'FLOAT': {
+ 'NONE': ("value_float", True),
+ 'COLOR': ("value_color", False)},
+ 'STRING': {
+ 'NONE': (None, False)},
+ 'ENUM': {
+ 'NONE': (None, False)},
+ 'POINTER': {
+ 'NONE': (None, False)},
+ 'COLLECTION': {
+ 'NONE': (None, False)},
}
+ type_lookup = proptype_map[data_type]
+ value_name = type_lookup.get(data_subtype)
+
+ if value_name is None:
+ value_name = type_lookup['NONE']
+
+ return value_name
+
+ def _draw_property(self, layout, dyn_prop, index, property_type):
box = layout.box()
row = box.row()
row.prop(dyn_prop, "use", text="")
@@ -173,7 +194,7 @@ class VIEWLAYER_OT_overrides(ViewLayerButtonsPanel, Panel):
subrow.active = dyn_prop.use
subrow.label(text=dyn_prop.name, icon=self._icon_from_id_type(dyn_prop.id_type))
- value_propname, override_mode_support = proptype_map[dyn_prop.data_type]
+ value_propname, override_mode_support = self._value_name_override_mode_get(dyn_prop.data_type, dyn_prop.data_subtype)
if override_mode_support:
subrow.prop(dyn_prop, "override_mode", text="")
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index c828b6e7840..2ed8061bc95 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -2021,22 +2021,29 @@ DynamicOverrideProperty *BKE_view_layer_override_property_add(
dyn_prop->property_type = property_type;
dyn_prop->rna_path = rna_path_str;
+ const bool is_array = RNA_property_array_check(prop);
+
/* TODO handle array. */
switch (RNA_property_type(prop)) {
case PROP_BOOLEAN:
- dyn_prop->data.i = RNA_property_boolean_get(ptr, prop);
+ dyn_prop->data.i[0] = RNA_property_boolean_get(ptr, prop);
break;
case PROP_INT:
- dyn_prop->data.i = RNA_property_int_get(ptr, prop);
+ dyn_prop->data.i[0] = RNA_property_int_get(ptr, prop);
break;
case PROP_FLOAT:
- dyn_prop->data.f = RNA_property_float_get(ptr, prop);
+ if (is_array) {
+ RNA_property_float_get_array(ptr, prop, dyn_prop->data.f);
+ }
+ else {
+ dyn_prop->data.f[0] = RNA_property_float_get(ptr, prop);
+ }
break;
case PROP_STRING:
dyn_prop->data.str = RNA_property_string_get_alloc(ptr, prop, NULL, 0, NULL);
break;
case PROP_ENUM:
- dyn_prop->data.i = RNA_property_enum_get(ptr, prop);
+ dyn_prop->data.i[0] = RNA_property_enum_get(ptr, prop);
break;
case PROP_POINTER:
{
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index a5be96784b6..b4743dc03e6 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -63,8 +63,8 @@ typedef struct LayerCollection {
} LayerCollection;
typedef struct DynamicOverridePropertyData {
- int i;
- float f;
+ int i[4];
+ float f[4];
struct ID *id;
char *str;
} DynamicOverridePropertyData;
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index 42edaef8110..9569a8f1982 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -866,7 +866,7 @@ static int rna_DynamicOverrideProperty_length(PointerRNA *ptr)
return strlen(dyn_prop->rna_path);
}
-static int rna_DynamicOverrideProperty_data_type_get(PointerRNA *ptr)
+static PropertyRNA *rna_DynamicOverride_property_get(PointerRNA *ptr)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
@@ -890,32 +890,44 @@ static int rna_DynamicOverrideProperty_data_type_get(PointerRNA *ptr)
PropertyElemRNA *prop_elem = dyn_prop->data_path.last;
/* Note that we have no 'invalid' value for PropertyRNA type... :/ */
- return prop_elem ? RNA_property_type(prop_elem->prop) : -1;
+ return prop_elem ? prop_elem->prop : NULL;
+
+}
+static int rna_DynamicOverrideProperty_data_type_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop = rna_DynamicOverride_property_get(ptr);
+ return prop ? RNA_property_type(prop) : -1;
+}
+
+static int rna_DynamicOverrideProperty_data_subtype_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop = rna_DynamicOverride_property_get(ptr);
+ return prop ? RNA_property_subtype(prop) : -1;
}
static int rna_DynamicOverrideProperty_value_boolean_get(PointerRNA *ptr)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- return dyn_prop->data.i;
+ return dyn_prop->data.i[0];
}
static void rna_DynamicOverrideProperty_value_boolean_set(PointerRNA *ptr, int value)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- dyn_prop->data.i = value;
+ dyn_prop->data.i[0] = value;
}
static int rna_DynamicOverrideProperty_value_int_get(PointerRNA *ptr)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- return dyn_prop->data.i;
+ return dyn_prop->data.i[0];
}
static void rna_DynamicOverrideProperty_value_int_set(PointerRNA *ptr, int value)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- dyn_prop->data.i = value;
+ dyn_prop->data.i[0] = value;
}
static void rna_DynamicOverrideProperty_value_int_range(
@@ -931,13 +943,13 @@ static void rna_DynamicOverrideProperty_value_int_range(
static float rna_DynamicOverrideProperty_value_float_get(PointerRNA *ptr)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- return dyn_prop->data.f;
+ return dyn_prop->data.f[0];
}
static void rna_DynamicOverrideProperty_value_float_set(PointerRNA *ptr, float value)
{
DynamicOverrideProperty *dyn_prop = ptr->data;
- dyn_prop->data.f = value;
+ dyn_prop->data.f[0] = value;
}
static void rna_DynamicOverrideProperty_value_float_range(
@@ -950,6 +962,18 @@ static void rna_DynamicOverrideProperty_value_float_range(
*max = FLT_MAX;
}
+static void rna_DynamicOverrideProperty_value_color_get(PointerRNA *ptr, float *values)
+{
+ DynamicOverrideProperty *dyn_prop = ptr->data;
+ copy_v3_v3(values, dyn_prop->data.f);
+}
+
+static void rna_DynamicOverrideProperty_value_color_set(PointerRNA *ptr, const float *values)
+{
+ DynamicOverrideProperty *dyn_prop = ptr->data;
+ copy_v3_v3(dyn_prop->data.f, values);
+}
+
static void rna_OverriddenCollection_name_get(PointerRNA *ptr, char *value)
{
SceneCollection *collection = ((LinkData *)ptr->data)->data;
@@ -2184,6 +2208,12 @@ static void rna_def_dynamic_override_property(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, "rna_DynamicOverrideProperty_data_type_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Type", "Data type of the property");
+ prop = RNA_def_property(srna, "data_subtype", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_property_subtype_items);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_enum_funcs(prop, "rna_DynamicOverrideProperty_data_subtype_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Subtype", "Data subtype of the property");
+
/* Accessors for the different value types. */
prop = RNA_def_property(srna, "value_boolean", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop,
@@ -2204,6 +2234,14 @@ static void rna_def_dynamic_override_property(BlenderRNA *brna)
"rna_DynamicOverrideProperty_value_float_set",
"rna_DynamicOverrideProperty_value_float_range");
RNA_def_property_update(prop, NC_SCENE | ND_DYN_OVERRIDES, NULL);
+
+ prop = RNA_def_property(srna, "value_color", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_float_funcs(prop,
+ "rna_DynamicOverrideProperty_value_color_get",
+ "rna_DynamicOverrideProperty_value_color_set",
+ NULL);
+ RNA_def_property_update(prop, NC_SCENE | ND_DYN_OVERRIDES, NULL);
}
static void rna_def_overridden_collection(BlenderRNA *brna)
More information about the Bf-blender-cvs
mailing list