Skip to content

Commit 1f38246

Browse files
committed
filter gl3d alpha from rgba result when having only rgb
1 parent 554d3d1 commit 1f38246

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

src/lib/gl_format_color.js

+22-6
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,35 @@ var Colorscale = require('../components/colorscale');
1616
var colorDflt = require('../components/color/attributes').defaultLine;
1717
var isArrayOrTypedArray = require('./array').isArrayOrTypedArray;
1818

19-
var colorDfltRgba = rgba(colorDflt);
19+
function filterRGBA(colorIn, desiredType) {
20+
var colorOut = rgba(colorIn, desiredType);
21+
22+
if(typeof colorIn === 'string' &&
23+
!colorIn.indexOf('rgb') &&
24+
colorIn.indexOf('rgba')
25+
) {
26+
// drop alpha if not having rgb
27+
colorOut = [colorOut[0], colorOut[1], colorOut[2]];
28+
}
29+
return colorOut;
30+
}
31+
32+
var colorDfltRgba = filterRGBA(colorDflt);
2033
var opacityDflt = 1;
2134

2235
function calculateColor(colorIn, opacityIn) {
2336
var colorOut = colorIn;
24-
colorOut[3] *= opacityIn;
37+
38+
if(colorOut.length > 3) colorOut[3] *= opacityIn;
39+
else if(opacityIn < 1) colorOut[3] = opacityIn;
40+
2541
return colorOut;
2642
}
2743

2844
function validateColor(colorIn) {
2945
if(isNumeric(colorIn)) return colorDfltRgba;
3046

31-
var colorOut = rgba(colorIn);
32-
47+
var colorOut = filterRGBA(colorIn);
3348
return colorOut.length ? colorOut : colorDfltRgba;
3449
}
3550

@@ -54,7 +69,7 @@ function formatColor(containerIn, opacityIn, len) {
5469
if(isArrayColorIn) {
5570
getColor = function(c, i) {
5671
// FIXME: there is double work, considering that sclFunc does the opposite
57-
return c[i] === undefined ? colorDfltRgba : rgba(sclFunc(c[i]));
72+
return c[i] === undefined ? colorDfltRgba : filterRGBA(sclFunc(c[i]));
5873
};
5974
} else getColor = validateColor;
6075

@@ -70,7 +85,7 @@ function formatColor(containerIn, opacityIn, len) {
7085
opacityi = getOpacity(opacityIn, i);
7186
colorOut[i] = calculateColor(colori, opacityi);
7287
}
73-
} else colorOut = calculateColor(rgba(colorIn), opacityIn);
88+
} else colorOut = calculateColor(filterRGBA(colorIn), opacityIn);
7489

7590
return colorOut;
7691
}
@@ -96,6 +111,7 @@ function parseColorScale(cont, alpha) {
96111
}
97112

98113
module.exports = {
114+
filterRGBA: filterRGBA,
99115
formatColor: formatColor,
100116
parseColorScale: parseColorScale
101117
};

src/traces/scattergl/convert.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010

1111
var isNumeric = require('fast-isnumeric');
1212
var svgSdf = require('svg-path-sdf');
13-
var rgba = require('color-normalize');
1413

1514
var Registry = require('../../registry');
1615
var Lib = require('../../lib');
1716
var Drawing = require('../../components/drawing');
1817
var AxisIDs = require('../../plots/cartesian/axis_ids');
19-
18+
var filterRGBA = require('../../lib/gl_format_color').filterRGBA;
2019
var formatColor = require('../../lib/gl_format_color').formatColor;
2120
var subTypes = require('../scatter/subtypes');
2221
var makeBubbleSizeFn = require('../scatter/make_bubble_size_func');
@@ -229,12 +228,12 @@ function convertMarkerStyle(trace) {
229228
optsOut.opacity = trace.opacity;
230229
} else {
231230
if(isOpen) {
232-
optsOut.color = rgba(optsIn.color, 'uint8');
231+
optsOut.color = filterRGBA(optsIn.color, 'uint8');
233232
optsOut.color[3] = 0;
234-
optsOut.borderColor = rgba(optsIn.color, 'uint8');
233+
optsOut.borderColor = filterRGBA(optsIn.color, 'uint8');
235234
} else {
236-
optsOut.color = rgba(optsIn.color, 'uint8');
237-
optsOut.borderColor = rgba(optsIn.line.color, 'uint8');
235+
optsOut.color = filterRGBA(optsIn.color, 'uint8');
236+
optsOut.borderColor = filterRGBA(optsIn.line.color, 'uint8');
238237
}
239238

240239
optsOut.opacity = trace.opacity * optsIn.opacity;

0 commit comments

Comments
 (0)