vega-scenegraph
Version:
Vega scenegraph and renderers.
40 lines (32 loc) • 931 B
JavaScript
import blend from './blend';
import fill from './fill';
import stroke from './stroke';
import {visit} from '../visit';
export function drawAll(path) {
return function(context, scene, bounds) {
visit(scene, item => {
if (!bounds || bounds.intersects(item.bounds)) {
drawPath(path, context, item, item);
}
});
};
}
export function drawOne(path) {
return function(context, scene, bounds) {
if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {
drawPath(path, context, scene.items[0], scene.items);
}
};
}
function drawPath(path, context, item, items) {
var opacity = item.opacity == null ? 1 : item.opacity;
if (opacity === 0) return;
if (path(context, items)) return;
blend(context, item);
if (item.fill && fill(context, item, opacity)) {
context.fill();
}
if (item.stroke && stroke(context, item, opacity)) {
context.stroke();
}
}