stage.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { app as App } from "../../app";
  2. import { Layer } from "../drawers/layer";
  3. import { APP_STATE } from "../enums/app-state-enum";
  4. import { ELEMENTS_CLASS } from "../enums/elements-class-enum";
  5. export class Stage {
  6. constructor() {
  7. this.layers = [];
  8. this.layer;
  9. this.konvaStage;
  10. this._bootstrap();
  11. }
  12. addAggregator(aggregator) {
  13. this.layer.addAggregator(aggregator);
  14. }
  15. setKonvaStage(stage) {
  16. this.konvaStage = stage;
  17. this.configureStageEvents(this.konvaStage);
  18. }
  19. createLayer() {
  20. let sequence = 0;
  21. if (this.layers == null || this.layers.length == 0) {
  22. sequence++;
  23. } else {
  24. sequence = this.layers.length + 1;
  25. }
  26. const layer = new Layer(sequence, new Konva.Layer());
  27. this.layers.push(layer);
  28. if (this.getCurrentLayer() == undefined && this.layers.length == 0) {
  29. this.layers = [];
  30. this.layers.push(layer);
  31. }
  32. this.layer = layer;
  33. this.konvaStage.add(this.layer.konvaLayer);
  34. return layer;
  35. }
  36. setCurrentLayer(layer) {
  37. this.layer = layer;
  38. }
  39. getCurrentLayer() {
  40. return this.layer;
  41. }
  42. getCurrentKonvaLayer() {
  43. return this.layer.getKonvaLayer();
  44. }
  45. draw(object) {
  46. if (object == undefined) this.konvaStage.draw();
  47. else {
  48. var layer = this.layer.getKonvaLayer();
  49. this.layer.getKonvaGroup().add(object);
  50. console.info(" this.layer", layer);
  51. console.info(" this.konvaStage", this.konvaStage);
  52. layer.draw();
  53. this.konvaStage.draw(layer);
  54. this.konvaStage.draw();
  55. }
  56. }
  57. _setState(state) {
  58. App.setState(state);
  59. }
  60. configureStageEvents(stage) {
  61. stage.on("mousedown ", this._mouseDown.bind(this));
  62. stage.on("click", this._clickTap.bind(this));
  63. }
  64. _mouseDown(e) {
  65. if (e.target === this.konvaStage) {
  66. this._setState(APP_STATE.NONE);
  67. return;
  68. }
  69. if (e.target.id != undefined) {
  70. if (
  71. e.target.attrs != undefined &&
  72. e.target.attrs.class != ELEMENTS_CLASS.CIRCUMFERENCE
  73. ) {
  74. this._setState(APP_STATE.OBJECT_SELECTED);
  75. } else {
  76. this._setState(APP_STATE.NONE);
  77. }
  78. return;
  79. }
  80. }
  81. _clickTap(e) {
  82. const tool = App.getSelectedTool();
  83. if (tool != undefined) {
  84. tool.draw.bind(tool)(e);
  85. return;
  86. }
  87. if (e.target === this.konvaStage) {
  88. this._setState(APP_STATE.NONE);
  89. return;
  90. }
  91. }
  92. _bootstrap() {}
  93. }