mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-15 08:43:44 +08:00
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import type { FullscreenMode } from '../useDesktopPlayerState';
|
|
|
|
export interface AndroidPiPTransitionPlan {
|
|
enterTemporaryWindowFullscreen: boolean;
|
|
restoreInlineOnExit: boolean;
|
|
}
|
|
|
|
export interface AndroidPiPSessionState {
|
|
enteredTemporaryWindowFullscreen: boolean;
|
|
restoreInlineOnExit: boolean;
|
|
}
|
|
|
|
export interface AndroidPiPSourceRect {
|
|
left: number;
|
|
top: number;
|
|
right: number;
|
|
bottom: number;
|
|
}
|
|
|
|
export function createAndroidPiPTransitionPlan(fullscreenMode: FullscreenMode): AndroidPiPTransitionPlan {
|
|
const enterTemporaryWindowFullscreen = fullscreenMode !== 'window';
|
|
|
|
return {
|
|
enterTemporaryWindowFullscreen,
|
|
restoreInlineOnExit: enterTemporaryWindowFullscreen,
|
|
};
|
|
}
|
|
|
|
export function shouldRestoreInlineAfterAndroidPiP(
|
|
session: AndroidPiPSessionState | null,
|
|
inPictureInPicture: boolean
|
|
): boolean {
|
|
if (!session || inPictureInPicture) {
|
|
return false;
|
|
}
|
|
|
|
return session.enteredTemporaryWindowFullscreen && session.restoreInlineOnExit;
|
|
}
|
|
|
|
export function shouldRollbackTemporaryWindowFullscreen(session: AndroidPiPSessionState | null): boolean {
|
|
return Boolean(session?.enteredTemporaryWindowFullscreen);
|
|
}
|
|
|
|
export function getAndroidPiPSourceRect(container: HTMLElement | null): AndroidPiPSourceRect | null {
|
|
if (!container) {
|
|
return null;
|
|
}
|
|
|
|
const rect = container.getBoundingClientRect();
|
|
if (rect.width <= 0 || rect.height <= 0) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
left: Math.max(0, Math.round(rect.left)),
|
|
top: Math.max(0, Math.round(rect.top)),
|
|
right: Math.max(0, Math.round(rect.right)),
|
|
bottom: Math.max(0, Math.round(rect.bottom)),
|
|
};
|
|
}
|