diff options
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm_gizmo.c | 34 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_workspace_api.c | 27 |
3 files changed, 62 insertions, 0 deletions
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 1278f27af75..ccce54227fe 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -372,6 +372,7 @@ extern StructRNA RNA_LockedTrackConstraint; extern StructRNA RNA_Macro; extern StructRNA RNA_MagicTexture; extern StructRNA RNA_Gizmo; +extern StructRNA RNA_GizmoGroupProperties; extern StructRNA RNA_GizmoProperties; extern StructRNA RNA_MarbleTexture; extern StructRNA RNA_MaskModifier; diff --git a/source/blender/makesrna/intern/rna_wm_gizmo.c b/source/blender/makesrna/intern/rna_wm_gizmo.c index 494c988a467..41e3929e8ae 100644 --- a/source/blender/makesrna/intern/rna_wm_gizmo.c +++ b/source/blender/makesrna/intern/rna_wm_gizmo.c @@ -548,6 +548,34 @@ static StructRNA *rna_Gizmo_refine(PointerRNA *mnp_ptr) /** \name Gizmo Group API * \{ */ +static wmGizmoGroupType *rna_GizmoGroupProperties_find_gizmo_group_type(PointerRNA *ptr) +{ + IDProperty *properties = (IDProperty *)ptr->data; + wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(properties->name, false); + return gzgt; +} + +static StructRNA *rna_GizmoGroupProperties_refine(PointerRNA *ptr) +{ + wmGizmoGroupType *gzgt = rna_GizmoGroupProperties_find_gizmo_group_type(ptr); + + if (gzgt) + return gzgt->srna; + else + return ptr->type; +} + +static IDProperty *rna_GizmoGroupProperties_idprops(PointerRNA *ptr, bool create) +{ + if (create && !ptr->data) { + IDPropertyTemplate val = {0}; + ptr->data = IDP_New(IDP_GROUP, &val, "RNA_GizmoGroupProperties group"); + } + + return ptr->data; +} + + static wmGizmo *rna_GizmoGroup_gizmo_new( wmGizmoGroup *gzgroup, ReportList *reports, const char *idname) { @@ -1364,6 +1392,12 @@ static void rna_def_gizmogroup(BlenderRNA *brna) RNA_define_verify_sdna(1); /* not in sdna */ RNA_api_gizmogroup(srna); + + srna = RNA_def_struct(brna, "GizmoGroupProperties", NULL); + RNA_def_struct_ui_text(srna, "Gizmo Group Properties", "Input properties of a Gizmo Group"); + RNA_def_struct_refine_func(srna, "rna_GizmoGroupProperties_refine"); + RNA_def_struct_idprops_func(srna, "rna_GizmoGroupProperties_idprops"); + RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES); } void RNA_def_wm_gizmo(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_workspace_api.c b/source/blender/makesrna/intern/rna_workspace_api.c index 331a8e77637..898dc296299 100644 --- a/source/blender/makesrna/intern/rna_workspace_api.c +++ b/source/blender/makesrna/intern/rna_workspace_api.c @@ -133,6 +133,23 @@ static PointerRNA rna_WorkspaceTool_operator_properties( return PointerRNA_NULL; } +static PointerRNA rna_WorkspaceTool_gizmo_group_properties( + bToolRef *tref, + ReportList *reports, + const char *idname) +{ + wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false); + if (gzgt != NULL) { + PointerRNA ptr; + WM_toolsystem_ref_properties_ensure_from_gizmo_group(tref, gzgt, &ptr); + return ptr; + } + else { + BKE_reportf(reports, RPT_ERROR, "Gizmo group '%s' not found!", idname); + } + return PointerRNA_NULL; +} + #else void RNA_api_workspace(StructRNA *srna) @@ -176,6 +193,16 @@ void RNA_api_workspace_tool(StructRNA *srna) RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_RNAPTR); RNA_def_function_return(func, parm); + /* Access gizmo-group options (optionally create). */ + func = RNA_def_function(srna, "gizmo_group_properties", "rna_WorkspaceTool_gizmo_group_properties"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); + parm = RNA_def_string(func, "group", NULL, 0, "", ""); + RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); + /* return */ + parm = RNA_def_pointer(func, "result", "GizmoGroupProperties", "", ""); + RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_RNAPTR); + RNA_def_function_return(func, parm); + func = RNA_def_function(srna, "refresh_from_context", "rna_WorkspaceTool_refresh_from_context"); RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN); } |