@@ -1136,7 +1136,7 @@ d3 = function() {
11361136 } ;
11371137 var d3_selectionRoot = d3 . select ( d3_documentElement ) ;
11381138 d3 . behavior . zoom = function ( ) {
1139- var translate = [ 0 , 0 ] , translate0 , scale = 1 , scale0 , scaleExtent = d3_behavior_zoomInfinity , event = d3_eventDispatch ( zoom , "zoom" ) , x0 , x1 , y0 , y1 , touchtime ;
1139+ var translate = [ 0 , 0 ] , translate0 , scale = 1 , distance0 , scale0 , scaleExtent = d3_behavior_zoomInfinity , event = d3_eventDispatch ( zoom , "zoom" ) , x0 , x1 , y0 , y1 , touchtime ;
11401140 function zoom ( ) {
11411141 this . on ( "mousedown.zoom" , mousedown ) . on ( "mousemove.zoom" , mousemove ) . on ( d3_behavior_zoomWheel + ".zoom" , mousewheel ) . on ( "dblclick.zoom" , dblclick ) . on ( "touchstart.zoom" , touchstart ) . on ( "touchmove.zoom" , touchmove ) . on ( "touchend.zoom" , touchstart ) ;
11421142 }
@@ -1237,6 +1237,7 @@ d3 = function() {
12371237 var touches = d3 . touches ( this ) , now = Date . now ( ) ;
12381238 scale0 = scale ;
12391239 translate0 = { } ;
1240+ distance0 = 0 ;
12401241 touches . forEach ( function ( t ) {
12411242 translate0 [ t . identifier ] = location ( t ) ;
12421243 } ) ;
@@ -1248,15 +1249,22 @@ d3 = function() {
12481249 dispatch ( event . of ( this , arguments ) ) ;
12491250 }
12501251 touchtime = now ;
1252+ } else if ( touches . length > 1 ) {
1253+ var p = touches [ 0 ] , q = touches [ 1 ] , dx = p [ 0 ] - q [ 0 ] , dy = p [ 1 ] - q [ 1 ] ;
1254+ distance0 = dx * dx + dy * dy ;
12511255 }
12521256 }
12531257 function touchmove ( ) {
12541258 var touches = d3 . touches ( this ) , p0 = touches [ 0 ] , l0 = translate0 [ p0 . identifier ] ;
12551259 if ( p1 = touches [ 1 ] ) {
1256- var p1 , l1 = translate0 [ p1 . identifier ] ;
1260+ var p1 , l1 = translate0 [ p1 . identifier ] , scale = d3 . event . scale ;
1261+ if ( scale == null ) {
1262+ var distance = ( distance = p1 [ 0 ] - p0 [ 0 ] ) * distance + ( distance = p1 [ 1 ] - p0 [ 1 ] ) * distance ;
1263+ scale = distance0 && Math . sqrt ( distance / distance0 ) ;
1264+ }
12571265 p0 = [ ( p0 [ 0 ] + p1 [ 0 ] ) / 2 , ( p0 [ 1 ] + p1 [ 1 ] ) / 2 ] ;
12581266 l0 = [ ( l0 [ 0 ] + l1 [ 0 ] ) / 2 , ( l0 [ 1 ] + l1 [ 1 ] ) / 2 ] ;
1259- scaleTo ( d3 . event . scale * scale0 ) ;
1267+ scaleTo ( scale * scale0 ) ;
12601268 }
12611269 translateTo ( p0 , l0 ) ;
12621270 touchtime = null ;
0 commit comments