[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23900] trunk/blender/source/blender: Assorted tweaks for animation editors:

Joshua Leung aligorith at gmail.com
Sat Oct 17 06:22:54 CEST 2009


Revision: 23900
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23900
Author:   aligorith
Date:     2009-10-17 06:22:52 +0200 (Sat, 17 Oct 2009)

Log Message:
-----------
Assorted tweaks for animation editors:

* Changing to the ShapeKey editor now automatically enables the value sliders
* Filtering code for ShapeKey editor can now do AnimData block filtering too (internal details...)
* Silenced console warnings when inserting keyframes on F-Curves with no keyframes already (for Animation Editor sliders)
* Made the update code for keyframe transforms send more general depsgraph updates. Unfortuately, this still doesn't resolve the update problems with shapekeys

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/editors/animation/anim_filter.c
    trunk/blender/source/blender/editors/animation/keyframing.c
    trunk/blender/source/blender/editors/space_action/action_draw.c
    trunk/blender/source/blender/editors/space_action/action_header.c
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -2235,7 +2235,18 @@
 				}
 			}
 		}
-
+		
+		/* set flags based on ShapeKey */
+		if(idtype == ID_KE) {
+			for(obt=bmain->object.first; obt; obt= obt->id.next) {
+				Key *key= ob_get_key(obt);
+				if(!(ob && obt == ob) && ((ID *)key == id)) {
+					obt->flag |= (OB_RECALC|OB_RECALC_DATA);
+					BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
+				}
+			}
+		}
+		
 		/* set flags based on particle settings */
 		if(idtype == ID_PA) {
 			ParticleSystem *psys;

Modified: trunk/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_filter.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/editors/animation/anim_filter.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -926,11 +926,11 @@
 /* Include ShapeKey Data for ShapeKey Editor */
 static int animdata_filter_shapekey (ListBase *anim_data, Key *key, int filter_mode)
 {
+	bAnimListElem *ale;
 	int items = 0;
 	
 	/* check if channels or only F-Curves */
 	if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) {
-		bAnimListElem *ale;
 		KeyBlock *kb;
 		
 		/* loop through the channels adding ShapeKeys as appropriate */
@@ -959,8 +959,12 @@
 	else {
 		/* just use the action associated with the shapekey */
 		// FIXME: is owner-id and having no owner/dopesheet really fine?
-		if (key->adt && key->adt->action)
-			items= animdata_filter_action(anim_data, NULL, key->adt->action, filter_mode, NULL, ANIMTYPE_NONE, (ID *)key);
+		if (key->adt) {
+			if (filter_mode & ANIMFILTER_ANIMDATA)
+				ANIMDATA_ADD_ANIMDATA(key)
+			else if (key->adt->action)
+				items= animdata_filter_action(anim_data, NULL, key->adt->action, filter_mode, NULL, ANIMTYPE_NONE, (ID *)key);
+		}
 	}
 	
 	/* return the number of items added to the list */

Modified: trunk/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyframing.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/editors/animation/keyframing.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -1430,7 +1430,7 @@
 short fcurve_frame_has_keyframe (FCurve *fcu, float frame, short filter)
 {
 	/* quick sanity check */
-	if (fcu == NULL)
+	if (ELEM(NULL, fcu, fcu->bezt))
 		return 0;
 	
 	/* we either include all regardless of muting, or only non-muted  */

Modified: trunk/blender/source/blender/editors/space_action/action_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_draw.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/editors/space_action/action_draw.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -258,7 +258,7 @@
 				if (acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT))
 					sel= ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_SELECT);
 				
-				if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET)) {
+				if (ELEM3(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET, ANIMCONT_SHAPEKEY)) {
 					switch (ale->type) {
 						case ANIMTYPE_SUMMARY:
 						{
@@ -307,17 +307,6 @@
 					if (ac->datatype == ANIMCONT_ACTION)
 						glRectf(act_start,  (float)y-ACHANNEL_HEIGHT_HALF,  act_end,  (float)y+ACHANNEL_HEIGHT_HALF);
 				}
-				else if (ac->datatype == ANIMCONT_SHAPEKEY) {
-					/* all frames that have a frame number less than one
-					 * get a desaturated orange background
-					 */
-					glColor4ub(col2[0], col2[1], col2[2], 0x22);
-					glRectf(0.0f, (float)y-ACHANNEL_HEIGHT_HALF, 1.0f, (float)y+ACHANNEL_HEIGHT_HALF);
-					
-					/* frames one and higher get a saturated orange background */
-					glColor4ub(col2[0], col2[1], col2[2], 0x44);
-					glRectf(1.0f, (float)y-ACHANNEL_HEIGHT_HALF, v2d->cur.xmax+EXTRA_SCROLL_PAD,  (float)y+ACHANNEL_HEIGHT_HALF);
-				}
 				else if (ac->datatype == ANIMCONT_GPENCIL) {
 					/* frames less than one get less saturated background */
 					if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22);

Modified: trunk/blender/source/blender/editors/space_action/action_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_header.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/editors/space_action/action_header.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -69,6 +69,7 @@
 
 enum {
 	B_REDR= 1,
+	B_MODECHANGE,
 } eActHeader_Events;
 
 /* ********************************************************* */
@@ -254,6 +255,15 @@
 
 static void do_action_buttons(bContext *C, void *arg, int event)
 {
+	/* special exception for mode changing - enable custom settings? */
+	if (event == B_MODECHANGE) {
+		SpaceAction *saction= CTX_wm_space_action(C);
+		
+		/* if the new mode is ShapeKeys editor, enable sliders */
+		if (saction->mode == SACTCONT_SHAPEKEY)
+			saction->flag |= SACTION_SLIDERS;
+	}
+	
 	ED_area_tag_refresh(CTX_wm_area(C));
 	ED_area_tag_redraw(CTX_wm_area(C));
 }
@@ -318,7 +328,7 @@
 	uiBlockSetEmboss(block, UI_EMBOSS);
 	
 	/* MODE SELECTOR */
-	uiDefButC(block, MENU, B_REDR, 
+	uiDefButC(block, MENU, B_MODECHANGE, 
 			"Editor Mode %t|DopeSheet %x3|Action Editor %x0|ShapeKey Editor %x1|Grease Pencil %x2", 
 			xco,yco,90,YIC, &saction->mode, 0, 1, 0, 0, 
 			"Editing modes for this editor");

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-16 22:21:53 UTC (rev 23899)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-17 04:22:52 UTC (rev 23900)
@@ -284,15 +284,8 @@
 		if (adt)
 			adt->recalc |= ADT_RECALC_ANIM;
 			
-		/* if ID-block is Object, set recalc flags */
-		switch (GS(id->name)) {
-			case ID_OB:
-			{
-				Object *ob= (Object *)id;
-				DAG_id_flush_update(&ob->id, OB_RECALC_DATA);  /* sets recalc flags */
-			}
-				break;
-		}
+		/* set recalc flags */
+		DAG_id_flush_update(id, OB_RECALC); // XXX or do we want something more restrictive?
 	}
 }
 





More information about the Bf-blender-cvs mailing list