[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56984] trunk/blender/source/blender/ editors/space_view3d/view3d_draw.c: Cleaned up draw_selected_name() to avoid redundant BLI_snprintf() calls

Gaia Clary gaia.clary at machinimatrix.org
Thu May 23 22:02:54 CEST 2013


Revision: 56984
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56984
Author:   gaiaclary
Date:     2013-05-23 20:02:53 +0000 (Thu, 23 May 2013)
Log Message:
-----------
Cleaned up draw_selected_name() to avoid redundant BLI_snprintf() calls

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2013-05-23 18:41:30 UTC (rev 56983)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2013-05-23 20:02:53 UTC (rev 56984)
@@ -873,93 +873,85 @@
 /* draw info beside axes in bottom left-corner: 
  * framenum, object name, bone name (if available), marker name (if available)
  */
+
+#define BREAD_CRUMB_SEPARATOR " : "
+#define SHAPE_KEY_PINNED " (Pinned)"
+
 static void draw_selected_name(Scene *scene, Object *ob, rcti *rect)
 {
 	char info[256], *markern;
 	short offset = 1.5f * UI_UNIT_X + rect->xmin;
+
+	/* 
+	* breadcrumbs can contain 3 object names (MAX_NAME)
+	* and 2 BREAD_CRUMB_SEPARATORs (6)
+	* and a SHAPE_KEY_PINNED marker and a trailing '\0' (9+1)
+	*/
+	char bread_crumbs[3*MAX_NAME + 6 + 10];
+	bread_crumbs[0] = '\0';
 	
 	/* get name of marker on current frame (if available) */
 	markern = BKE_scene_find_marker_name(scene, CFRA);
 	
 	/* check if there is an object */
 	if (ob) {
+		strcat(bread_crumbs," ");
+		strcat(bread_crumbs,ob->id.name + 2);
+
 		/* name(s) to display depends on type of object */
 		if (ob->type == OB_ARMATURE) {
 			bArmature *arm = ob->data;
-			char *name = NULL;
 			
 			/* show name of active bone too (if possible) */
 			if (arm->edbo) {
 
-				if (arm->act_edbone)
-					name = ((EditBone *)arm->act_edbone)->name;
-
+				if (arm->act_edbone) {
+					strcat(bread_crumbs, BREAD_CRUMB_SEPARATOR);
+					strcat(bread_crumbs,((EditBone *)arm->act_edbone)->name);
+				}
 			}
 			else if (ob->mode & OB_MODE_POSE) {
 				if (arm->act_bone) {
 
-					if (arm->act_bone->layer & arm->layer)
-						name = arm->act_bone->name;
-
+					if (arm->act_bone->layer & arm->layer) {
+						strcat(bread_crumbs, BREAD_CRUMB_SEPARATOR);
+						strcat(bread_crumbs,arm->act_bone->name);
+					}
 				}
 			}
-			if (name && markern)
-				BLI_snprintf(info, sizeof(info), "(%d) %s : %s <%s>", CFRA, ob->id.name + 2, name, markern);
-			else if (name)
-				BLI_snprintf(info, sizeof(info), "(%d) %s : %s", CFRA, ob->id.name + 2, name);
-			else
-				BLI_snprintf(info, sizeof(info), "(%d) %s", CFRA, ob->id.name + 2);
 		}
 		else if (ELEM3(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) {
 			Key *key = NULL;
 			KeyBlock *kb = NULL;
-			char shapes[MAX_NAME + 10];
 			char *bone_name = NULL;
 
-			/* try to display active shapekey too */
-			shapes[0] = '\0';
-			key = BKE_key_from_object(ob);
-			if (key) {
-				kb = BLI_findlink(&key->block, ob->shapenr - 1);
-				if (kb) {
-					BLI_snprintf(shapes, sizeof(shapes), ": %s ", kb->name);
-					if (ob->shapeflag == OB_SHAPE_LOCK) {
-						strcat(shapes, IFACE_(" (Pinned)"));
-					}
-				}
-			}
-			
-			if (ob->type == OB_MESH) {
+			/* try to display active bone and active shapekey too (if they exist) */
+
+			if (ob->type == OB_MESH && ob->mode & OB_MODE_WEIGHT_PAINT) {
 				Object *armobj = BKE_object_pose_armature_get(ob);
 				if (armobj  && armobj->mode & OB_MODE_POSE) {
 					bArmature *arm = armobj->data;
 					if (arm->act_bone) {
-						if (arm->act_bone->layer & arm->layer)
-							bone_name = arm->act_bone->name;
+						if (arm->act_bone->layer & arm->layer) {
+							strcat(bread_crumbs, BREAD_CRUMB_SEPARATOR);
+							strcat(bread_crumbs, arm->act_bone->name);
+						}
 					}
 				}
 			}
 
-			if (bone_name) {
-				if (markern)
-					BLI_snprintf(info, sizeof(info), "(%d) %s : %s %s <%s>", CFRA, ob->id.name + 2, bone_name, shapes, markern);
-				else
-					BLI_snprintf(info, sizeof(info), "(%d) %s : %s %s", CFRA, ob->id.name + 2, bone_name, shapes);
+			key = BKE_key_from_object(ob);
+			if (key) {
+				kb = BLI_findlink(&key->block, ob->shapenr - 1);
+				if (kb) {
+					strcat(bread_crumbs, BREAD_CRUMB_SEPARATOR);
+					strcat(bread_crumbs, kb->name);
+					if (ob->shapeflag == OB_SHAPE_LOCK) {
+						strcat(bread_crumbs, IFACE_(SHAPE_KEY_PINNED));
+					}
+				}
 			}
-			else {
-				if (markern)
-					BLI_snprintf(info, sizeof(info), "(%d) %s %s <%s>", CFRA, ob->id.name + 2, shapes, markern);
-				else
-					BLI_snprintf(info, sizeof(info), "(%d) %s %s", CFRA, ob->id.name + 2, shapes);
-			}
 		}
-		else {
-			/* standard object */
-			if (markern)
-				BLI_snprintf(info, sizeof(info), "(%d) %s <%s>", CFRA, ob->id.name + 2, markern);
-			else
-				BLI_snprintf(info, sizeof(info), "(%d) %s", CFRA, ob->id.name + 2);
-		}
 		
 		/* color depends on whether there is a keyframe */
 		if (id_frame_has_keyframe((ID *)ob, /* BKE_scene_frame_get(scene) */ (float)(CFRA), ANIMFILTER_KEYS_LOCAL))
@@ -968,15 +960,15 @@
 			UI_ThemeColor(TH_TEXT_HI);
 	}
 	else {
-		/* no object */
-		if (markern)
-			BLI_snprintf(info, sizeof(info), "(%d) <%s>", CFRA, markern);
-		else
-			BLI_snprintf(info, sizeof(info), "(%d)", CFRA);
-		
+		/* no object */		
 		/* color is always white */
 		UI_ThemeColor(TH_TEXT_HI);
 	}
+
+	if (markern)
+		BLI_snprintf(info, sizeof(info), "(%d)%s <%s>", CFRA, bread_crumbs, markern);
+	else
+		BLI_snprintf(info, sizeof(info), "(%d)%s", CFRA, bread_crumbs);
 	
 	if (U.uiflag & USER_SHOW_ROTVIEWICON)
 		offset = U.widget_unit + (U.rvisize * 2) + rect->xmin;




More information about the Bf-blender-cvs mailing list