app.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. var app = (function() {
  2. let _width = $("#content").width();
  3. let _height =
  4. $("#sidebar").height() - $("#header").height() - $("#files").height() - 2;
  5. let _screen = {
  6. width: _width,
  7. height: _height
  8. };
  9. let _layers = [];
  10. let _currentLayers = [];
  11. let _tools = [];
  12. let _menu = [];
  13. let _layer = undefined;
  14. let _selectedTool = [];
  15. let _objects = [];
  16. let _stage = new Konva.Stage({
  17. container: "container",
  18. width: _width,
  19. height: _height
  20. });
  21. let _state = APP_STATE.NONE;
  22. function _createLayer() {
  23. let sequence = 0;
  24. if (_layers == null || _layers.length == 0) {
  25. sequence++;
  26. } else {
  27. sequence = _layers.length + 1;
  28. }
  29. let layer = { sequence: sequence, layer: new Konva.Layer() };
  30. _layers.push(layer);
  31. if (_currentLayer() == undefined && _currentLayers.length == 0) {
  32. _currentLayers = [];
  33. _currentLayers.push(layer);
  34. }
  35. _stage.add(layer.layer);
  36. return layer;
  37. }
  38. function _bootstrap() {
  39. _createLayer();
  40. configureStageEvents();
  41. _layer = _currentLayer();
  42. selector.bootstrap();
  43. }
  44. function _currentLayer() {
  45. if (_currentLayers[0] == undefined) return undefined;
  46. return _currentLayers[0].layer;
  47. }
  48. function configureStageEvents() {
  49. _stage.on("mousedown ", function(e) {
  50. if (e.target === _stage) {
  51. _setState(APP_STATE.NONE);
  52. return;
  53. }
  54. if (e.target.id != undefined) {
  55. _setState(APP_STATE.OBJECT_SELECTED);
  56. return;
  57. }
  58. });
  59. _stage.on("click tap", function(e) {
  60. let tool = _getSelectedTool();
  61. if (tool != undefined) {
  62. tool.draw();
  63. return;
  64. }
  65. if (e.target === _stage) {
  66. _setState(APP_STATE.NONE);
  67. return;
  68. }
  69. });
  70. }
  71. function _setSelectedTool(tool) {
  72. _clearSelectedTool();
  73. _setState(APP_STATE.TOOL_SELECTED);
  74. if (tool.id != undefined) {
  75. document.getElementById("btn-" + tool.id).disabled = true;
  76. }
  77. _selectedTool.push(tool);
  78. }
  79. function _clearSelectedTool() {
  80. let tool = _getSelectedTool();
  81. if (tool != undefined) {
  82. if (tool.id != undefined) {
  83. document.getElementById("btn-" + tool.id).disabled = false;
  84. }
  85. }
  86. _selectedTool = [];
  87. _setStatus("");
  88. _setState(APP_STATE.NONE);
  89. }
  90. function _getSelectedTool() {
  91. if (_selectedTool.length > 0) return _selectedTool[0];
  92. return undefined;
  93. }
  94. function _getRelativePointerPosition() {
  95. return _stage.getPointerPosition();
  96. }
  97. function _setStatus(status) {
  98. document.getElementById("status").innerHTML = status;
  99. }
  100. function _pushObject(object) {
  101. _objects.push(object);
  102. }
  103. function _getObjects() {
  104. return _objects;
  105. }
  106. function _setState(state) {
  107. _state = state;
  108. }
  109. function _getState() {
  110. return _state;
  111. }
  112. function _menuClick(e) {
  113. _setState(APP_STATE.TOOL_SELECTED);
  114. if (e.click());
  115. }
  116. return {
  117. stage: _stage,
  118. currentLayer: _currentLayer,
  119. createLayer: _createLayer,
  120. screen: _screen,
  121. bootstrap: _bootstrap,
  122. layers: _layers,
  123. tools: _tools,
  124. setSelectedTool: _setSelectedTool,
  125. clearSelectedTool: _clearSelectedTool,
  126. getSelectedTool: _getSelectedTool,
  127. pos: _getRelativePointerPosition,
  128. setStatus: _setStatus,
  129. pushObject: _pushObject,
  130. getObjects: _getObjects,
  131. setState: _setState,
  132. getState: _getState,
  133. menuClick: _menuClick
  134. };
  135. })();