Skip to content

Commit 23649b7

Browse files
committed
Make stream size based on container element, not window
1 parent e4de79e commit 23649b7

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

src/components/EngineStream.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ export const EngineStream = (props: {
9292
setStreamIdleMode(settings.app.streamIdleMode.current)
9393
}, [settings.app.streamIdleMode.current])
9494

95+
useEffect(() => {
96+
// Will cause a useEffect loop if not checked for.
97+
if (engineStreamState.context.containerElementRef.current !== null) return
98+
engineStreamActor.send({
99+
type: EngineStreamTransition.SetContainerElementRef,
100+
containerElementRef: { current: videoWrapperRef.current },
101+
})
102+
}, [videoWrapperRef.current, engineStreamState])
103+
95104
useEffect(() => {
96105
// Will cause a useEffect loop if not checked for.
97106
if (engineStreamState.context.videoRef.current !== null) return
@@ -298,6 +307,8 @@ export const EngineStream = (props: {
298307
// But if the user resizes, and we're stopped or paused, then we want
299308
// to try to restart the stream!
300309

310+
const wrapper = engineStreamState.context.containerElementRef?.current
311+
if (!wrapper) return
301312
const video = engineStreamState.context.videoRef?.current
302313
if (!video) return
303314
const canvas = engineStreamState.context.canvasRef?.current
@@ -312,8 +323,8 @@ export const EngineStream = (props: {
312323
last.current = Date.now()
313324

314325
if (
315-
(Math.abs(video.width - window.innerWidth) > 4 ||
316-
Math.abs(video.height - window.innerHeight) > 4) &&
326+
(Math.abs(video.width - wrapper.clientWidth) > 4 ||
327+
Math.abs(video.height - wrapper.clientHeight) > 4) &&
317328
engineStreamState.matches(EngineStreamState.Playing)
318329
) {
319330
timeoutStart.current = Date.now()
@@ -322,7 +333,7 @@ export const EngineStream = (props: {
322333
})
323334
})
324335

325-
observer.observe(document.body)
336+
observer.observe(wrapper)
326337

327338
return () => {
328339
observer.disconnect()
@@ -562,7 +573,7 @@ export const EngineStream = (props: {
562573
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
563574
<div
564575
ref={videoWrapperRef}
565-
className="fixed inset-0 z-0"
576+
className="absolute inset-[-4px] z-0"
566577
id="stream"
567578
data-testid="stream"
568579
onMouseUp={handleMouseUp}

src/machines/engineStreamMachine.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export enum EngineStreamTransition {
2222
// Our dependencies to set
2323
SetPool = 'set-pool',
2424
SetAuthToken = 'set-auth-token',
25+
SetContainerElementRef = 'set-container-element-ref',
2526
SetVideoRef = 'set-video-ref',
2627
SetCanvasRef = 'set-canvas-ref',
2728
SetMediaStream = 'set-media-stream',
@@ -39,6 +40,7 @@ export enum EngineStreamTransition {
3940
export interface EngineStreamContext {
4041
pool: string | null
4142
authToken: string | undefined
43+
containerElementRef: MutableRefObject<HTMLDivElement | null>
4244
videoRef: MutableRefObject<HTMLVideoElement | null>
4345
canvasRef: MutableRefObject<HTMLCanvasElement | null>
4446
mediaStream: MediaStream | null
@@ -48,6 +50,7 @@ export interface EngineStreamContext {
4850
export const engineStreamContextCreate = (): EngineStreamContext => ({
4951
pool: null,
5052
authToken: undefined,
53+
containerElementRef: { current: null },
5154
videoRef: { current: null },
5255
canvasRef: { current: null },
5356
mediaStream: null,
@@ -99,12 +102,13 @@ export const engineStreamMachine = setup({
99102
}
100103
}) => {
101104
if (!context.authToken) return Promise.reject()
105+
if (!context.containerElementRef.current) return Promise.reject()
102106
if (!context.videoRef.current) return Promise.reject()
103107
if (!context.canvasRef.current) return Promise.reject()
104108

105109
const { width, height } = getDimensions(
106-
window.innerWidth,
107-
window.innerHeight
110+
context.containerElementRef.current.clientWidth,
111+
context.containerElementRef.current.clientHeight
108112
)
109113

110114
context.videoRef.current.width = width
@@ -273,6 +277,14 @@ export const engineStreamMachine = setup({
273277
assign({ authToken: ({ context, event }) => event.authToken }),
274278
],
275279
},
280+
[EngineStreamTransition.SetContainerElementRef]: {
281+
target: EngineStreamState.WaitingForDependencies,
282+
actions: [
283+
assign({
284+
containerElementRef: ({ event }) => event.containerElementRef,
285+
}),
286+
],
287+
},
276288
[EngineStreamTransition.SetVideoRef]: {
277289
target: EngineStreamState.WaitingForDependencies,
278290
actions: [

0 commit comments

Comments
 (0)