RUNTIME: Variable trace now uses limited list and buffer instead of flags in instance tree that was requiring systematical instance tree traversal, and worst size buffer. Forcing and retain still use tree traversal.
// widget_animate.ysl2
widget_class("Animate") {
||
frequency = 5;
speed = 0;
start = false;
widget_center = undefined;
dispatch(value) {
this.speed = value / 5;
//reconfigure animation
this.request_animate();
}
animate(){
// change animation properties
for(let child of this.element.children){
if(child.nodeName.startsWith("animate")){
if(this.speed != 0 && !this.start){
this.start = true;
this.element.beginElement();
}
if(this.speed > 0){
child.setAttribute("dur", this.speed+"s");
}
else if(this.speed < 0){
child.setAttribute("dur", (-1)*this.speed+"s");
}
else{
this.start = false;
this.element.endElement();
}
}
}
}
init() {
let widget_pos = this.element.getBBox();
this.widget_center = [(widget_pos.x+widget_pos.width/2), (widget_pos.y+widget_pos.height/2)];
}
||
}