[Bf-blender-cvs] [9e83283f731] blender2.8: Cleanup: decouple outliner tree element icon retrieving from drawing.

Brecht Van Lommel noreply at git.blender.org
Fri Aug 10 17:57:34 CEST 2018


Commit: 9e83283f7312c565e32c68bb544177bbfec7ceb2
Author: Brecht Van Lommel
Date:   Tue Aug 7 10:55:03 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB9e83283f7312c565e32c68bb544177bbfec7ceb2

Cleanup: decouple outliner tree element icon retrieving from drawing.

===================================================================

M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/editors/space_outliner/outliner_intern.h

===================================================================

diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index c52214b9846..5672351d62f 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -850,94 +850,45 @@ static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, Tre
 /* ****************************************************** */
 /* Normal Drawing... */
 
-/* make function calls a bit compacter */
-struct DrawIconArg {
-	uiBlock *block;
-	ID *id;
-	float xmax, x, y, xb, yb;
-	float alpha;
-};
-
-static void tselem_draw_icon_uibut(struct DrawIconArg *arg, int icon)
+TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
 {
-	/* restrict column clip... it has been coded by simply overdrawing, doesnt work for buttons */
-	if (arg->x >= arg->xmax) {
-		GPU_blend(true);
-		UI_icon_draw_alpha(arg->x, arg->y, icon, arg->alpha);
-		GPU_blend(false);
-	}
-	else {
-		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 && ID_IS_LINKED(arg->id)) ? arg->id->lib->name : "");
-
-		if (arg->id)
-			UI_but_drag_set_id(but, arg->id);
-	}
-
-}
-
-static void tselem_draw_icon(
-        uiBlock *block, int xmax, float x, float y, TreeStoreElem *tselem, TreeElement *te,
-        float alpha, const bool is_clickable)
-{
-	struct DrawIconArg arg;
-	float aspect;
-
-	/* make function calls a bit compacter */
-	arg.block = block;
-	arg.id = tselem->id;
-	arg.xmax = xmax;
-	arg.xb = x;	/* for ui buttons */
-	arg.yb = y;
-	arg.alpha = alpha;
-
-	/* placement of icons, copied from interface_widgets.c */
-	aspect = (0.8f * UI_UNIT_Y) / ICON_DEFAULT_HEIGHT;
-	x += 2.0f * aspect;
-	y += 2.0f * aspect;
-	arg.x = x;
-	arg.y = y;
-
-#define ICON_DRAW(_icon) UI_icon_draw_alpha(x, y, _icon, alpha)
-#define ICON_CLICK_DRAW(_icon) if (!is_clickable) ICON_DRAW(_icon); else tselem_draw_icon_uibut(&arg, _icon)
+	TreeElementIcon data = {0};
 
 	if (tselem->type) {
 		switch (tselem->type) {
 			case TSE_ANIM_DATA:
-				ICON_DRAW(ICON_ANIM_DATA); /* XXX */
+				data.icon = ICON_ANIM_DATA; /* XXX */
 				break;
 			case TSE_NLA:
-				ICON_DRAW(ICON_NLA);
+				data.icon = ICON_NLA;
 				break;
 			case TSE_NLA_TRACK:
-				ICON_DRAW(ICON_NLA); /* XXX */
+				data.icon = ICON_NLA; /* XXX */
 				break;
 			case TSE_NLA_ACTION:
-				ICON_DRAW(ICON_ACTION);
+				data.icon = ICON_ACTION;
 				break;
 			case TSE_DRIVER_BASE:
-				ICON_DRAW(ICON_DRIVER);
+				data.icon = ICON_DRIVER;
 				break;
 			case TSE_DEFGROUP_BASE:
-				ICON_DRAW(ICON_GROUP_VERTEX);
+				data.icon = ICON_GROUP_VERTEX;
 				break;
 			case TSE_BONE:
 			case TSE_EBONE:
-				ICON_DRAW(ICON_BONE_DATA);
+				data.icon = ICON_BONE_DATA;
 				break;
 			case TSE_CONSTRAINT_BASE:
-				ICON_DRAW(ICON_CONSTRAINT);
+				data.icon = ICON_CONSTRAINT;
 				break;
 			case TSE_MODIFIER_BASE:
-				ICON_DRAW(ICON_MODIFIER);
+				data.icon = ICON_MODIFIER;
 				break;
 			case TSE_LINKED_OB:
-				ICON_DRAW(ICON_OBJECT_DATA);
+				data.icon = ICON_OBJECT_DATA;
 				break;
 			case TSE_LINKED_PSYS:
-				ICON_DRAW(ICON_PARTICLES);
+				data.icon = ICON_PARTICLES;
 				break;
 			case TSE_MODIFIER:
 			{
@@ -946,154 +897,154 @@ static void tselem_draw_icon(
 					ModifierData *md = BLI_findlink(&ob->modifiers, tselem->nr);
 					switch ((ModifierType)md->type) {
 						case eModifierType_Subsurf:
-							ICON_DRAW(ICON_MOD_SUBSURF);
+							data.icon = ICON_MOD_SUBSURF;
 							break;
 						case eModifierType_Armature:
-							ICON_DRAW(ICON_MOD_ARMATURE);
+							data.icon = ICON_MOD_ARMATURE;
 							break;
 						case eModifierType_Lattice:
-							ICON_DRAW(ICON_MOD_LATTICE);
+							data.icon = ICON_MOD_LATTICE;
 							break;
 						case eModifierType_Curve:
-							ICON_DRAW(ICON_MOD_CURVE);
+							data.icon = ICON_MOD_CURVE;
 							break;
 						case eModifierType_Build:
-							ICON_DRAW(ICON_MOD_BUILD);
+							data.icon = ICON_MOD_BUILD;
 							break;
 						case eModifierType_Mirror:
-							ICON_DRAW(ICON_MOD_MIRROR);
+							data.icon = ICON_MOD_MIRROR;
 							break;
 						case eModifierType_Decimate:
-							ICON_DRAW(ICON_MOD_DECIM);
+							data.icon = ICON_MOD_DECIM;
 							break;
 						case eModifierType_Wave:
-							ICON_DRAW(ICON_MOD_WAVE);
+							data.icon = ICON_MOD_WAVE;
 							break;
 						case eModifierType_Hook:
-							ICON_DRAW(ICON_HOOK);
+							data.icon = ICON_HOOK;
 							break;
 						case eModifierType_Softbody:
-							ICON_DRAW(ICON_MOD_SOFT);
+							data.icon = ICON_MOD_SOFT;
 							break;
 						case eModifierType_Boolean:
-							ICON_DRAW(ICON_MOD_BOOLEAN);
+							data.icon = ICON_MOD_BOOLEAN;
 							break;
 						case eModifierType_ParticleSystem:
-							ICON_DRAW(ICON_MOD_PARTICLES);
+							data.icon = ICON_MOD_PARTICLES;
 							break;
 						case eModifierType_ParticleInstance:
-							ICON_DRAW(ICON_MOD_PARTICLES);
+							data.icon = ICON_MOD_PARTICLES;
 							break;
 						case eModifierType_EdgeSplit:
-							ICON_DRAW(ICON_MOD_EDGESPLIT);
+							data.icon = ICON_MOD_EDGESPLIT;
 							break;
 						case eModifierType_Array:
-							ICON_DRAW(ICON_MOD_ARRAY);
+							data.icon = ICON_MOD_ARRAY;
 							break;
 						case eModifierType_UVProject:
 						case eModifierType_UVWarp:  /* TODO, get own icon */
-							ICON_DRAW(ICON_MOD_UVPROJECT);
+							data.icon = ICON_MOD_UVPROJECT;
 							break;
 						case eModifierType_Displace:
-							ICON_DRAW(ICON_MOD_DISPLACE);
+							data.icon = ICON_MOD_DISPLACE;
 							break;
 						case eModifierType_Shrinkwrap:
-							ICON_DRAW(ICON_MOD_SHRINKWRAP);
+							data.icon = ICON_MOD_SHRINKWRAP;
 							break;
 						case eModifierType_Cast:
-							ICON_DRAW(ICON_MOD_CAST);
+							data.icon = ICON_MOD_CAST;
 							break;
 						case eModifierType_MeshDeform:
 						case eModifierType_SurfaceDeform:
-							ICON_DRAW(ICON_MOD_MESHDEFORM);
+							data.icon = ICON_MOD_MESHDEFORM;
 							break;
 						case eModifierType_Bevel:
-							ICON_DRAW(ICON_MOD_BEVEL);
+							data.icon = ICON_MOD_BEVEL;
 							break;
 						case eModifierType_Smooth:
 						case eModifierType_LaplacianSmooth:
 						case eModifierType_CorrectiveSmooth:
-							ICON_DRAW(ICON_MOD_SMOOTH);
+							data.icon = ICON_MOD_SMOOTH;
 							break;
 						case eModifierType_SimpleDeform:
-							ICON_DRAW(ICON_MOD_SIMPLEDEFORM);
+							data.icon = ICON_MOD_SIMPLEDEFORM;
 							break;
 						case eModifierType_Mask:
-							ICON_DRAW(ICON_MOD_MASK);
+							data.icon = ICON_MOD_MASK;
 							break;
 						case eModifierType_Cloth:
-							ICON_DRAW(ICON_MOD_CLOTH);
+							data.icon = ICON_MOD_CLOTH;
 							break;
 						case eModifierType_Explode:
-							ICON_DRAW(ICON_MOD_EXPLODE);
+							data.icon = ICON_MOD_EXPLODE;
 							break;
 						case eModifierType_Collision:
 						case eModifierType_Surface:
-							ICON_DRAW(ICON_MOD_PHYSICS);
+							data.icon = ICON_MOD_PHYSICS;
 							break;
 						case eModifierType_Fluidsim:
-							ICON_DRAW(ICON_MOD_FLUIDSIM);
+							data.icon = ICON_MOD_FLUIDSIM;
 							break;
 						case eModifierType_Multires:
-							ICON_DRAW(ICON_MOD_MULTIRES);
+							data.icon = ICON_MOD_MULTIRES;
 							break;
 						case eModifierType_Smoke:
-							ICON_DRAW(ICON_MOD_SMOKE);
+							data.icon = ICON_MOD_SMOKE;
 							break;
 						case eModifierType_Solidify:
-							ICON_DRAW(ICON_MOD_SOLIDIFY);
+							data.icon = ICON_MOD_SOLIDIFY;
 							break;
 						case eModifierType_Screw:
-							ICON_DRAW(ICON_MOD_SCREW);
+							data.icon = ICON_MOD_SCREW;
 							break;
 						case eModifierType_Remesh:
-							ICON_DRAW(ICON_MOD_REMESH);
+							data.icon = ICON_MOD_REMESH;
 							break;
 						case eModifierType_WeightVGEdit:
 						case eModifierType_WeightVGMix:
 						case eModifierType_WeightVGProximity:
-							ICON_DRAW(ICON_MOD_VERTEX_WEIGHT);
+							data.icon = ICON_MOD_VERTEX_WEIGHT;
 							break;
 						case eModifierType_DynamicPaint:
-							ICON_DRAW(ICON_MOD_DYNAMICPAINT);
+							data.icon = ICON_MOD_DYNAMICPAINT;
 							break;
 						case eModifierType_Ocean:
-							ICON_DRAW(ICON_MOD_OCEAN);
+							data.icon = ICON_MOD_OCEAN;
 							break;
 						case eModifierType_Warp:
-							ICON_DRAW(ICON_MOD_WARP);
+							data.icon = ICON_MOD_WARP;
 							break;
 						case eModifierType_Skin:
-							ICON_DRAW(ICON_MOD_SKIN);
+							data.icon = ICON_MOD_SKIN;
 							break;
 						case eModifierType_Triangulate:
-							ICON_DRAW(ICON_MOD_TRIANGULATE);
+							data.icon = ICON_MOD_TRIANGULATE;
 							break;
 						case eModifierType_MeshCache:
-							ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+							data.icon = ICON_MOD_MESHDEFORM; /* XXX, needs own icon */
 							break;
 						case eModifierType_MeshSequenceCache:
-							ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+							data.icon = ICON_MOD_MESHDEFORM; /* XXX, needs own icon */
 							break;
 						case eModifierType_Wireframe:
-							ICON_DRAW(ICON_MOD_WIREFRAME);
+							data.icon = ICON_MOD_WIREFRAME;
 							break;
 						case eModifierType_LaplacianDeform:
-							ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+							data.icon = ICON_MOD_MESHDEFORM; /* XXX, needs own icon */
 							break;
 						case eModifierType_DataTransfer:
-							ICON_DRAW(ICON_MOD_DATA_TRANSFER);
+							data.icon = ICON_MOD_DATA_TRANSFER;
 							break;
 						case eModifierType_NormalEdit:
 						case eModifierType_WeightedNormal:
-							ICON_DRAW(ICON_MOD_NORMALEDIT);
+							data.icon = ICON_MOD_NORMALEDIT;
 							break;
 							/* Default */
 						case eModifierType_None:
 						case eModifierType_ShapeKey:
 
 						case NUM_MODIFIER_TYPES:
-							ICON_DRAW(ICON_DOT);
+							data.icon = ICON_DOT;
 							break;
 					}
 				}
@@ -1102,172 +1053,182 @@ static void tselem_draw_icon(
 					GpencilModifierData *md = BLI_findlink(&ob->greasepencil_modifiers, tselem->nr);
 					switch ((GpencilModifierType)md->type) {
 						case eGpencilModifierType_Noise:
-							ICON_DRAW(ICON_RNDCURVE);
+							data.icon = ICON_RNDCURVE;
 							break;
 						case eGpencilM

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list