--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/svghmi/widget_animaterotation.ysl2 Mon Oct 19 09:29:11 2020 +0200
@@ -0,0 +1,51 @@
+// widget_animaterotation.ysl2
+
+template "widget[@type='AnimateRotation']", mode="widget_class"{
+ ||
+ class AnimateRotationWidget extends Widget{
+ frequency = 5;
+ speed = 0;
+ 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 == "animateTransform"){
+ if(this.speed > 0){
+ child.setAttribute("dur", this.speed+"s");
+ child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
+ child.setAttribute("to", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
+ }
+ else if(this.speed < 0){
+ child.setAttribute("dur", (-1)*this.speed+"s");
+ child.setAttribute("from", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
+ child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
+ }
+ else{
+ child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
+ child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
+ }
+ }
+ }
+ }
+
+ init() {
+ let widget_pos = this.element.getBBox();
+ this.widget_center = [(widget_pos.x+widget_pos.width/2), (widget_pos.y+widget_pos.height/2)];
+ }
+ }
+ ||
+}
+
+
+template "widget[@type='AnimateRotation']", mode="widget_defs" {
+ param "hmi_element";
+ |,
+}