UNPKG

konva

Version:

<p align="center"> <img src="https://raw.githubusercontent.com/konvajs/konvajs.github.io/master/apple-touch-icon-180x180.png" alt="Konva logo" height="180" /> </p>

94 lines (93 loc) 3.49 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var Util_1 = require("../Util"); var Factory_1 = require("../Factory"); var Line_1 = require("./Line"); var Validators_1 = require("../Validators"); var Global_1 = require("../Global"); var Arrow = (function (_super) { __extends(Arrow, _super); function Arrow() { return _super !== null && _super.apply(this, arguments) || this; } Arrow.prototype._sceneFunc = function (ctx) { _super.prototype._sceneFunc.call(this, ctx); var PI2 = Math.PI * 2; var points = this.points(); var tp = points; var fromTension = this.tension() !== 0 && points.length > 4; if (fromTension) { tp = this.getTensionPoints(); } var n = points.length; var dx, dy; if (fromTension) { dx = points[n - 2] - (tp[tp.length - 2] + tp[tp.length - 4]) / 2; dy = points[n - 1] - (tp[tp.length - 1] + tp[tp.length - 3]) / 2; } else { dx = points[n - 2] - points[n - 4]; dy = points[n - 1] - points[n - 3]; } var radians = (Math.atan2(dy, dx) + PI2) % PI2; var length = this.pointerLength(); var width = this.pointerWidth(); ctx.save(); ctx.beginPath(); ctx.translate(points[n - 2], points[n - 1]); ctx.rotate(radians); ctx.moveTo(0, 0); ctx.lineTo(-length, width / 2); ctx.lineTo(-length, -width / 2); ctx.closePath(); ctx.restore(); if (this.pointerAtBeginning()) { ctx.save(); ctx.translate(points[0], points[1]); if (fromTension) { dx = (tp[0] + tp[2]) / 2 - points[0]; dy = (tp[1] + tp[3]) / 2 - points[1]; } else { dx = points[2] - points[0]; dy = points[3] - points[1]; } ctx.rotate((Math.atan2(-dy, -dx) + PI2) % PI2); ctx.moveTo(0, 0); ctx.lineTo(-length, width / 2); ctx.lineTo(-length, -width / 2); ctx.closePath(); ctx.restore(); } var isDashEnabled = this.dashEnabled(); if (isDashEnabled) { this.attrs.dashEnabled = false; ctx.setLineDash([]); } ctx.fillStrokeShape(this); if (isDashEnabled) { this.attrs.dashEnabled = true; } }; return Arrow; }(Line_1.Line)); exports.Arrow = Arrow; Arrow.prototype.className = 'Arrow'; Global_1._registerNode(Arrow); Factory_1.Factory.addGetterSetter(Arrow, 'pointerLength', 10, Validators_1.getNumberValidator()); Factory_1.Factory.addGetterSetter(Arrow, 'pointerWidth', 10, Validators_1.getNumberValidator()); Factory_1.Factory.addGetterSetter(Arrow, 'pointerAtBeginning', false); Util_1.Collection.mapMethods(Arrow);