1
0

SplitscreenManager.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. export class SplitscreenManager {
  2. constructor( editor ) {
  3. this.editor = editor;
  4. this.renderer = editor.renderer;
  5. this.composer = editor.composer;
  6. this.gutter = null;
  7. this.gutterMoving = false;
  8. this.gutterOffset = 0.6;
  9. }
  10. setSplitview( value ) {
  11. const nodeDOM = this.editor.domElement;
  12. const rendererContainer = this.renderer.domElement.parentNode;
  13. if ( value ) {
  14. this.addGutter( rendererContainer, nodeDOM );
  15. } else {
  16. this.removeGutter( rendererContainer, nodeDOM );
  17. }
  18. }
  19. addGutter( rendererContainer, nodeDOM ) {
  20. rendererContainer.style[ 'z-index' ] = 20;
  21. this.gutter = document.createElement( 'f-gutter' );
  22. nodeDOM.parentNode.appendChild( this.gutter );
  23. const onGutterMovement = () => {
  24. const offset = this.gutterOffset;
  25. this.gutter.style[ 'left' ] = 100 * offset + '%';
  26. rendererContainer.style[ 'left' ] = 100 * offset + '%';
  27. rendererContainer.style[ 'width' ] = 100 * ( 1 - offset ) + '%';
  28. nodeDOM.style[ 'width' ] = 100 * offset + '%';
  29. };
  30. this.gutter.addEventListener( 'mousedown', () => {
  31. this.gutterMoving = true;
  32. } );
  33. document.addEventListener( 'mousemove', ( event ) => {
  34. if ( this.gutter && this.gutterMoving ) {
  35. this.gutterOffset = Math.max( 0, Math.min( 1, event.clientX / window.innerWidth ) );
  36. onGutterMovement();
  37. }
  38. } );
  39. document.addEventListener( 'mouseup', () => {
  40. this.gutterMoving = false;
  41. } );
  42. onGutterMovement();
  43. }
  44. removeGutter( rendererContainer, nodeDOM ) {
  45. rendererContainer.style[ 'z-index' ] = 0;
  46. this.gutter.remove();
  47. this.gutter = null;
  48. rendererContainer.style[ 'left' ] = '0%';
  49. rendererContainer.style[ 'width' ] = '100%';
  50. nodeDOM.style[ 'width' ] = '100%';
  51. }
  52. }