@@ -103,6 +103,16 @@ drawing.setRect = function(s, x, y, w, h) {
103
103
drawing . translatePoint = function ( d , sel , xa , ya ) {
104
104
var x = xa . c2p ( d . x ) ;
105
105
var y = ya . c2p ( d . y ) ;
106
+ if ( isNumeric ( d . x1 ) ) {
107
+ x = ( xa . c2p ( d . x1 ) + x ) / 2 ;
108
+ }
109
+ if ( isNumeric ( d . y1 ) ) {
110
+ y = ( ya . c2p ( d . y1 ) + y ) / 2 ;
111
+ }
112
+
113
+ // Store middle point for use on hover
114
+ d . xc = x ;
115
+ d . yc = y ;
106
116
107
117
if ( isNumeric ( x ) && isNumeric ( y ) && sel . node ( ) ) {
108
118
// for multiline text this works better
@@ -377,9 +387,9 @@ drawing.symbolNumber = function(v) {
377
387
0 : Math . floor ( Math . max ( v , 0 ) ) ;
378
388
} ;
379
389
380
- function makePointPath ( symbolNumber , r , t , s ) {
390
+ function makePointPath ( symbolNumber , rx , ry , t , s ) {
381
391
var base = symbolNumber % 100 ;
382
- return drawing . symbolFuncs [ base ] ( r , t , s ) + ( symbolNumber >= 200 ? DOTPATH : '' ) ;
392
+ return drawing . symbolFuncs [ base ] ( rx , ry , t , s ) + ( symbolNumber >= 200 ? DOTPATH : '' ) ;
383
393
}
384
394
385
395
var stopFormatter = numberFormat ( '~f' ) ;
@@ -754,10 +764,10 @@ drawing.getPatternAttr = function(mp, i, dflt) {
754
764
return mp ;
755
765
} ;
756
766
757
- drawing . pointStyle = function ( s , trace , gd , pt ) {
767
+ drawing . pointStyle = function ( s , trace , xa , ya , gd , pt ) {
758
768
if ( ! s . size ( ) ) return ;
759
769
760
- var fns = drawing . makePointStyleFns ( trace ) ;
770
+ var fns = drawing . makePointStyleFns ( trace , xa , ya ) ;
761
771
762
772
s . each ( function ( d ) {
763
773
drawing . singlePointStyle ( d , d3 . select ( this ) , trace , fns , gd , pt ) ;
@@ -775,21 +785,27 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
775
785
( d . mo === undefined ? marker . opacity : d . mo )
776
786
) ;
777
787
778
- if ( fns . ms2mrc ) {
779
- var r ;
788
+ if ( fns . ms2mrx && fns . ms2mry ) {
789
+ var rx , ry ;
780
790
781
791
// handle multi-trace graph edit case
782
792
if ( d . ms === 'various' || marker . size === 'various' ) {
783
- r = 3 ;
793
+ rx = ry = 3 ;
784
794
} else {
785
- r = fns . ms2mrc ( d . ms ) ;
795
+ rx = fns . ms2mrx ( d ) ;
796
+ ry = fns . ms2mry ( d ) ;
786
797
}
787
798
788
799
// store the calculated size so hover can use it
789
- d . mrc = r ;
800
+ d . mrxc = rx ;
801
+ d . mryc = ry ;
802
+
803
+ // TODO: Can we remove mrc?
804
+ d . mrc = Math . max ( rx , ry ) ;
790
805
806
+ // TODO: Update selected size to handle ranges
791
807
if ( fns . selectedSizeFn ) {
792
- r = d . mrc = fns . selectedSizeFn ( d ) ;
808
+ d . mrc = fns . selectedSizeFn ( d ) ;
793
809
}
794
810
795
811
// turn the symbol into a sanitized number
@@ -802,7 +818,7 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
802
818
var angle = getMarkerAngle ( d , trace ) ;
803
819
var standoff = getMarkerStandoff ( d , trace ) ;
804
820
805
- sel . attr ( 'd' , makePointPath ( x , r , angle , standoff ) ) ;
821
+ sel . attr ( 'd' , makePointPath ( x , rx , ry , angle , standoff ) ) ;
806
822
}
807
823
808
824
var perPointGradient = false ;
@@ -920,7 +936,7 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {
920
936
}
921
937
} ;
922
938
923
- drawing . makePointStyleFns = function ( trace ) {
939
+ drawing . makePointStyleFns = function ( trace , xa , ya ) {
924
940
var out = { } ;
925
941
var marker = trace . marker ;
926
942
@@ -930,9 +946,28 @@ drawing.makePointStyleFns = function(trace) {
930
946
out . lineScale = drawing . tryColorscale ( marker , 'line' ) ;
931
947
932
948
if ( Registry . traceIs ( trace , 'symbols' ) ) {
933
- out . ms2mrc = subTypes . isBubble ( trace ) ?
934
- makeBubbleSizeFn ( trace ) :
935
- function ( ) { return ( marker . size || 6 ) / 2 ; } ;
949
+ const ms2mrc = subTypes . isBubble ( trace )
950
+ ? makeBubbleSizeFn ( trace )
951
+ : function ( ) { return ( marker . size || 6 ) / 2 ; } ;
952
+
953
+ out . ms2mrx = function ( trace ) {
954
+ var mr = ms2mrc ( trace . ms ) ;
955
+ if ( trace . x1 == null ) {
956
+ return mr ;
957
+ }
958
+ var x = xa . c2p ( trace . x ) ;
959
+ var x1 = xa . c2p ( trace . x1 ) ;
960
+ return Math . max ( Math . abs ( x1 - x ) / 2 , mr ) ;
961
+ }
962
+ out . ms2mry = function ( trace ) {
963
+ var mr = ms2mrc ( trace . ms )
964
+ if ( trace . y1 == null ) {
965
+ return mr ;
966
+ }
967
+ var y = ya . c2p ( trace . y ) ;
968
+ var y1 = ya . c2p ( trace . y1 ) ;
969
+ return Math . max ( Math . abs ( y1 - y ) / 2 , mr ) ;
970
+ }
936
971
}
937
972
938
973
if ( trace . selectedpoints ) {
@@ -1059,7 +1094,7 @@ drawing.selectedPointStyle = function(s, trace) {
1059
1094
var mx = d . mx || marker . symbol || 0 ;
1060
1095
var mrc2 = fns . selectedSizeFn ( d ) ;
1061
1096
1062
- pt . attr ( 'd' , makePointPath ( drawing . symbolNumber ( mx ) , mrc2 , getMarkerAngle ( d , trace ) , getMarkerStandoff ( d , trace ) ) ) ;
1097
+ pt . attr ( 'd' , makePointPath ( drawing . symbolNumber ( mx ) , mrc2 , mrc2 , getMarkerAngle ( d , trace ) , getMarkerStandoff ( d , trace ) ) ) ;
1063
1098
1064
1099
// save for Drawing.selectedTextStyle
1065
1100
d . mrc2 = mrc2 ;
0 commit comments