UNPKG

@gdn/react-native-simple-canvas

Version:

A simple canvas component for React Native that allows drawing and signature capture.

50 lines 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.spline = void 0; // source: https://github.com/georgedoescode/generative-utils/blob/master/src/spline.js const formatPoints = (points, close) => { points = [...points]; if (close) { const lastPoint = points[points.length - 1]; const secondToLastPoint = points[points.length - 2]; const firstPoint = points[0]; const secondPoint = points[1]; points.unshift(lastPoint); points.unshift(secondToLastPoint); points.push(firstPoint); points.push(secondPoint); } return points.flatMap(point => [point.x, point.y]); }; // source: https://github.com/georgedoescode/generative-utils/blob/master/src/spline.js const spline = (points, tension = 1, close = false) => { if (points.length < 2) return ''; const flatPoints = formatPoints(points, close); const size = flatPoints.length; const last = size - 4; const startPointX = close ? flatPoints[2] : flatPoints[0]; const startPointY = close ? flatPoints[3] : flatPoints[1]; let path = `M ${startPointX} ${startPointY}`; const startIteration = close ? 2 : 0; const maxIteration = close ? size - 4 : size - 2; const inc = 2; for (let i = startIteration; i < maxIteration; i += inc) { const x0 = i ? flatPoints[i - 2] : flatPoints[0]; const y0 = i ? flatPoints[i - 1] : flatPoints[1]; const x1 = flatPoints[i + 0]; const y1 = flatPoints[i + 1]; const x2 = flatPoints[i + 2]; const y2 = flatPoints[i + 3]; const x3 = i !== last ? flatPoints[i + 4] : x2; const y3 = i !== last ? flatPoints[i + 5] : y2; const cp1x = x1 + ((x2 - x0) / 6) * tension; const cp1y = y1 + ((y2 - y0) / 6) * tension; const cp2x = x2 - ((x3 - x1) / 6) * tension; const cp2y = y2 - ((y3 - y1) / 6) * tension; path += ` C ${cp1x} ${cp1y} ${cp2x} ${cp2y} ${x2} ${y2}`; } return path; }; exports.spline = spline; //# sourceMappingURL=canvas.js.map