UNPKG

satie

Version:

A sheet music renderer for the web

76 lines (66 loc) 2.38 kB
/** * This file is part of Satie music engraver <https://github.com/jnetterf/satie>. * Copyright (C) Joshua Netterfield <joshua.ca> 2015 - present. * * Satie is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * Satie is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Satie. If not, see <http://www.gnu.org/licenses/>. */ import {Component, DOM, PropTypes} from "react"; import {getGlyphCode} from "./private_smufl"; import {toPathData} from "./private_fontManager"; export interface IProps { key?: string | number; fill: string; glyphName: string; "selection-info"?: string; transform?: string; x: number; y: number; opacity?: number; code?: string; scale?: number; } /** * Most musical elements are rendered as glyphs. Exceptions include * slurs, ties, dots in dotted notes, ledger lines, and stave lines. */ export default class Glyph extends Component<IProps, void> { static contextTypes = { renderTarget: PropTypes.oneOf(["svg-web", "svg-export"]) } as any; context: { renderTarget?: "svg-web" | "svg-export", }; render() { let px = this.props.x; let py = this.props.y; if (this.context.renderTarget === "svg-export") { let pathData = toPathData("Bravura", getGlyphCode(this.props.glyphName), px, py, 40 * (this.props.scale || 1)); return DOM.path({d: pathData}, null); } let text = DOM.text({ className: "mn_", fill: this.props.fill, fillOpacity: this.props.opacity, fontSize: 40 * (this.props.scale || 1), strokeOpacity: this.props.opacity, transform: this.props.transform, x: px, y: py }, getGlyphCode(this.props.glyphName) ); return text; } }