From 83578c8ab4d4933e219f9ed6d7421cb24c592816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 31 May 2016 12:18:22 -0400 Subject: [PATCH 1/3] convert line color using line.color and trace.opacity --- src/traces/scattergl/convert.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/traces/scattergl/convert.js b/src/traces/scattergl/convert.js index 0cb7f0e121c..6b8b97e75fb 100644 --- a/src/traces/scattergl/convert.js +++ b/src/traces/scattergl/convert.js @@ -486,10 +486,9 @@ proto.updateLines = function(options, positions) { } this.lineOptions.positions = linePositions; - var lineColor = str2RGBArray(options.line.color); - if(this.hasMarkers) lineColor[3] *= options.marker.opacity; - var lineWidth = Math.round(0.5 * this.lineOptions.width), + var lineColor = convertColor(options.line.color, options.opacity, 1), + lineWidth = Math.round(0.5 * this.lineOptions.width), dashes = (DASHES[options.line.dash] || [1]).slice(); for(i = 0; i < dashes.length; ++i) dashes[i] *= lineWidth; From 0f35746b6fb81b05989ad33c045aa9519265d78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 31 May 2016 12:19:39 -0400 Subject: [PATCH 2/3] fix is-fancy logic: - if trace has markers and any array style attr -> fancy - if trace has markers and a non-circle symbol -> fancy - if trace has lines and connecgaps false -> fancy --- src/traces/scattergl/convert.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/traces/scattergl/convert.js b/src/traces/scattergl/convert.js index 6b8b97e75fb..b3b544e1727 100644 --- a/src/traces/scattergl/convert.js +++ b/src/traces/scattergl/convert.js @@ -107,6 +107,7 @@ var proto = LineWithMarkers.prototype; proto.handlePick = function(pickResult) { var index = pickResult.pointId; + if(pickResult.object !== this.line || this.connectgaps) { index = this.idToIndex[pickResult.pointId]; } @@ -136,19 +137,20 @@ proto.isFancy = function(options) { if(!options.x || !options.y) return true; - var marker = options.marker || {}; - if(Array.isArray(marker.symbol) || - marker.symbol !== 'circle' || - Array.isArray(marker.size) || - Array.isArray(marker.line.width) || - Array.isArray(marker.opacity) - ) return true; - - var markerColor = marker.color; - if(Array.isArray(markerColor)) return true; + if(this.hasMarkers) { + var marker = options.marker || {}; + + if(Array.isArray(marker.symbol) || + marker.symbol !== 'circle' || + Array.isArray(marker.size) || + Array.isArray(marker.color) || + Array.isArray(marker.line.width) || + Array.isArray(marker.line.color) || + Array.isArray(marker.opacity) + ) return true; + } - var lineColor = Array.isArray(marker.line.color); - if(Array.isArray(lineColor)) return true; + if(this.hasLines && !this.connectgaps) return true; if(this.hasErrorX) return true; if(this.hasErrorY) return true; @@ -471,8 +473,10 @@ proto.updateFancy = function(options) { proto.updateLines = function(options, positions) { var i; + if(this.hasLines) { var linePositions = positions; + if(!options.connectgaps) { var p = 0; var x = this.xData; @@ -484,8 +488,8 @@ proto.updateLines = function(options, positions) { linePositions[p++] = y[i]; } } - this.lineOptions.positions = linePositions; + this.lineOptions.positions = linePositions; var lineColor = convertColor(options.line.color, options.opacity, 1), lineWidth = Math.round(0.5 * this.lineOptions.width), From 4837a42420735f52797b88c3031975ab399adab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 31 May 2016 12:34:25 -0400 Subject: [PATCH 3/3] add gl2d line opacity test case --- test/image/mocks/gl2d_line_opacity.json | 44 +++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/image/mocks/gl2d_line_opacity.json diff --git a/test/image/mocks/gl2d_line_opacity.json b/test/image/mocks/gl2d_line_opacity.json new file mode 100644 index 00000000000..bbb4a94b41d --- /dev/null +++ b/test/image/mocks/gl2d_line_opacity.json @@ -0,0 +1,44 @@ +{ + "data": [ + { + "x": [ + 1, + 2, + null, + 4, + 5 + ], + "y": [ + 1, + 2, + null, + 4, + 5 + ], + "connectgaps": false, + "type": "scattergl", + "opacity": 0.4 + } + ], + "layout": { + "xaxis": { + "type": "linear", + "range": [ + 0.9867209252516599, + 5.01327907474834 + ], + "autorange": true + }, + "yaxis": { + "type": "linear", + "range": [ + 0.9529946929492039, + 5.047005307050796 + ], + "autorange": true + }, + "height": 450, + "width": 1100, + "autosize": true + } +}