cytoscape
Version:
Graph theory (a.k.a. network) library for analysis and visualisation
61 lines (44 loc) • 1.61 kB
JavaScript
import define from '../../define/index.mjs';
import * as util from '../../util/index.mjs';
import stepAll from './step-all.mjs';
let corefn = ({
// pull in animation functions
animate: define.animate(),
animation: define.animation(),
animated: define.animated(),
clearQueue: define.clearQueue(),
delay: define.delay(),
delayAnimation: define.delayAnimation(),
stop: define.stop(),
addToAnimationPool: function( eles ){
let cy = this;
if( !cy.styleEnabled() ){ return; } // save cycles when no style used
cy._private.aniEles.merge( eles );
},
stopAnimationLoop: function(){
this._private.animationsRunning = false;
},
startAnimationLoop: function(){
let cy = this;
cy._private.animationsRunning = true;
if( !cy.styleEnabled() ){ return; } // save cycles when no style used
// NB the animation loop will exec in headless environments if style enabled
// and explicit cy.destroy() is necessary to stop the loop
function headlessStep(){
if( !cy._private.animationsRunning ){ return; }
util.requestAnimationFrame( function animationStep( now ){
stepAll( now, cy );
headlessStep();
} );
}
let renderer = cy.renderer();
if( renderer && renderer.beforeRender ){ // let the renderer schedule animations
renderer.beforeRender( function rendererAnimationStep( willDraw, now ){
stepAll( now, cy );
}, renderer.beforeRenderPriorities.animations );
} else { // manage the animation loop ourselves
headlessStep(); // first call
}
}
});
export default corefn;