diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte
index ee18d24e89..72496eb94a 100644
--- a/web/src/lib/components/asset-viewer/asset-viewer.svelte
+++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte
@@ -487,8 +487,6 @@
class="fixed start-0 top-0 grid size-full grid-cols-4 grid-rows-[64px_1fr] overflow-hidden bg-black"
use:focusTrap
bind:this={assetViewerHtmlElement}
- bind:clientWidth={containerWidth}
- bind:clientHeight={containerHeight}
>
{#if $slideshowState === SlideshowState.None && !assetViewerManager.isShowEditor}
@@ -530,7 +528,12 @@
{/if}
-
+
{#if viewerKind === 'StackVideoViewer'}
{
- const { offsetX, offsetY } = imageContentMetrics;
+ const { offsetX, offsetY, contentWidth } = imageContentMetrics;
- if (!canvas) {
+ if (!canvas || contentWidth === 0) {
return;
}
- canvas.setDimensions({
- width: containerWidth,
- height: containerHeight,
- });
+ if (!initialized) {
+ initialized = true;
+ canvas.setDimensions({ width: containerWidth, height: containerHeight });
- if (!faceRect) {
+ if (faceRect) {
+ faceRect.set({ top: offsetY + 200, left: offsetX + 200 });
+ faceRect.setCoords();
+ }
+
+ previousContentWidth = contentWidth;
+ previousOffsetX = offsetX;
+ previousOffsetY = offsetY;
+ positionFaceSelector();
return;
}
- faceRect.set({
- top: offsetY + 200,
- left: offsetX + 200,
- });
+ canvas.setDimensions({ width: containerWidth, height: containerHeight });
- faceRect.setCoords();
+ if (faceRect && previousContentWidth > 0) {
+ const scale = contentWidth / previousContentWidth;
+ const imageRelLeft = (faceRect.left - previousOffsetX) * scale;
+ const imageRelTop = (faceRect.top - previousOffsetY) * scale;
+
+ faceRect.set({
+ left: offsetX + imageRelLeft,
+ top: offsetY + imageRelTop,
+ scaleX: faceRect.scaleX * scale,
+ scaleY: faceRect.scaleY * scale,
+ });
+ faceRect.setCoords();
+ }
+
+ previousContentWidth = contentWidth;
+ previousOffsetX = offsetX;
+ previousOffsetY = offsetY;
+
+ canvas.renderAll();
positionFaceSelector();
});