@@ -688,20 +688,10 @@ proto.updateMainDrag = function(fullLayout, polarLayout) {
688
688
clearSelect ( zoomlayer ) ;
689
689
}
690
690
691
- function applyZoomMove ( path1 , cpath ) {
692
- zb . attr ( 'd' , path1 ) ;
693
- corners . attr ( 'd' , cpath ) ;
694
- dragBox . transitionZoombox ( zb , corners , dimmed , lum ) ;
695
- dimmed = true ;
696
- }
697
-
698
- function zoomMove ( dx , dy ) {
699
- var x1 = x0 + dx ;
700
- var y1 = y0 + dy ;
701
- var rr0 = xy2r ( x0 , y0 ) ;
702
- var rr1 = Math . min ( xy2r ( x1 , y1 ) , radius ) ;
703
- var a0 = xy2a ( x0 , y0 ) ;
704
- var a1 = xy2a ( x1 , y1 ) ;
691
+ // N.B. this sets scoped 'r0' and 'r1'
692
+ // return true if 'valid' zoom distance, false otherwise
693
+ function clampAndSetR0R1 ( rr0 , rr1 ) {
694
+ rr1 = Math . min ( rr1 , radius ) ;
705
695
706
696
// starting or ending drag near center (outer edge),
707
697
// clamps radial distance at origin (at r=radius)
@@ -710,31 +700,48 @@ proto.updateMainDrag = function(fullLayout, polarLayout) {
710
700
else if ( rr1 < OFFEDGE ) rr1 = 0 ;
711
701
else if ( ( radius - rr1 ) < OFFEDGE ) rr1 = radius ;
712
702
713
- var path1 ;
714
- var cpath ;
715
-
703
+ // make sure r0 < r1,
704
+ // to get correct fill pattern in path1 below
716
705
if ( Math . abs ( rr1 - rr0 ) > MINZOOM ) {
717
- // make sure r0 < r1,
718
- // to get correct fill pattern in path1 below
719
706
if ( rr0 < rr1 ) {
720
707
r0 = rr0 ;
721
708
r1 = rr1 ;
722
709
} else {
723
710
r0 = rr1 ;
724
711
r1 = rr0 ;
725
- a1 = [ a0 , a0 = a1 ] [ 0 ] ; // swap a0 and a1
726
712
}
727
-
728
- path1 = path0 + _pathSectorClosed ( r1 ) + _pathSectorClosed ( r0 ) ;
729
- // keep 'starting' angle
730
- cpath = pathCorner ( r0 , a0 ) + pathCorner ( r1 , a0 ) ;
713
+ return true ;
731
714
} else {
732
715
r0 = null ;
733
716
r1 = null ;
734
- path1 = path0 ;
735
- cpath = 'M0,0Z' ;
717
+ return false ;
736
718
}
719
+ }
720
+
721
+ function applyZoomMove ( path1 , cpath ) {
722
+ path1 = path1 || path0 ;
723
+ cpath = cpath || 'M0,0Z' ;
724
+
725
+ zb . attr ( 'd' , path1 ) ;
726
+ corners . attr ( 'd' , cpath ) ;
727
+ dragBox . transitionZoombox ( zb , corners , dimmed , lum ) ;
728
+ dimmed = true ;
729
+ }
730
+
731
+ function zoomMove ( dx , dy ) {
732
+ var x1 = x0 + dx ;
733
+ var y1 = y0 + dy ;
734
+ var rr0 = xy2r ( x0 , y0 ) ;
735
+ var rr1 = Math . min ( xy2r ( x1 , y1 ) , radius ) ;
736
+ var a0 = xy2a ( x0 , y0 ) ;
737
+ var path1 ;
738
+ var cpath ;
737
739
740
+ if ( clampAndSetR0R1 ( rr0 , rr1 ) ) {
741
+ path1 = path0 + _pathSectorClosed ( r1 ) + _pathSectorClosed ( r0 ) ;
742
+ // keep 'starting' angle
743
+ cpath = pathCorner ( r0 , a0 ) + pathCorner ( r1 , a0 ) ;
744
+ }
738
745
applyZoomMove ( path1 , cpath ) ;
739
746
}
740
747
@@ -762,41 +769,17 @@ proto.updateMainDrag = function(fullLayout, polarLayout) {
762
769
var vangles1 = findEnclosingVertexAngles ( a1 ) ;
763
770
var rr0 = findPolygonRadius ( x0 , y0 , vangles0 [ 0 ] , vangles0 [ 1 ] ) ;
764
771
var rr1 = Math . min ( findPolygonRadius ( x1 , y1 , vangles1 [ 0 ] , vangles1 [ 1 ] ) , radius ) ;
765
-
766
- // starting or ending drag near center (outer edge),
767
- // clamps radial distance at origin (at r=radius)
768
- if ( rr0 < OFFEDGE ) rr0 = 0 ;
769
- else if ( ( radius - rr0 ) < OFFEDGE ) rr0 = radius ;
770
- else if ( rr1 < OFFEDGE ) rr1 = 0 ;
771
- else if ( ( radius - rr1 ) < OFFEDGE ) rr1 = radius ;
772
-
773
772
var path1 ;
774
773
var cpath ;
775
774
776
- if ( Math . abs ( rr1 - rr0 ) > MINZOOM ) {
777
- // make sure r0 < r1,
778
- // to get correct fill pattern in path1 below
779
- if ( rr0 < rr1 ) {
780
- r0 = rr0 ;
781
- r1 = rr1 ;
782
- } else {
783
- r0 = rr1 ;
784
- r1 = rr0 ;
785
- }
786
-
775
+ if ( clampAndSetR0R1 ( rr0 , rr1 ) ) {
787
776
path1 = path0 + _pathSectorClosed ( r1 ) + _pathSectorClosed ( r0 ) ;
788
777
// keep 'starting' angle here too
789
778
cpath = [
790
779
pathCornerForPolygons ( r0 , vangles0 [ 0 ] , vangles0 [ 1 ] ) ,
791
780
pathCornerForPolygons ( r1 , vangles0 [ 0 ] , vangles0 [ 1 ] )
792
781
] . join ( ' ' ) ;
793
- } else {
794
- r0 = null ;
795
- r1 = null ;
796
- path1 = path0 ;
797
- cpath = 'M0,0Z' ;
798
782
}
799
-
800
783
applyZoomMove ( path1 , cpath ) ;
801
784
}
802
785
0 commit comments