[Bf-blender-cvs] [c653077] master: Fix node auto-offset failing during heavy compositing (sometimes)

Julian Eisel noreply at git.blender.org
Mon Sep 21 01:04:18 CEST 2015


Commit: c653077bf568ba53f3f7eb8c98c0657527cf44fd
Author: Julian Eisel
Date:   Mon Sep 21 00:55:37 2015 +0200
Branches: master
https://developer.blender.org/rBc653077bf568ba53f3f7eb8c98c0657527cf44fd

Fix node auto-offset failing during heavy compositing (sometimes)

Compositing might make main thread so busy that animation is considered done due to duration before final position is reached.

Also added check to avoid unnecessary redraws.

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

M	source/blender/editors/space_node/node_relationships.c

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

diff --git a/source/blender/editors/space_node/node_relationships.c b/source/blender/editors/space_node/node_relationships.c
index 7286b6f..a9f126a 100644
--- a/source/blender/editors/space_node/node_relationships.c
+++ b/source/blender/editors/space_node/node_relationships.c
@@ -1634,12 +1634,31 @@ static int node_insert_offset_modal(bContext *C, wmOperator *UNUSED(op), const w
 	NodeInsertOfsData *iofsd = snode->iofsd;
 	bNode *node;
 	float duration;
+	bool redraw = false;
 
 	if (!snode || event->type != TIMER || iofsd->anim_timer != event->customdata)
 		return OPERATOR_PASS_THROUGH;
 
-	/* end timer + free insert offset data */
 	duration = (float)iofsd->anim_timer->duration;
+
+	/* handle animation - do this before possibly aborting due to duration, since
+	 * main thread might be so busy that node hasn't reached final position yet */
+	for (node = snode->edittree->nodes.first; node; node = node->next) {
+		if (UNLIKELY(node->anim_ofsx)) {
+			const float endval = node->anim_init_locx + node->anim_ofsx;
+			if (node->locx < endval) {
+				node->locx = BLI_easing_cubic_ease_in_out(duration, node->anim_init_locx, node->anim_ofsx,
+				                                          NODE_INSOFS_ANIM_DURATION);
+				CLAMP_MAX(node->locx, endval);
+				redraw = true;
+			}
+		}
+	}
+	if (redraw) {
+		ED_region_tag_redraw(CTX_wm_region(C));
+	}
+
+	/* end timer + free insert offset data */
 	if (duration > NODE_INSOFS_ANIM_DURATION) {
 		WM_event_remove_timer(CTX_wm_manager(C), NULL, iofsd->anim_timer);
 
@@ -1653,15 +1672,6 @@ static int node_insert_offset_modal(bContext *C, wmOperator *UNUSED(op), const w
 		return (OPERATOR_FINISHED | OPERATOR_PASS_THROUGH);
 	}
 
-	/* handle animation */
-	for (node = snode->edittree->nodes.first; node; node = node->next) {
-		if (node->anim_ofsx) {
-			node->locx = BLI_easing_cubic_ease_in_out(duration, node->anim_init_locx, node->anim_ofsx,
-			                                          NODE_INSOFS_ANIM_DURATION);
-		}
-	}
-	ED_region_tag_redraw(CTX_wm_region(C));
-
 	return OPERATOR_RUNNING_MODAL;
 }




More information about the Bf-blender-cvs mailing list