Home Reference Source

cables_dev/cables_ui/src/ui/elements/splitpane.js

  1. import { ele } from "cables-shared-client";
  2. import { userSettings } from "../components/usersettings.js";
  3. import Gui, { gui } from "../gui.js";
  4. import { DomEvents } from "../theme.js";
  5. const splitpane = {};
  6. window.splitpane = splitpane;
  7. splitpane.listeners = [];
  8. export default initSplitPanes;
  9. function initSplitPanes()
  10. {
  11. ele.byId("splitterRightPanel").addEventListener(DomEvents.POINTER_DOWN, function (ev)
  12. {
  13. gui.pauseProfiling();
  14. ev.preventDefault();
  15. splitpane.bound = true;
  16. function mm(e)
  17. {
  18. gui.pauseInteractionSplitpanes();
  19. gui.pauseProfiling();
  20. e.preventDefault();
  21. let pos = (window.innerWidth - e.clientX) * (1 / gui.corePatch().cgl.canvasScale);
  22. pos = Math.max(320, pos);
  23. gui.userSettings.set(Gui.PREF_LAYOUT_RIGHT_PANEL_WIDTH, pos);
  24. gui.rightPanelWidth = Math.ceil(pos);
  25. gui.setLayout();
  26. gui.emitEvent(Gui.EVENT_RESIZE_CANVAS);
  27. gui.canvasManager.getCanvasUiBar()?.updateCanvasIconBar();
  28. }
  29. document.addEventListener(DomEvents.POINTER_MOVE, mm);
  30. splitpane.listeners.push(mm);
  31. });
  32. ele.byId("splitterRightPanel").addEventListener(DomEvents.POINTER_UP, function (_e)
  33. {
  34. gui.resumeInteractionSplitpanes();
  35. });
  36. ele.byId("splitterMaintabs").addEventListener(DomEvents.POINTER_UP, function (_e)
  37. {
  38. gui.resumeInteractionSplitpanes();
  39. });
  40. function resizeTabs(_ev)
  41. {
  42. gui.pauseProfiling();
  43. splitpane.bound = true;
  44. function mm(e)
  45. {
  46. gui.pauseInteractionSplitpanes();
  47. gui.editorWidth = e.clientX;
  48. if (gui.editorWidth < 30)gui.editorWidth = 30;
  49. userSettings.set(Gui.PREF_LAYOUT_EDITORWIDTH, gui.editorWidth);
  50. gui.setLayout();
  51. gui.mainTabs.emitEvent("resize");
  52. }
  53. document.addEventListener(DomEvents.POINTER_MOVE, mm, { "passive": false });
  54. splitpane.listeners.push(mm);
  55. }
  56. ele.byId("splitterMaintabs").addEventListener(DomEvents.POINTER_DOWN, resizeTabs, { "passive": false });
  57. ele.byId("splitterRenderer").addEventListener(DomEvents.POINTER_DOWN, function (ev)
  58. {
  59. ev.preventDefault();
  60. splitpane.bound = true;
  61. function mm(e)
  62. {
  63. e.preventDefault();
  64. gui.rendererHeight = e.clientY * (1 / gui.corePatch().cgl.canvasScale);
  65. gui.setLayout();
  66. gui.canvasManager.getCanvasUiBar()?.updateCanvasIconBar();
  67. }
  68. document.addEventListener(DomEvents.POINTER_MOVE, mm);
  69. splitpane.listeners.push(mm);
  70. });
  71. ele.byId("splitterBottomTabs").addEventListener(DomEvents.POINTER_DOWN,
  72. function (ev)
  73. {
  74. ev.preventDefault();
  75. splitpane.bound = true;
  76. function mm(e)
  77. {
  78. gui.pauseInteractionSplitpanes();
  79. e.preventDefault();
  80. gui.bottomTabPanel.setHeight(window.innerHeight - e.clientY);
  81. gui.setLayout();
  82. }
  83. document.addEventListener(DomEvents.POINTER_MOVE, mm);
  84. splitpane.listeners.push(mm);
  85. });
  86. function resizeRenderer(ev)
  87. {
  88. if (gui.canvasManager.mode == gui.canvasManager.CANVASMODE_PATCHBG) return;
  89. if (ev.shiftKey)
  90. {
  91. if (!splitpane.rendererAspect) splitpane.rendererAspect = gui.rendererWidth / gui.rendererHeight;
  92. }
  93. else splitpane.rendererAspect = 0.0;
  94. ev.preventDefault();
  95. splitpane.bound = true;
  96. /**
  97. * @param {Object} e
  98. */
  99. function mm(e)
  100. {
  101. gui.pauseInteractionSplitpanes();
  102. let x = e.clientX - 10;
  103. let y = e.clientY + 20;
  104. if (x === undefined && e.touches && e.touches.length > 0)
  105. {
  106. x = e.touches[0].clientX;
  107. y = e.touches[0].clientY;
  108. }
  109. gui.rendererWidth = Math.floor((window.innerWidth - x) * (1 / gui.corePatch().cgl.canvasScale) + 3);
  110. if (gui.canvasManager.mode == gui.canvasManager.CANVASMODE_FLOAT)
  111. gui.rendererWidth -= gui._elOptions.getBoundingClientRect().width;
  112. if (splitpane.rendererAspect) gui.rendererHeight = Math.floor(1 / splitpane.rendererAspect * gui.rendererWidth);
  113. else gui.rendererHeight = Math.floor(y * (1 / gui.corePatch().cgl.canvasScale) - 38);
  114. gui.setLayout();
  115. gui.canvasManager.getCanvasUiBar()?.updateCanvasIconBar();
  116. gui.canvasManager.focus();
  117. gui.emitEvent(Gui.EVENT_RESIZE_CANVAS);
  118. e.preventDefault();
  119. }
  120. document.addEventListener(DomEvents.POINTER_MOVE, mm);
  121. splitpane.listeners.push(mm);
  122. }
  123. ele.byId("splitterRendererWH").addEventListener(DomEvents.POINTER_DOWN, resizeRenderer, { "passive": false });
  124. function stopSplit(_e)
  125. {
  126. if (splitpane.listeners.length > 0)
  127. {
  128. for (let i = 0; i < splitpane.listeners.length; i++)
  129. document.removeEventListener(DomEvents.POINTER_MOVE, splitpane.listeners[i]);
  130. gui.resumeInteractionSplitpanes();
  131. splitpane.listeners.length = 0;
  132. splitpane.bound = false;
  133. gui.setLayout();
  134. }
  135. }
  136. document.addEventListener(DomEvents.POINTER_UP, stopSplit);
  137. }