UNPKG

abcjs

Version:

Renderer for abc music notation

39 lines (32 loc) 1.6 kB
var sprintf = require('./sprintf'); var printPath = require('./print-path'); var roundNumber = require("./round-number"); function drawCrescendo(renderer, params, selectables) { if (params.pitch === undefined) window.console.error("Crescendo Element y-coordinate not set."); var y = renderer.calcY(params.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.) var height = 8; // TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end. var left = params.anchor1 ? params.anchor1.x : 0; var right = params.anchor2 ? params.anchor2.x : 800; var el; if (params.dir === "<") { el = drawLine(renderer, y + height / 2, y, y + height / 2, y + height, left, right); } else { el = drawLine(renderer, y, y + height / 2, y + height, y + height / 2, left, right); } selectables.wrapSvgEl({ el_type: "dynamicDecoration", startChar: -1, endChar: -1 }, el); return [el]; } var drawLine = function (renderer, y1, y2, y3, y4, left, right) { y1 = roundNumber(y1); y2 = roundNumber(y2); y3 = roundNumber(y3); y4 = roundNumber(y4); left = roundNumber(left); right = roundNumber(right); var pathString = sprintf("M %f %f L %f %f M %f %f L %f %f", left, y1, right, y2, left, y3, right, y4); return printPath(renderer, { path: pathString, highlight: "stroke", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('dynamics decoration'), "data-name": "dynamics" }); }; module.exports = drawCrescendo;