12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = require("tslib");
- var g_base_1 = require("@antv/g-base");
- var constant_1 = require("./constant");
- var draw_1 = require("./util/draw");
- var svg_1 = require("./util/svg");
- var dom_1 = require("./util/dom");
- var Shape = require("./shape");
- var group_1 = require("./group");
- var defs_1 = require("./defs");
- var Canvas = /** @class */ (function (_super) {
- tslib_1.__extends(Canvas, _super);
- function Canvas(cfg) {
- return _super.call(this, tslib_1.__assign(tslib_1.__assign({}, cfg), { autoDraw: true,
- // 设置渲染引擎为 canvas,只读属性
- renderer: 'svg' })) || this;
- }
- Canvas.prototype.getShapeBase = function () {
- return Shape;
- };
- Canvas.prototype.getGroupBase = function () {
- return group_1.default;
- };
- // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑,直接走 SVG 的 dom 拾取即可
- Canvas.prototype.getShape = function (x, y, ev) {
- var target = ev.target || ev.srcElement;
- if (!constant_1.SHAPE_TO_TAGS[target.tagName]) {
- var parent_1 = target.parentNode;
- while (parent_1 && !constant_1.SHAPE_TO_TAGS[parent_1.tagName]) {
- parent_1 = parent_1.parentNode;
- }
- target = parent_1;
- }
- return this.find(function (child) { return child.get('el') === target; });
- };
- // 复写基类的方法生成标签
- Canvas.prototype.createDom = function () {
- var element = dom_1.createSVGElement('svg');
- var context = new defs_1.default(element);
- element.setAttribute('width', "" + this.get('width'));
- element.setAttribute('height', "" + this.get('height'));
- // 缓存 context 对象
- this.set('context', context);
- return element;
- };
- /**
- * 一些方法调用会引起画布变化
- * @param {ChangeType} changeType 改变的类型
- */
- Canvas.prototype.onCanvasChange = function (changeType) {
- var context = this.get('context');
- var el = this.get('el');
- if (changeType === 'sort') {
- var children_1 = this.get('children');
- if (children_1 && children_1.length) {
- dom_1.sortDom(this, function (a, b) {
- return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;
- });
- }
- }
- else if (changeType === 'clear') {
- // el maybe null for canvas
- if (el) {
- // 清空 SVG 元素
- el.innerHTML = '';
- var defsEl = context.el;
- // 清空 defs 元素
- defsEl.innerHTML = '';
- // 将清空后的 defs 元素挂载到 el 下
- el.appendChild(defsEl);
- }
- }
- else if (changeType === 'matrix') {
- svg_1.setTransform(this);
- }
- else if (changeType === 'clip') {
- svg_1.setClip(this, context);
- }
- else if (changeType === 'changeSize') {
- el.setAttribute('width', "" + this.get('width'));
- el.setAttribute('height', "" + this.get('height'));
- }
- };
- // 复写基类的 draw 方法
- Canvas.prototype.draw = function () {
- var context = this.get('context');
- var children = this.getChildren();
- svg_1.setClip(this, context);
- if (children.length) {
- draw_1.drawChildren(context, children);
- }
- };
- return Canvas;
- }(g_base_1.AbstractCanvas));
- exports.default = Canvas;
- //# sourceMappingURL=canvas.js.map
|