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