Skip to content

Commit 34c82d2

Browse files
authored
Merge pull request #4867 from plotly/gl-hover-color
propagate WebGL traces with marker & line color arrays to hover labels
2 parents 94b31a8 + d693e09 commit 34c82d2

File tree

4 files changed

+400
-6
lines changed

4 files changed

+400
-6
lines changed

src/components/fx/hover.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -1103,16 +1103,21 @@ function createHoverText(hoverData, opts, gd) {
11031103
hoverLabels.each(function(d) {
11041104
var g = d3.select(this).attr('transform', '');
11051105

1106+
var dColor = d.color;
1107+
if(Array.isArray(dColor)) {
1108+
dColor = dColor[d.eventData[0].pointNumber];
1109+
}
1110+
11061111
// combine possible non-opaque trace color with bgColor
1107-
var color0 = d.bgcolor || d.color;
1112+
var color0 = d.bgcolor || dColor;
11081113
// color for 'nums' part of the label
11091114
var numsColor = Color.combine(
11101115
Color.opacity(color0) ? color0 : Color.defaultLine,
11111116
bgColor
11121117
);
11131118
// color for 'name' part of the label
11141119
var nameColor = Color.combine(
1115-
Color.opacity(d.color) ? d.color : Color.defaultLine,
1120+
Color.opacity(dColor) ? dColor : Color.defaultLine,
11161121
bgColor
11171122
);
11181123
// find a contrasting color for border and text

src/traces/scatter3d/convert.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,11 @@ function convertPlotlyOptions(scene, data) {
331331
return params;
332332
}
333333

334-
function arrayToColor(color) {
335-
if(Array.isArray(color)) {
334+
function _arrayToColor(color) {
335+
if(Lib.isArrayOrTypedArray(color)) {
336336
var c = color[0];
337337

338-
if(Array.isArray(c)) color = c;
338+
if(Lib.isArrayOrTypedArray(c)) color = c;
339339

340340
return 'rgb(' + color.slice(0, 3).map(function(x) {
341341
return Math.round(x * 255);
@@ -345,6 +345,18 @@ function arrayToColor(color) {
345345
return null;
346346
}
347347

348+
function arrayToColor(colors) {
349+
if(!Lib.isArrayOrTypedArray(colors)) {
350+
return null;
351+
}
352+
353+
if((colors.length === 4) && (typeof colors[0] === 'number')) {
354+
return _arrayToColor(colors);
355+
}
356+
357+
return colors.map(_arrayToColor);
358+
}
359+
348360
proto.update = function(data) {
349361
var gl = this.scene.glplot.gl;
350362
var lineOptions;

test/jasmine/tests/gl2d_click_test.js

+26
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Plotly.register([
2323
require('@lib/contourgl')
2424
]);
2525

26+
var mock0 = require('@mocks/gl2d_scatter-continuous-clustering.json');
2627
var mock1 = require('@mocks/gl2d_14.json');
2728
var mock2 = require('@mocks/gl2d_pointcloud-basic.json');
2829

@@ -445,6 +446,31 @@ describe('Test hover and click interactions', function() {
445446
.then(done);
446447
});
447448

449+
it('@gl scatter3d should propagate marker colors to hover labels', function(done) {
450+
var _mock = Lib.extendDeep({}, mock0);
451+
_mock.layout.width = 800;
452+
_mock.layout.height = 600;
453+
454+
var run = makeRunner([700, 300], {
455+
x: 15075859,
456+
y: 79183,
457+
curveNumber: 0,
458+
pointNumber: 0,
459+
bgcolor: 'rgb(202, 178, 214)',
460+
bordercolor: 'rgb(68, 68, 68)',
461+
fontSize: 13,
462+
fontFamily: 'Arial',
463+
fontColor: 'rgb(68, 68, 68)'
464+
}, {
465+
msg: 'pointcloud'
466+
});
467+
468+
Plotly.newPlot(gd, _mock)
469+
.then(run)
470+
.catch(failTest)
471+
.then(done);
472+
});
473+
448474
it('@gl should output correct event data for heatmapgl', function(done) {
449475
var _mock = Lib.extendDeep({}, mock3);
450476
_mock.data[0].type = 'heatmapgl';

0 commit comments

Comments
 (0)