From 6820f48fd23d7c969aa69e4a3c9db5dab1459a10 Mon Sep 17 00:00:00 2001 From: Robert Pintilii Date: Fri, 11 Mar 2022 09:21:56 +0200 Subject: [PATCH] fix(screensharing) Fix screensharing container width (#11089) Fix width when the filmstrip is resized --- modules/UI/videolayout/VideoContainer.js | 31 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/modules/UI/videolayout/VideoContainer.js b/modules/UI/videolayout/VideoContainer.js index c8b945130..bdfee7900 100644 --- a/modules/UI/videolayout/VideoContainer.js +++ b/modules/UI/videolayout/VideoContainer.js @@ -6,6 +6,7 @@ import ReactDOM from 'react-dom'; import { browser } from '../../../react/features/base/lib-jitsi-meet'; import { isTestModeEnabled } from '../../../react/features/base/testing'; +import { FILMSTRIP_BREAKPOINT } from '../../../react/features/filmstrip'; import { ORIENTATION, LargeVideoBackground, updateLastLargeVideoMediaEvent } from '../../../react/features/large-video'; import { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout'; /* eslint-enable no-unused-vars */ @@ -37,13 +38,15 @@ const containerEvents = [ * @param videoHeight the height of the video to position * @param videoSpaceWidth the width of the available space * @param videoSpaceHeight the height of the available space + * @param subtractFilmstrip whether to subtract the filmstrip or not * @return an array with 2 elements, the video width and the video height */ function computeDesktopVideoSize( // eslint-disable-line max-params videoWidth, videoHeight, videoSpaceWidth, - videoSpaceHeight) { + videoSpaceHeight, + subtractFilmstrip) { if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) { // Avoid NaN values caused by division by 0. return [ 0, 0 ]; @@ -54,8 +57,10 @@ function computeDesktopVideoSize( // eslint-disable-line max-params let availableHeight = Math.max(videoHeight, videoSpaceHeight); if (interfaceConfig.VERTICAL_FILMSTRIP) { - // eslint-disable-next-line no-param-reassign - videoSpaceWidth -= Filmstrip.getVerticalFilmstripWidth(); + if (subtractFilmstrip) { + // eslint-disable-next-line no-param-reassign + videoSpaceWidth -= Filmstrip.getVerticalFilmstripWidth(); + } } else { // eslint-disable-next-line no-param-reassign videoSpaceHeight -= Filmstrip.getFilmstripHeight(); @@ -307,16 +312,18 @@ export class VideoContainer extends LargeContainer { * Calculate optimal video size for specified container size. * @param {number} containerWidth container width * @param {number} containerHeight container height + * @param {number} verticalFilmstripWidth current width of the vertical filmstrip * @returns {{availableWidth, availableHeight}} */ - _getVideoSize(containerWidth, containerHeight) { + _getVideoSize(containerWidth, containerHeight, verticalFilmstripWidth) { const { width, height } = this.getStreamSize(); if (this.stream && this.isScreenSharing()) { return computeDesktopVideoSize(width, height, containerWidth, - containerHeight); + containerHeight, + verticalFilmstripWidth < FILMSTRIP_BREAKPOINT); } return computeCameraVideoSize(width, @@ -334,14 +341,15 @@ export class VideoContainer extends LargeContainer { * @param {number} height video height * @param {number} containerWidth container width * @param {number} containerHeight container height + * @param {number} verticalFilmstripWidth current width of the vertical filmstrip * @returns {{horizontalIndent, verticalIndent}} */ - getVideoPosition(width, height, containerWidth, containerHeight) { + getVideoPosition(width, height, containerWidth, containerHeight, verticalFilmstripWidth) { let containerWidthToUse = containerWidth; /* eslint-enable max-params */ if (this.stream && this.isScreenSharing()) { - if (interfaceConfig.VERTICAL_FILMSTRIP) { + if (interfaceConfig.VERTICAL_FILMSTRIP && verticalFilmstripWidth < FILMSTRIP_BREAKPOINT) { containerWidthToUse -= Filmstrip.getVerticalFilmstripWidth(); } @@ -401,7 +409,10 @@ export class VideoContainer extends LargeContainer { if (this.$video.length === 0) { return; } - const currentLayout = getCurrentLayout(APP.store.getState()); + const state = APP.store.getState(); + const currentLayout = getCurrentLayout(state); + + const verticalFilmstripWidth = state['features/filmstrip'].width?.current; if (currentLayout === LAYOUTS.TILE_VIEW) { // We don't need to resize the large video since it won't be displayed and we'll resize when returning back @@ -411,7 +422,7 @@ export class VideoContainer extends LargeContainer { this.positionRemoteStatusMessages(); - const [ width, height ] = this._getVideoSize(containerWidth, containerHeight); + const [ width, height ] = this._getVideoSize(containerWidth, containerHeight, verticalFilmstripWidth); if (width === 0 || height === 0) { // We don't need to set 0 for width or height since the visibility is controlled by the visibility css prop @@ -432,7 +443,7 @@ export class VideoContainer extends LargeContainer { this._updateBackground(); const { horizontalIndent, verticalIndent } - = this.getVideoPosition(width, height, containerWidth, containerHeight); + = this.getVideoPosition(width, height, containerWidth, containerHeight, verticalFilmstripWidth); this.$wrapper.animate({ width,