SGraphScene.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.SGraphScene = void 0;
  4. const lib_1 = require("@persagy-web/base/lib");
  5. const lib_2 = require("@persagy-web/draw/lib");
  6. const SGraphItem_1 = require("./SGraphItem");
  7. const SGraphSelectContainer_1 = require("./SGraphSelectContainer");
  8. class SGraphScene {
  9. constructor() {
  10. this.view = null;
  11. this.root = new SGraphItem_1.SGraphItem();
  12. this.grabItem = null;
  13. this.hoverItem = null;
  14. this.selectContainer = new SGraphSelectContainer_1.SGraphSelectContainer();
  15. this.root.scene = this;
  16. }
  17. addItem(item) {
  18. item.parent = this.root;
  19. }
  20. removeItem(item) {
  21. item.parent = null;
  22. }
  23. drawScene(painter, rect) {
  24. this.root.onPaint(painter, rect);
  25. }
  26. drawBackground(painter, rect) {
  27. }
  28. drawForeground(painter, rect) {
  29. }
  30. allItemRect() {
  31. let rect = null;
  32. for (let item of this.root.children) {
  33. if (rect == null) {
  34. rect = item.boundingRect().translated(item.pos.x, item.pos.y);
  35. }
  36. else {
  37. rect.union(item.boundingRect().translated(item.pos.x, item.pos.y));
  38. }
  39. }
  40. return rect;
  41. }
  42. selectedItemRect() {
  43. let rect = null;
  44. for (let item of this.root.children) {
  45. if (!item.selected) {
  46. continue;
  47. }
  48. if (rect == null) {
  49. rect = item.boundingRect().translated(item.pos.x, item.pos.y);
  50. }
  51. else {
  52. rect.union(item.boundingRect().translated(item.pos.x, item.pos.y));
  53. }
  54. }
  55. return rect;
  56. }
  57. selectedItems() {
  58. let itemList = Array();
  59. for (let item of this.root.children) {
  60. if (item.selected) {
  61. itemList.push(item);
  62. }
  63. }
  64. return itemList;
  65. }
  66. onDoubleClick(event) {
  67. if (this.grabItem != null) {
  68. return this.grabItem.onDoubleClick(this.toGrabItemMotionEvent(this.grabItem, event));
  69. }
  70. return this.root.onDoubleClick(event);
  71. }
  72. onMouseDown(event) {
  73. if (this.grabItem != null) {
  74. return this.grabItem.onMouseDown(this.toGrabItemMotionEvent(this.grabItem, event));
  75. }
  76. const flag = this.root.onMouseDown(event);
  77. if (!flag) {
  78. this.selectContainer.clear();
  79. }
  80. return flag;
  81. }
  82. onMouseMove(event) {
  83. if (this.grabItem != null) {
  84. return this.grabItem.onMouseMove(this.toGrabItemMotionEvent(this.grabItem, event));
  85. }
  86. return this.root.onMouseMove(event);
  87. }
  88. onMouseUp(event) {
  89. if (this.grabItem != null) {
  90. return this.grabItem.onMouseUp(this.toGrabItemMotionEvent(this.grabItem, event));
  91. }
  92. return this.root.onMouseUp(event);
  93. }
  94. onContextMenu(event) {
  95. if (this.grabItem != null) {
  96. return this.grabItem.onContextMenu(this.toGrabItemMotionEvent(this.grabItem, event));
  97. }
  98. return this.root.onContextMenu(event);
  99. }
  100. onKeyDown(event) {
  101. if (this.grabItem != null) {
  102. return this.grabItem.onKeyDown(event);
  103. }
  104. return this.root.onKeyDown(event);
  105. }
  106. onKeyUp(event) {
  107. if (this.grabItem != null) {
  108. return this.grabItem.onKeyUp(event);
  109. }
  110. return this.root.onKeyUp(event);
  111. }
  112. toGrabItemMotionEvent(item, event) {
  113. let se = Object.assign({}, event);
  114. se.matrix = new lib_1.SMatrix();
  115. if (this.view) {
  116. se.matrix.translate(this.view.origin.x, this.view.origin.y);
  117. se.matrix.scale(this.view.scale, this.view.scale);
  118. se.matrix.rotate(this.view.rotate);
  119. }
  120. se.matrix.multiply(item.scene2itemMattrix());
  121. let p = new lib_2.SPoint(event.offsetX, event.offsetY).matrixTransform(se.matrix.inversed());
  122. se.x = p.x;
  123. se.y = p.y;
  124. return se;
  125. }
  126. }
  127. exports.SGraphScene = SGraphScene;