UNPKG

vega-scenegraph

Version:

Vega scenegraph and renderers.

59 lines (46 loc) 1.25 kB
import boundStroke from '../bound/boundStroke'; import context from '../bound/boundContext'; import {intersectPoint} from '../util/intersect'; import {drawOne} from '../util/canvas/draw'; import {hitPath} from '../util/canvas/pick'; export default function(type, shape, tip) { function attr(emit, item) { var items = item.mark.items; if (items.length) emit('d', shape(null, items)); } function bound(bounds, mark) { var items = mark.items; if (items.length === 0) { return bounds; } else { shape(context(bounds), items); return boundStroke(bounds, items[0]); } } function draw(context, items) { context.beginPath(); shape(context, items); } const hit = hitPath(draw); function pick(context, scene, x, y, gx, gy) { var items = scene.items, b = scene.bounds; if (!items || !items.length || b && !b.contains(gx, gy)) { return null; } x *= context.pixelRatio; y *= context.pixelRatio; return hit(context, items, x, y) ? items[0] : null; } return { type: type, tag: 'path', nested: true, attr: attr, bound: bound, draw: drawOne(draw), pick: pick, isect: intersectPoint, tip: tip }; }