feat(web): add canvasResizedCallback method to SessionBuilder (#842)

Co-authored-by: Benoît Cortier <3809077+CBenoit@users.noreply.github.com>
This commit is contained in:
Alex Yusiuk 2025-06-27 10:55:26 +03:00 committed by GitHub
parent 7c4a496ece
commit f6285c5989
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 43 additions and 2 deletions

View file

@ -61,6 +61,10 @@ export interface SessionBuilder {
* Optional
*/
forceClipboardUpdateCallback(callback: ForceClipboardUpdateCallback): SessionBuilder;
/**
* Optional
*/
canvasResizedCallback(callback: CanvasResizedCallback): SessionBuilder;
extension(value: unknown): SessionBuilder;
connect(): Promise<Session>;
}
@ -85,3 +89,7 @@ interface RemoteReceiveForwardListCallback {
interface ForceClipboardUpdateCallback {
(): void;
}
interface CanvasResizedCallback {
(): void;
}

View file

@ -54,6 +54,8 @@
let remoteDesktopService = new RemoteDesktopService(module);
let publicAPI = new PublicAPI(remoteDesktopService);
let currentScreenScale = ScreenScale.Fit;
// Firefox's clipboard API is very limited, and doesn't support reading from the clipboard
// without changing browser settings via `about:config`.
//
@ -491,25 +493,32 @@
});
}
function scaleSession(currentSize: ScreenScale | string) {
function canvasResized() {
scaleSession(currentScreenScale);
}
function scaleSession(screenScale: ScreenScale | string) {
resetHostStyle();
if (isVisible) {
switch (currentSize) {
switch (screenScale) {
case 'fit':
case ScreenScale.Fit:
loggingService.info('Size to fit');
currentScreenScale = ScreenScale.Fit;
scale = 'fit';
fitResize();
break;
case 'full':
case ScreenScale.Full:
loggingService.info('Size to full');
currentScreenScale = ScreenScale.Full;
fullResize();
scale = 'full';
break;
case 'real':
case ScreenScale.Real:
loggingService.info('Size to real');
currentScreenScale = ScreenScale.Real;
realResize();
scale = 'real';
break;
@ -666,6 +675,7 @@
canvas.height = 600;
remoteDesktopService.setCanvas(canvas);
remoteDesktopService.setOnCanvasResized(canvasResized);
initListeners();

View file

@ -23,6 +23,7 @@ import type { SessionTerminationInfo } from '../interfaces/SessionTerminationInf
type OnRemoteClipboardChanged = (data: ClipboardData) => void;
type OnRemoteReceivedFormatsList = () => void;
type OnForceClipboardUpdate = () => void;
type OnCanvasResized = () => void;
export class RemoteDesktopService {
private module: RemoteDesktopModule;
@ -32,6 +33,7 @@ export class RemoteDesktopService {
private onRemoteClipboardChanged?: OnRemoteClipboardChanged;
private onRemoteReceivedFormatList?: OnRemoteReceivedFormatsList;
private onForceClipboardUpdate?: OnForceClipboardUpdate;
private onCanvasResized?: OnCanvasResized;
private cursorHasOverride: boolean = false;
private lastCursorStyle: string = 'default';
private enableClipboard: boolean = true;
@ -74,6 +76,11 @@ export class RemoteDesktopService {
this.onForceClipboardUpdate = callback;
}
/// Callback which is called when the canvas is resized.
setOnCanvasResized(callback: OnCanvasResized) {
this.onCanvasResized = callback;
}
mouseIn(event: MouseEvent) {
this.syncModifier(event);
}
@ -135,6 +142,9 @@ export class RemoteDesktopService {
if (this.onForceClipboardUpdate != null && this.enableClipboard) {
sessionBuilder.forceClipboardUpdateCallback(this.onForceClipboardUpdate);
}
if (this.onCanvasResized != null) {
sessionBuilder.canvasResizedCallback(this.onCanvasResized);
}
if (config.desktopSize != null) {
sessionBuilder.desktopSize(