@@ -177,24 +177,42 @@ drawing.dashStyle = function(dash, lineWidth) {
177177 return dash ;
178178} ;
179179
180+ function setFillStyle ( sel , trace , gd ) {
181+ var markerPattern = trace . fillpattern ;
182+ var patternShape = markerPattern && drawing . getPatternAttr ( markerPattern . shape , 0 , '' ) ;
183+ if ( patternShape ) {
184+ var patternBGColor = drawing . getPatternAttr ( markerPattern . bgcolor , 0 , null ) ;
185+ var patternFGColor = drawing . getPatternAttr ( markerPattern . fgcolor , 0 , null ) ;
186+ var patternFGOpacity = markerPattern . fgopacity ;
187+ var patternSize = drawing . getPatternAttr ( markerPattern . size , 0 , 8 ) ;
188+ var patternSolidity = drawing . getPatternAttr ( markerPattern . solidity , 0 , 0.3 ) ;
189+ var patternID = trace . uid ;
190+ drawing . pattern ( sel , 'point' , gd , patternID ,
191+ patternShape , patternSize , patternSolidity ,
192+ undefined , markerPattern . fillmode ,
193+ patternBGColor , patternFGColor , patternFGOpacity
194+ ) ;
195+ } else if ( trace . fillcolor ) {
196+ sel . call ( Color . fill , trace . fillcolor ) ;
197+ }
198+ }
199+
180200// Same as fillGroupStyle, except in this case the selection may be a transition
181- drawing . singleFillStyle = function ( sel ) {
201+ drawing . singleFillStyle = function ( sel , gd ) {
182202 var node = d3 . select ( sel . node ( ) ) ;
183203 var data = node . data ( ) ;
184- var fillcolor = ( ( ( data [ 0 ] || [ ] ) [ 0 ] || { } ) . trace || { } ) . fillcolor ;
185- if ( fillcolor ) {
186- sel . call ( Color . fill , fillcolor ) ;
187- }
204+ var trace = ( ( data [ 0 ] || [ ] ) [ 0 ] || { } ) . trace || { } ;
205+ setFillStyle ( sel , trace , gd ) ;
188206} ;
189207
190- drawing . fillGroupStyle = function ( s ) {
208+ drawing . fillGroupStyle = function ( s , gd ) {
191209 s . style ( 'stroke-width' , 0 )
192210 . each ( function ( d ) {
193211 var shape = d3 . select ( this ) ;
194212 // N.B. 'd' won't be a calcdata item when
195213 // fill !== 'none' on a segment-less and marker-less trace
196214 if ( d [ 0 ] . trace ) {
197- shape . call ( Color . fill , d [ 0 ] . trace . fillcolor ) ;
215+ setFillStyle ( shape , d [ 0 ] . trace , gd ) ;
198216 }
199217 } ) ;
200218} ;
@@ -347,12 +365,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
347365 sel . style ( prop , getFullUrl ( fullID , gd ) )
348366 . style ( prop + '-opacity' , null ) ;
349367
350- var className2query = function ( s ) {
351- return '.' + s . attr ( 'class' ) . replace ( / \s / g, '.' ) ;
352- } ;
353- var k = className2query ( d3 . select ( sel . node ( ) . parentNode ) ) +
354- '>' + className2query ( sel ) ;
355- fullLayout . _gradientUrlQueryParts [ k ] = 1 ;
368+ sel . classed ( 'gradient_filled' , true ) ;
356369} ;
357370
358371/**
@@ -559,11 +572,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
559572 . style ( 'fill-opacity' , null ) ;
560573
561574 sel . classed ( 'pattern_filled' , true ) ;
562- var className2query = function ( s ) {
563- return '.' + s . attr ( 'class' ) . replace ( / \s / g, '.' ) ;
564- } ;
565- var k = className2query ( d3 . select ( sel . node ( ) . parentNode ) ) + '>.pattern_filled' ;
566- fullLayout . _patternUrlQueryParts [ k ] = 1 ;
567575} ;
568576
569577/*
@@ -579,9 +587,7 @@ drawing.initGradients = function(gd) {
579587 var gradientsGroup = Lib . ensureSingle ( fullLayout . _defs , 'g' , 'gradients' ) ;
580588 gradientsGroup . selectAll ( 'linearGradient,radialGradient' ) . remove ( ) ;
581589
582- // initialize stash of query parts filled in Drawing.gradient,
583- // used to fix URL strings during image exports
584- fullLayout . _gradientUrlQueryParts = { } ;
590+ d3 . select ( gd ) . selectAll ( '.gradient_filled' ) . classed ( 'gradient_filled' , false ) ;
585591} ;
586592
587593drawing . initPatterns = function ( gd ) {
@@ -590,9 +596,7 @@ drawing.initPatterns = function(gd) {
590596 var patternsGroup = Lib . ensureSingle ( fullLayout . _defs , 'g' , 'patterns' ) ;
591597 patternsGroup . selectAll ( 'pattern' ) . remove ( ) ;
592598
593- // initialize stash of query parts filled in Drawing.pattern,
594- // used to fix URL strings during image exports
595- fullLayout . _patternUrlQueryParts = { } ;
599+ d3 . select ( gd ) . selectAll ( '.pattern_filled' ) . classed ( 'pattern_filled' , false ) ;
596600} ;
597601
598602drawing . getPatternAttr = function ( mp , i , dflt ) {
0 commit comments