@@ -373,6 +373,11 @@ drawing.pattern = function(sel, gd, patternID, shape, bgcolor, fgcolor, size, so
373373 var fullID = 'p' + fullLayout . _uid + '-' + patternID ;
374374 var width , height ;
375375
376+ // linear interpolation
377+ var linearFn = function ( x , x0 , x1 , y0 , y1 ) {
378+ return y0 + ( y1 - y0 ) * ( x - x0 ) / ( x1 - x0 ) ;
379+ } ;
380+
376381 var path , linewidth , radius ;
377382 var patternTag ;
378383 var patternAttrs = { } ;
@@ -468,10 +473,6 @@ drawing.pattern = function(sel, gd, patternID, shape, bgcolor, fgcolor, size, so
468473 if ( solidity < Math . PI / 4 ) {
469474 radius = Math . sqrt ( solidity * size * size / Math . PI ) ;
470475 } else {
471- // linear interpolation
472- var linearFn = function ( x , x0 , x1 , y0 , y1 ) {
473- return y0 + ( y1 - y0 ) * ( x - x0 ) / ( x1 - x0 ) ;
474- } ;
475476 radius = linearFn ( solidity , Math . PI / 4 , 1.0 , size / 2 , size / Math . sqrt ( 2 ) ) ;
476477 }
477478 patternTag = 'circle' ;
@@ -561,6 +562,13 @@ drawing.initPatterns = function(gd) {
561562 fullLayout . _patternUrlQueryParts = { } ;
562563} ;
563564
565+ drawing . getPatternAttr = function ( mp , i , dflt ) {
566+ if ( mp && Lib . isArrayOrTypedArray ( mp ) ) {
567+ return i < mp . length ? mp [ i ] : dflt ;
568+ }
569+ return mp ;
570+ } ;
571+
564572drawing . pointStyle = function ( s , trace , gd ) {
565573 if ( ! s . size ( ) ) return ;
566574
@@ -665,20 +673,13 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd) {
665673
666674 // for legend - arrays will propagate through here, but we don't need
667675 // to treat it as per-point.
668- if ( Array . isArray ( gradientType ) ) {
676+ if ( Lib . isArrayOrTypedArray ( gradientType ) ) {
669677 gradientType = gradientType [ 0 ] ;
670678 if ( ! gradientInfo [ gradientType ] ) gradientType = 0 ;
671679 }
672680
673- var getPatternAttr = function ( mp , i , dflt ) {
674- if ( mp && Array . isArray ( mp ) ) {
675- if ( i < mp . length ) return mp [ i ] ;
676- else return dflt ;
677- }
678- return mp ;
679- } ;
680681 var markerPattern = marker . pattern ;
681- var patternShape = markerPattern && getPatternAttr ( markerPattern . shape , d . i , '' ) ;
682+ var patternShape = markerPattern && drawing . getPatternAttr ( markerPattern . shape , d . i , '' ) ;
682683
683684 if ( gradientType && gradientType !== 'none' ) {
684685 var gradientColor = d . mgc ;
@@ -691,13 +692,13 @@ drawing.singlePointStyle = function(d, sel, trace, fns, gd) {
691692 drawing . gradient ( sel , gd , gradientID , gradientType ,
692693 [ [ 0 , gradientColor ] , [ 1 , fillColor ] ] , 'fill' ) ;
693694 } else if ( patternShape ) {
694- var patternBGColor = getPatternAttr ( markerPattern . bgcolor , d . i , null ) ;
695- var patternSize = getPatternAttr ( markerPattern . size , d . i , 8 ) ;
696- var patternSolidity = getPatternAttr ( markerPattern . solidity , d . i , 0.3 ) ;
697- var perPointPattern = Array . isArray ( markerPattern . shape ) ||
698- Array . isArray ( markerPattern . bgcolor ) ||
699- Array . isArray ( markerPattern . size ) ||
700- Array . isArray ( markerPattern . solidity ) ;
695+ var patternBGColor = drawing . getPatternAttr ( markerPattern . bgcolor , d . i , null ) ;
696+ var patternSize = drawing . getPatternAttr ( markerPattern . size , d . i , 8 ) ;
697+ var patternSolidity = drawing . getPatternAttr ( markerPattern . solidity , d . i , 0.3 ) ;
698+ var perPointPattern = Lib . isArrayOrTypedArray ( markerPattern . shape ) ||
699+ Lib . isArrayOrTypedArray ( markerPattern . bgcolor ) ||
700+ Lib . isArrayOrTypedArray ( markerPattern . size ) ||
701+ Lib . isArrayOrTypedArray ( markerPattern . solidity ) ;
701702
702703 var patternID = trace . uid ;
703704 if ( perPointPattern ) patternID += '-' + d . i ;
0 commit comments