diff -r 61b0491fe05b -r f6d428330e04 svghmi/widget_circularslider.ysl2 --- a/svghmi/widget_circularslider.ysl2 Mon Aug 17 10:00:25 2020 +0200 +++ b/svghmi/widget_circularslider.ysl2 Tue Aug 18 11:42:28 2020 +0200 @@ -7,29 +7,56 @@ range = undefined; circle = undefined; handle_pos = undefined; + svg_dist = undefined; drag = false; enTimer = false; + last_drag = false; dispatch(value) { - if(!this.drag){ - if(this.value_elt) - this.value_elt.textContent = String(value); - - this.handle_position(value); - } - } - - handle_position(value){ + if(this.value_elt) + this.value_elt.textContent = String(value); + + this.update_DOM(value, this.handle_elt); + } + + update_DOM(value, elt){ let [min,max,totalDistance] = this.range; let length = Math.max(0,Math.min((totalDistance),(Number(value)-min)/(max-min)*(totalDistance))); let tip = this.range_elt.getPointAtLength(length); - this.handle_elt.setAttribute('transform',"translate("+(tip.x-this.handle_pos.x)+","+(tip.y-this.handle_pos.y)+")"); + elt.setAttribute('transform',"translate("+(tip.x-this.handle_pos.x)+","+(tip.y-this.handle_pos.y)+")"); + + if(this.setpoint_elt != undefined){ + if(this.last_drag!= this.drag){ + if(this.drag){ + this.setpoint_elt.setAttribute("style", this.setpoint_style); + }else{ + this.setpoint_elt.setAttribute("style", "display:none"); + } + this.last_drag = this.drag; + } + } } on_release(evt) { + window.removeEventListener("touchmove", this.on_bound_drag, true); + window.removeEventListener("mousemove", this.on_bound_drag, true); + + window.removeEventListener("mouseup", this.bound_on_release, true) + window.removeEventListener("touchend", this.bound_on_release, true); + window.removeEventListener("touchcancel", this.bound_on_release, true); if(this.drag){ this.drag = false; } + this.update_position(evt); + } + + on_drag(evt){ + if(this.enTimer && this.drag){ + this.update_position(evt); + //reset timer + this.enTimer = false; + setTimeout("{hmi_widgets['"+this.element_id+"'].enTimer = true;}", 100); + } } update_position(evt){ @@ -76,31 +103,39 @@ //get handle distance from mouse position if(fi