svghmi/widget_scrollbar.ysl2
branchsvghmi
changeset 3138 1d724e8d5592
parent 3137 ac3ec66e9c6d
child 3139 1f5ca646ce6e
equal deleted inserted replaced
3137:ac3ec66e9c6d 3138:1d724e8d5592
    63             this.apply_position(is_up ? this.position-this.size
    63             this.apply_position(is_up ? this.position-this.size
    64                                       : this.position+this.size);
    64                                       : this.position+this.size);
    65         }
    65         }
    66 
    66 
    67         on_cursor_down(e){
    67         on_cursor_down(e){
       
    68             // get scrollbar -> root transform
       
    69             let ctm = this.range_elt.getCTM();
       
    70             // relative motion -> discard translation
       
    71             ctm.e = 0;
       
    72             ctm.f = 0;
       
    73             // root -> scrollbar transform
       
    74             this.invctm = ctm.inverse();
    68             svg_root.addEventListener("pointerup", this.bound_drop, true);
    75             svg_root.addEventListener("pointerup", this.bound_drop, true);
    69             svg_root.addEventListener("pointermove", this.bound_drag, true);
    76             svg_root.addEventListener("pointermove", this.bound_drag, true);
    70         }
    77         }
    71 
    78 
    72         drop(e) {
    79         drop(e) {
    75         }
    82         }
    76 
    83 
    77         drag(e) {
    84         drag(e) {
    78             let [size, maxh, range, pixels, units] = this.get_ratios();
    85             let [size, maxh, range, pixels, units] = this.get_ratios();
    79             if(pixels == 0) return;
    86             if(pixels == 0) return;
    80             let matrix = this.range_elt.getCTM().inverse();
       
    81             let point = new DOMPoint(e.movementX, e.movementY);
    87             let point = new DOMPoint(e.movementX, e.movementY);
    82             let movement = point.matrixTransform(matrix).y;
    88             let movement = point.matrixTransform(this.invctm).y;
    83             this.apply_position(this.position + movement * units / pixels);
    89             this.apply_position(this.position + movement * units / pixels);
    84         }
    90         }
    85     }
    91     }
    86     ||
    92     ||
    87 }
    93 }