Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_outliner/outliner_draw.c
| Context not available. | |||||
| /** \file blender/editors/space_outliner/outliner_draw.c | /** \file blender/editors/space_outliner/outliner_draw.c | ||||
| * \ingroup spoutliner | * \ingroup spoutliner | ||||
| */ | */ | ||||
| #include "MEM_guardedalloc.h" | |||||
| #include "DNA_anim_types.h" | #include "DNA_anim_types.h" | ||||
| #include "DNA_armature_types.h" | #include "DNA_armature_types.h" | ||||
| Context not available. | |||||
| struct DrawIconArg { | struct DrawIconArg { | ||||
| uiBlock *block; | uiBlock *block; | ||||
| ID *id; | ID *id; | ||||
| PointerRNA *rnaptr; | |||||
| float xmax, x, y, xb, yb; | float xmax, x, y, xb, yb; | ||||
| float alpha; | float alpha; | ||||
| short tse_type; | |||||
| }; | }; | ||||
| static void tselem_draw_icon_uibut(struct DrawIconArg *arg, int icon) | static void tselem_draw_icon_uibut(struct DrawIconArg *arg, int icon) | ||||
| Context not available. | |||||
| uiBut *but = uiDefIconBut(arg->block, UI_BTYPE_LABEL, 0, icon, arg->xb, arg->yb, UI_UNIT_X, UI_UNIT_Y, NULL, | uiBut *but = uiDefIconBut(arg->block, UI_BTYPE_LABEL, 0, icon, arg->xb, arg->yb, UI_UNIT_X, UI_UNIT_Y, NULL, | ||||
| 0.0, 0.0, 1.0, arg->alpha, (arg->id && arg->id->lib) ? arg->id->lib->name : ""); | 0.0, 0.0, 1.0, arg->alpha, (arg->id && arg->id->lib) ? arg->id->lib->name : ""); | ||||
| if (arg->id) | if (arg->tse_type == TSE_DEFGROUP) { | ||||
sergey: Same as above. | |||||
| UI_but_drag_set_defgroup(but, arg->rnaptr); | |||||
| } | |||||
| else if (arg->tse_type == TSE_CONSTRAINT) { | |||||
| UI_but_drag_set_constraint(but, arg->rnaptr); | |||||
| } | |||||
| else if (arg->tse_type == TSE_MODIFIER) { | |||||
| UI_but_drag_set_modifier(but, arg->rnaptr); | |||||
| } | |||||
| else if (arg->id) | |||||
| UI_but_drag_set_id(but, arg->id); | UI_but_drag_set_id(but, arg->id); | ||||
| } | } | ||||
| Context not available. | |||||
| float alpha) | float alpha) | ||||
| { | { | ||||
| struct DrawIconArg arg; | struct DrawIconArg arg; | ||||
| PointerRNA *rnaptr; | |||||
| float aspect; | float aspect; | ||||
| /* icons tiny bit away from text */ | /* icons tiny bit away from text */ | ||||
| Context not available. | |||||
| arg.xb = x; /* for ui buttons */ | arg.xb = x; /* for ui buttons */ | ||||
| arg.yb = y; | arg.yb = y; | ||||
| arg.alpha = alpha; | arg.alpha = alpha; | ||||
| arg.tse_type = tselem->type; | |||||
| /* placement of icons, copied from interface_widgets.c */ | /* placement of icons, copied from interface_widgets.c */ | ||||
| aspect = (0.8f * UI_UNIT_Y) / ICON_DEFAULT_HEIGHT; | aspect = (0.8f * UI_UNIT_Y) / ICON_DEFAULT_HEIGHT; | ||||
| Context not available. | |||||
| UI_icon_draw(x, y, ICON_DRIVER); break; | UI_icon_draw(x, y, ICON_DRIVER); break; | ||||
| case TSE_DEFGROUP_BASE: | case TSE_DEFGROUP_BASE: | ||||
| UI_icon_draw(x, y, ICON_GROUP_VERTEX); break; | UI_icon_draw(x, y, ICON_GROUP_VERTEX); break; | ||||
| case TSE_DEFGROUP: | |||||
| rnaptr = MEM_callocN(sizeof(PointerRNA), __func__); | |||||
Not Done Inline Actionsthis seems to be one of the causes for the memleak (still looking for the right place to free mem again, tried stuff with WM_DRAG_FREE_DATA, but that seems to free too early...) lichtwerk: this seems to be one of the causes for the memleak (still looking for the right place to free… | |||||
| RNA_pointer_create(tselem->id, &RNA_VertexGroup, te->directdata, rnaptr); | |||||
| arg.rnaptr = rnaptr; | |||||
| tselem_draw_icon_uibut(&arg, ICON_GROUP_VERTEX); | |||||
| break; | |||||
| case TSE_CONSTRAINT: | |||||
| rnaptr = MEM_callocN(sizeof(PointerRNA), __func__); | |||||
Not Done Inline Actionsother cause for memleak lichtwerk: other cause for memleak | |||||
| RNA_pointer_create(tselem->id, &RNA_Constraint, te->directdata, rnaptr); | |||||
| arg.rnaptr = rnaptr; | |||||
| tselem_draw_icon_uibut(&arg, ICON_CONSTRAINT); | |||||
| break; | |||||
| case TSE_BONE: | case TSE_BONE: | ||||
| case TSE_EBONE: | case TSE_EBONE: | ||||
| UI_icon_draw(x, y, ICON_BONE_DATA); break; | UI_icon_draw(x, y, ICON_BONE_DATA); break; | ||||
| Context not available. | |||||
| { | { | ||||
| Object *ob = (Object *)tselem->id; | Object *ob = (Object *)tselem->id; | ||||
| ModifierData *md = BLI_findlink(&ob->modifiers, tselem->nr); | ModifierData *md = BLI_findlink(&ob->modifiers, tselem->nr); | ||||
| rnaptr = MEM_callocN(sizeof(PointerRNA), __func__); | |||||
Not Done Inline Actionsother cause for memleak lichtwerk: other cause for memleak | |||||
| RNA_pointer_create(tselem->id, &RNA_Modifier, te->directdata, rnaptr); | |||||
| arg.rnaptr = rnaptr; | |||||
| switch ((ModifierType)md->type) { | switch ((ModifierType)md->type) { | ||||
| case eModifierType_Subsurf: | case eModifierType_Subsurf: | ||||
| UI_icon_draw(x, y, ICON_MOD_SUBSURF); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SUBSURF); break; | ||||
| case eModifierType_Armature: | case eModifierType_Armature: | ||||
| UI_icon_draw(x, y, ICON_MOD_ARMATURE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_ARMATURE); break; | ||||
| case eModifierType_Lattice: | case eModifierType_Lattice: | ||||
| UI_icon_draw(x, y, ICON_MOD_LATTICE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_LATTICE); break; | ||||
| case eModifierType_Curve: | case eModifierType_Curve: | ||||
| UI_icon_draw(x, y, ICON_MOD_CURVE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_CURVE); break; | ||||
| case eModifierType_Build: | case eModifierType_Build: | ||||
| UI_icon_draw(x, y, ICON_MOD_BUILD); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_BUILD); break; | ||||
| case eModifierType_Mirror: | case eModifierType_Mirror: | ||||
| UI_icon_draw(x, y, ICON_MOD_MIRROR); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_MIRROR); break; | ||||
| case eModifierType_Decimate: | case eModifierType_Decimate: | ||||
| UI_icon_draw(x, y, ICON_MOD_DECIM); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_DECIM); break; | ||||
| case eModifierType_Wave: | case eModifierType_Wave: | ||||
| UI_icon_draw(x, y, ICON_MOD_WAVE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_WAVE); break; | ||||
| case eModifierType_Hook: | case eModifierType_Hook: | ||||
| UI_icon_draw(x, y, ICON_HOOK); break; | tselem_draw_icon_uibut(&arg, ICON_HOOK); break; | ||||
| case eModifierType_Softbody: | case eModifierType_Softbody: | ||||
| UI_icon_draw(x, y, ICON_MOD_SOFT); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SOFT); break; | ||||
| case eModifierType_Boolean: | case eModifierType_Boolean: | ||||
| UI_icon_draw(x, y, ICON_MOD_BOOLEAN); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_BOOLEAN); break; | ||||
| case eModifierType_ParticleSystem: | case eModifierType_ParticleSystem: | ||||
| UI_icon_draw(x, y, ICON_MOD_PARTICLES); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_PARTICLES); break; | ||||
| case eModifierType_ParticleInstance: | case eModifierType_ParticleInstance: | ||||
| UI_icon_draw(x, y, ICON_MOD_PARTICLES); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_PARTICLES); break; | ||||
| case eModifierType_EdgeSplit: | case eModifierType_EdgeSplit: | ||||
| UI_icon_draw(x, y, ICON_MOD_EDGESPLIT); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_EDGESPLIT); break; | ||||
| case eModifierType_Array: | case eModifierType_Array: | ||||
| UI_icon_draw(x, y, ICON_MOD_ARRAY); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_ARRAY); break; | ||||
| case eModifierType_UVProject: | case eModifierType_UVProject: | ||||
| case eModifierType_UVWarp: /* TODO, get own icon */ | case eModifierType_UVWarp: /* TODO, get own icon */ | ||||
| UI_icon_draw(x, y, ICON_MOD_UVPROJECT); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_UVPROJECT); break; | ||||
| case eModifierType_Displace: | case eModifierType_Displace: | ||||
| UI_icon_draw(x, y, ICON_MOD_DISPLACE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_DISPLACE); break; | ||||
| case eModifierType_Shrinkwrap: | case eModifierType_Shrinkwrap: | ||||
| UI_icon_draw(x, y, ICON_MOD_SHRINKWRAP); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SHRINKWRAP); break; | ||||
| case eModifierType_Cast: | case eModifierType_Cast: | ||||
| UI_icon_draw(x, y, ICON_MOD_CAST); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_CAST); break; | ||||
| case eModifierType_MeshDeform: | case eModifierType_MeshDeform: | ||||
| UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_MESHDEFORM); break; | ||||
| case eModifierType_Bevel: | case eModifierType_Bevel: | ||||
| UI_icon_draw(x, y, ICON_MOD_BEVEL); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_BEVEL); break; | ||||
| case eModifierType_Smooth: | case eModifierType_Smooth: | ||||
| case eModifierType_LaplacianSmooth: | case eModifierType_LaplacianSmooth: | ||||
| UI_icon_draw(x, y, ICON_MOD_SMOOTH); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SMOOTH); break; | ||||
| case eModifierType_SimpleDeform: | case eModifierType_SimpleDeform: | ||||
| UI_icon_draw(x, y, ICON_MOD_SIMPLEDEFORM); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SIMPLEDEFORM); break; | ||||
| case eModifierType_Mask: | case eModifierType_Mask: | ||||
| UI_icon_draw(x, y, ICON_MOD_MASK); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_MASK); break; | ||||
| case eModifierType_Cloth: | case eModifierType_Cloth: | ||||
| UI_icon_draw(x, y, ICON_MOD_CLOTH); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_CLOTH); break; | ||||
| case eModifierType_Explode: | case eModifierType_Explode: | ||||
| UI_icon_draw(x, y, ICON_MOD_EXPLODE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_EXPLODE); break; | ||||
| case eModifierType_Collision: | case eModifierType_Collision: | ||||
| case eModifierType_Surface: | case eModifierType_Surface: | ||||
| UI_icon_draw(x, y, ICON_MOD_PHYSICS); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_PHYSICS); break; | ||||
| case eModifierType_Fluidsim: | case eModifierType_Fluidsim: | ||||
| UI_icon_draw(x, y, ICON_MOD_FLUIDSIM); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_FLUIDSIM); break; | ||||
| case eModifierType_Multires: | case eModifierType_Multires: | ||||
| UI_icon_draw(x, y, ICON_MOD_MULTIRES); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_MULTIRES); break; | ||||
| case eModifierType_Smoke: | case eModifierType_Smoke: | ||||
| UI_icon_draw(x, y, ICON_MOD_SMOKE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SMOKE); break; | ||||
| case eModifierType_Solidify: | case eModifierType_Solidify: | ||||
| UI_icon_draw(x, y, ICON_MOD_SOLIDIFY); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SOLIDIFY); break; | ||||
| case eModifierType_Screw: | case eModifierType_Screw: | ||||
| UI_icon_draw(x, y, ICON_MOD_SCREW); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SCREW); break; | ||||
| case eModifierType_Remesh: | case eModifierType_Remesh: | ||||
| UI_icon_draw(x, y, ICON_MOD_REMESH); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_REMESH); break; | ||||
| case eModifierType_WeightVGEdit: | case eModifierType_WeightVGEdit: | ||||
| case eModifierType_WeightVGMix: | case eModifierType_WeightVGMix: | ||||
| case eModifierType_WeightVGProximity: | case eModifierType_WeightVGProximity: | ||||
| UI_icon_draw(x, y, ICON_MOD_VERTEX_WEIGHT); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_VERTEX_WEIGHT); break; | ||||
| case eModifierType_DynamicPaint: | case eModifierType_DynamicPaint: | ||||
| UI_icon_draw(x, y, ICON_MOD_DYNAMICPAINT); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_DYNAMICPAINT); break; | ||||
| case eModifierType_Ocean: | case eModifierType_Ocean: | ||||
| UI_icon_draw(x, y, ICON_MOD_OCEAN); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_OCEAN); break; | ||||
| case eModifierType_Warp: | case eModifierType_Warp: | ||||
| UI_icon_draw(x, y, ICON_MOD_WARP); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_WARP); break; | ||||
| case eModifierType_Skin: | case eModifierType_Skin: | ||||
| UI_icon_draw(x, y, ICON_MOD_SKIN); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_SKIN); break; | ||||
| case eModifierType_Triangulate: | case eModifierType_Triangulate: | ||||
| UI_icon_draw(x, y, ICON_MOD_TRIANGULATE); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_TRIANGULATE); break; | ||||
| case eModifierType_MeshCache: | case eModifierType_MeshCache: | ||||
| UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */ | tselem_draw_icon_uibut(&arg, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */ | ||||
| case eModifierType_Wireframe: | case eModifierType_Wireframe: | ||||
| UI_icon_draw(x, y, ICON_MOD_WIREFRAME); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_WIREFRAME); break; | ||||
| case eModifierType_LaplacianDeform: | case eModifierType_LaplacianDeform: | ||||
| UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */ | tselem_draw_icon_uibut(&arg, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */ | ||||
| case eModifierType_DataTransfer: | case eModifierType_DataTransfer: | ||||
| UI_icon_draw(x, y, ICON_MOD_DATA_TRANSFER); break; | tselem_draw_icon_uibut(&arg, ICON_MOD_DATA_TRANSFER); break; | ||||
| /* Default */ | /* Default */ | ||||
| case eModifierType_None: | case eModifierType_None: | ||||
| case eModifierType_ShapeKey: | case eModifierType_ShapeKey: | ||||
| Context not available. | |||||
Same as above.