Render start and stop callbacks for all cases.

Rendering can happen on demand (by calling start()) but also when adding/removing nodes and relations. I also need to be informed when rendering starts in my use case. I have a re-arrange button that needs to be toggled whenever rendering is in progress, and with these events it's nice and clean.
When the event callbacks are passed in to the Springy.Renderer start() method only (as in my previous commit) then all the other cases are left out (adding/removing nodes/relations).
This commit is contained in:
Fabian Kessler 2013-04-21 02:57:18 +03:00
parent ffca60dcab
commit 81213595ed

View File

@ -487,13 +487,15 @@
* Start simulation if it's not running already.
* In case it's running then the call is ignored, and none of the callbacks passed is ever executed.
*/
Layout.ForceDirected.prototype.start = function(render, done) {
Layout.ForceDirected.prototype.start = function(render, onRenderStart, onRenderStop) {
var t = this;
if (this._started) return;
this._started = true;
this._stop = false;
if (onRenderStart !== undefined) { onRenderStart(); }
Springy.requestAnimationFrame(function step() {
t.applyCoulombsLaw();
t.applyHookesLaw();
@ -508,7 +510,7 @@
// stop simulation when energy of the system goes below a threshold
if (t._stop || t.totalEnergy() < 0.01) {
t._started = false;
if (done !== undefined) { done(); }
if (onRenderStop !== undefined) { onRenderStop(); }
} else {
Springy.requestAnimationFrame(step);
}
@ -628,12 +630,18 @@
// return Math.abs(ac.x * n.x + ac.y * n.y);
// };
// Renderer handles the layout rendering loop
var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode) {
/**
* Renderer handles the layout rendering loop
* @param onRenderStart optional callback function that gets executed whenever rendering starts.
* @param onRenderStop optional callback function that gets executed whenever rendering stops.
*/
var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode, onRenderStart, onRenderStop) {
this.layout = layout;
this.clear = clear;
this.drawEdge = drawEdge;
this.drawNode = drawNode;
this.onRenderStart = onRenderStart;
this.onRenderStop = onRenderStop;
this.layout.graph.addGraphListener(this);
}
@ -664,7 +672,7 @@
t.layout.eachNode(function(node, point) {
t.drawNode(node, point.p);
});
}, done);
}, this.onRenderStart, this.onRenderStop);
};
Renderer.prototype.stop = function() {