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;