canvas.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var g_base_1 = require("@antv/g-base");
  5. var constant_1 = require("./constant");
  6. var draw_1 = require("./util/draw");
  7. var svg_1 = require("./util/svg");
  8. var dom_1 = require("./util/dom");
  9. var Shape = require("./shape");
  10. var group_1 = require("./group");
  11. var defs_1 = require("./defs");
  12. var Canvas = /** @class */ (function (_super) {
  13. tslib_1.__extends(Canvas, _super);
  14. function Canvas(cfg) {
  15. return _super.call(this, tslib_1.__assign(tslib_1.__assign({}, cfg), { autoDraw: true,
  16. // 设置渲染引擎为 canvas,只读属性
  17. renderer: 'svg' })) || this;
  18. }
  19. Canvas.prototype.getShapeBase = function () {
  20. return Shape;
  21. };
  22. Canvas.prototype.getGroupBase = function () {
  23. return group_1.default;
  24. };
  25. // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑,直接走 SVG 的 dom 拾取即可
  26. Canvas.prototype.getShape = function (x, y, ev) {
  27. var target = ev.target || ev.srcElement;
  28. if (!constant_1.SHAPE_TO_TAGS[target.tagName]) {
  29. var parent_1 = target.parentNode;
  30. while (parent_1 && !constant_1.SHAPE_TO_TAGS[parent_1.tagName]) {
  31. parent_1 = parent_1.parentNode;
  32. }
  33. target = parent_1;
  34. }
  35. return this.find(function (child) { return child.get('el') === target; });
  36. };
  37. // 复写基类的方法生成标签
  38. Canvas.prototype.createDom = function () {
  39. var element = dom_1.createSVGElement('svg');
  40. var context = new defs_1.default(element);
  41. element.setAttribute('width', "" + this.get('width'));
  42. element.setAttribute('height', "" + this.get('height'));
  43. // 缓存 context 对象
  44. this.set('context', context);
  45. return element;
  46. };
  47. /**
  48. * 一些方法调用会引起画布变化
  49. * @param {ChangeType} changeType 改变的类型
  50. */
  51. Canvas.prototype.onCanvasChange = function (changeType) {
  52. var context = this.get('context');
  53. var el = this.get('el');
  54. if (changeType === 'sort') {
  55. var children_1 = this.get('children');
  56. if (children_1 && children_1.length) {
  57. dom_1.sortDom(this, function (a, b) {
  58. return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;
  59. });
  60. }
  61. }
  62. else if (changeType === 'clear') {
  63. // el maybe null for canvas
  64. if (el) {
  65. // 清空 SVG 元素
  66. el.innerHTML = '';
  67. var defsEl = context.el;
  68. // 清空 defs 元素
  69. defsEl.innerHTML = '';
  70. // 将清空后的 defs 元素挂载到 el 下
  71. el.appendChild(defsEl);
  72. }
  73. }
  74. else if (changeType === 'matrix') {
  75. svg_1.setTransform(this);
  76. }
  77. else if (changeType === 'clip') {
  78. svg_1.setClip(this, context);
  79. }
  80. else if (changeType === 'changeSize') {
  81. el.setAttribute('width', "" + this.get('width'));
  82. el.setAttribute('height', "" + this.get('height'));
  83. }
  84. };
  85. // 复写基类的 draw 方法
  86. Canvas.prototype.draw = function () {
  87. var context = this.get('context');
  88. var children = this.getChildren();
  89. svg_1.setClip(this, context);
  90. if (children.length) {
  91. draw_1.drawChildren(context, children);
  92. }
  93. };
  94. return Canvas;
  95. }(g_base_1.AbstractCanvas));
  96. exports.default = Canvas;
  97. //# sourceMappingURL=canvas.js.map