Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 075bd14

Browse filesBrowse files
committed
DRY up fill ordering logic
... by using _nexttrace and _prevtrace like SVG scatter does
1 parent 9cc641a commit 075bd14
Copy full SHA for 075bd14

File tree

Expand file treeCollapse file tree

1 file changed

+40
-51
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+40
-51
lines changed

‎src/traces/scattergl/index.js

Copy file name to clipboardExpand all lines: src/traces/scattergl/index.js
+40-51Lines changed: 40 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -256,64 +256,38 @@ function sceneUpdate(gd, subplot) {
256256

257257
// draw traces in proper order
258258
scene.draw = function draw() {
259-
var i;
260-
var we_must_draw_previous_line_marker = 0;
261-
for(i = 0; i < scene.count; i++) {
262-
var we_defer_somes_draw = 0;
263-
if(scene.fill2d && scene.fillOptions[i] && scene.fillOptions[i].fillmode && scene.fillOptions[i].fillmode === 'tonext') {
264-
we_defer_somes_draw = 1;
265-
} else {
266-
if(we_must_draw_previous_line_marker && scene.line2d && scene.lineOptions[i - 1]) {
267-
scene.line2d.draw(i - 1);
268-
}
269-
if(we_must_draw_previous_line_marker && scene.scatter2d && scene.markerOptions[i - 1]) {
270-
scene.scatter2d.draw(i - 1);
271-
}
272-
we_must_draw_previous_line_marker = 0;
273-
}
274-
if(scene.fill2d && scene.fillOptions[i]) {
275-
scene.fill2d.draw(i);
259+
var count = scene.count;
260+
var fill2d = scene.fill2d;
261+
var error2d = scene.error2d;
262+
var line2d = scene.line2d;
263+
var scatter2d = scene.scatter2d;
264+
var glText = scene.glText;
265+
var select2d = scene.select2d;
266+
var selectBatch = scene.selectBatch;
267+
var unselectBatch = scene.unselectBatch;
268+
269+
for(var i = 0; i < count; i++) {
270+
if(fill2d && scene.fillOrder[i]) {
271+
fill2d.draw(scene.fillOrder[i]);
276272
}
277-
// we draw line2d
278-
if(we_must_draw_previous_line_marker && scene.line2d && scene.lineOptions[i - 1]) {
279-
scene.line2d.draw(i - 1);
273+
if(line2d && scene.lineOptions[i]) {
274+
line2d.draw(i);
280275
}
281-
if(scene.line2d && scene.lineOptions[i]) {
282-
if(we_defer_somes_draw === 0) {
283-
scene.line2d.draw(i);
284-
}
276+
if(error2d) {
277+
if(scene.errorXOptions[i]) error2d.draw(i);
278+
if(scene.errorYOptions[i]) error2d.draw(i + count);
285279
}
286-
if(scene.error2d && scene.errorXOptions[i]) {
287-
scene.error2d.draw(i);
280+
if(scatter2d && scene.markerOptions[i] && (!selectBatch || !selectBatch[i])) {
281+
scatter2d.draw(i);
288282
}
289-
if(scene.error2d && scene.errorYOptions[i]) {
290-
scene.error2d.draw(i + scene.count);
291-
}
292-
// we draw scatter2d
293-
if(!scene.selectBatch || !scene.selectBatch[i]) {
294-
if(we_must_draw_previous_line_marker && scene.scatter2d && scene.markerOptions[i - 1]) {
295-
scene.scatter2d.draw(i - 1);
296-
}
297-
if(scene.scatter2d && scene.markerOptions[i]) {
298-
if(we_defer_somes_draw === 0) {
299-
scene.scatter2d.draw(i);
300-
}
301-
}
302-
}
303-
if(scene.glText[i] && scene.textOptions[i]) {
304-
scene.glText[i].render();
305-
}
306-
if(we_defer_somes_draw === 1) {
307-
we_must_draw_previous_line_marker = 1;
308-
} else {
309-
we_must_draw_previous_line_marker = 0;
283+
if(glText[i] && scene.textOptions[i]) {
284+
glText[i].render();
310285
}
311286
}
312287

313-
// draw traces in selection mode
314-
if(scene.scatter2d && scene.select2d && scene.selectBatch) {
315-
scene.select2d.draw(scene.selectBatch);
316-
scene.scatter2d.draw(scene.unselectBatch);
288+
if(scatter2d && select2d && selectBatch) {
289+
select2d.draw(selectBatch);
290+
scatter2d.draw(unselectBatch);
317291
}
318292

319293
scene.dirty = false;
@@ -448,7 +422,9 @@ function plot(gd, subplot, cdata) {
448422
if(scene.scatter2d) {
449423
scene.scatter2d.update(scene.markerOptions);
450424
}
425+
451426
// fill requires linked traces, so we generate it's positions here
427+
scene.fillOrder = Lib.repeat(null, scene.count);
452428
if(scene.fill2d) {
453429
scene.fillOptions = scene.fillOptions.map(function(fillOptions, i) {
454430
var cdscatter = cdata[i];
@@ -459,6 +435,19 @@ function plot(gd, subplot, cdata) {
459435
var lineOptions = scene.lineOptions[i];
460436
var last, j;
461437

438+
var fillData = [];
439+
if(trace.fill && (trace.fill.substr(0, 6) === 'tozero' || trace.fill === 'toself' ||
440+
(trace.fill.substr(0, 2) === 'to' && !trace._prevtrace))
441+
) {
442+
fillData.push(i)
443+
}
444+
if(trace._nexttrace) {
445+
// make the fill-to-next path now for the NEXT trace, so it shows
446+
// behind both lines.
447+
fillData.push(i + 1);
448+
}
449+
if(fillData.length) scene.fillOrder[i] = fillData;
450+
462451
var pos = [], srcPos = (lineOptions && lineOptions.positions) || stash.positions;
463452

464453
if(trace.fill === 'tozeroy') {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.