equal
deleted
inserted
replaced
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 } |