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>

203 lines (202 loc) 7.48 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 Shape_1 = require("../Shape"); var Group_1 = require("../Group"); var Validators_1 = require("../Validators"); var Global_1 = require("../Global"); var ATTR_CHANGE_LIST = [ 'fontFamily', 'fontSize', 'fontStyle', 'padding', 'lineHeight', 'text', 'width' ], CHANGE_KONVA = 'Change.konva', NONE = 'none', UP = 'up', RIGHT = 'right', DOWN = 'down', LEFT = 'left', attrChangeListLen = ATTR_CHANGE_LIST.length; var Label = (function (_super) { __extends(Label, _super); function Label(config) { var _this = _super.call(this, config) || this; _this.on('add.konva', function (evt) { this._addListeners(evt.child); this._sync(); }); return _this; } Label.prototype.getText = function () { return this.find('Text')[0]; }; Label.prototype.getTag = function () { return this.find('Tag')[0]; }; Label.prototype._addListeners = function (text) { var that = this, n; var func = function () { that._sync(); }; for (n = 0; n < attrChangeListLen; n++) { text.on(ATTR_CHANGE_LIST[n] + CHANGE_KONVA, func); } }; Label.prototype.getWidth = function () { return this.getText().width(); }; Label.prototype.getHeight = function () { return this.getText().height(); }; Label.prototype._sync = function () { var text = this.getText(), tag = this.getTag(), width, height, pointerDirection, pointerWidth, x, y, pointerHeight; if (text && tag) { width = text.width(); height = text.height(); pointerDirection = tag.pointerDirection(); pointerWidth = tag.pointerWidth(); pointerHeight = tag.pointerHeight(); x = 0; y = 0; switch (pointerDirection) { case UP: x = width / 2; y = -1 * pointerHeight; break; case RIGHT: x = width + pointerWidth; y = height / 2; break; case DOWN: x = width / 2; y = height + pointerHeight; break; case LEFT: x = -1 * pointerWidth; y = height / 2; break; } tag.setAttrs({ x: -1 * x, y: -1 * y, width: width, height: height }); text.setAttrs({ x: -1 * x, y: -1 * y }); } }; return Label; }(Group_1.Group)); exports.Label = Label; Label.prototype.className = 'Label'; Global_1._registerNode(Label); Util_1.Collection.mapMethods(Label); var Tag = (function (_super) { __extends(Tag, _super); function Tag() { return _super !== null && _super.apply(this, arguments) || this; } Tag.prototype._sceneFunc = function (context) { var width = this.width(), height = this.height(), pointerDirection = this.pointerDirection(), pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), cornerRadius = Math.min(this.cornerRadius(), width / 2, height / 2); context.beginPath(); if (!cornerRadius) { context.moveTo(0, 0); } else { context.moveTo(cornerRadius, 0); } if (pointerDirection === UP) { context.lineTo((width - pointerWidth) / 2, 0); context.lineTo(width / 2, -1 * pointerHeight); context.lineTo((width + pointerWidth) / 2, 0); } if (!cornerRadius) { context.lineTo(width, 0); } else { context.lineTo(width - cornerRadius, 0); context.arc(width - cornerRadius, cornerRadius, cornerRadius, (Math.PI * 3) / 2, 0, false); } if (pointerDirection === RIGHT) { context.lineTo(width, (height - pointerHeight) / 2); context.lineTo(width + pointerWidth, height / 2); context.lineTo(width, (height + pointerHeight) / 2); } if (!cornerRadius) { context.lineTo(width, height); } else { context.lineTo(width, height - cornerRadius); context.arc(width - cornerRadius, height - cornerRadius, cornerRadius, 0, Math.PI / 2, false); } if (pointerDirection === DOWN) { context.lineTo((width + pointerWidth) / 2, height); context.lineTo(width / 2, height + pointerHeight); context.lineTo((width - pointerWidth) / 2, height); } if (!cornerRadius) { context.lineTo(0, height); } else { context.lineTo(cornerRadius, height); context.arc(cornerRadius, height - cornerRadius, cornerRadius, Math.PI / 2, Math.PI, false); } if (pointerDirection === LEFT) { context.lineTo(0, (height + pointerHeight) / 2); context.lineTo(-1 * pointerWidth, height / 2); context.lineTo(0, (height - pointerHeight) / 2); } if (cornerRadius) { context.lineTo(0, cornerRadius); context.arc(cornerRadius, cornerRadius, cornerRadius, Math.PI, (Math.PI * 3) / 2, false); } context.closePath(); context.fillStrokeShape(this); }; Tag.prototype.getSelfRect = function () { var x = 0, y = 0, pointerWidth = this.pointerWidth(), pointerHeight = this.pointerHeight(), direction = this.pointerDirection(), width = this.width(), height = this.height(); if (direction === UP) { y -= pointerHeight; height += pointerHeight; } else if (direction === DOWN) { height += pointerHeight; } else if (direction === LEFT) { x -= pointerWidth * 1.5; width += pointerWidth; } else if (direction === RIGHT) { width += pointerWidth * 1.5; } return { x: x, y: y, width: width, height: height }; }; return Tag; }(Shape_1.Shape)); exports.Tag = Tag; Tag.prototype.className = 'Tag'; Global_1._registerNode(Tag); Factory_1.Factory.addGetterSetter(Tag, 'pointerDirection', NONE); Factory_1.Factory.addGetterSetter(Tag, 'pointerWidth', 0, Validators_1.getNumberValidator()); Factory_1.Factory.addGetterSetter(Tag, 'pointerHeight', 0, Validators_1.getNumberValidator()); Factory_1.Factory.addGetterSetter(Tag, 'cornerRadius', 0, Validators_1.getNumberValidator()); Util_1.Collection.mapMethods(Tag);