diff --git a/web/src/lib/components/AdaptiveImage.svelte b/web/src/lib/components/AdaptiveImage.svelte index 4f3522887c..6ead2c484e 100644 --- a/web/src/lib/components/AdaptiveImage.svelte +++ b/web/src/lib/components/AdaptiveImage.svelte @@ -149,29 +149,35 @@ return { width: 1, height: 1 }; }); - const { insetInlineStart, top, rasterWidth, rasterHeight, rasterScale } = $derived.by(() => { - const scaleFn = objectFit === 'cover' ? scaleToCover : scaleToFit; - const { width, height } = scaleFn(imageDimensions, container); - if (maxRasterPixels === 0) { + const { insetInlineStart, top, displayWidth, displayHeight, rasterWidth, rasterHeight, rasterScale } = $derived.by( + () => { + const scaleFn = objectFit === 'cover' ? scaleToCover : scaleToFit; + const { width, height } = scaleFn(imageDimensions, container); + if (maxRasterPixels === 0) { + return { + insetInlineStart: (container.width - width) / 2 + 'px', + top: (container.height - height) / 2 + 'px', + displayWidth: width + 'px', + displayHeight: height + 'px', + rasterWidth: width + 'px', + rasterHeight: height + 'px', + rasterScale: 1, + }; + } + const nativeRatio = imageDimensions.width / width; + const budgetRatio = Math.sqrt(maxRasterPixels / Math.max(width * height, 1)); + const rasterRatio = Math.max(1, Math.min(nativeRatio, budgetRatio)); return { insetInlineStart: (container.width - width) / 2 + 'px', top: (container.height - height) / 2 + 'px', - rasterWidth: width + 'px', - rasterHeight: height + 'px', - rasterScale: 1, + displayWidth: width + 'px', + displayHeight: height + 'px', + rasterWidth: width * rasterRatio + 'px', + rasterHeight: height * rasterRatio + 'px', + rasterScale: 1 / rasterRatio, }; - } - const nativeRatio = imageDimensions.width / width; - const budgetRatio = Math.sqrt(maxRasterPixels / Math.max(width * height, 1)); - const rasterRatio = Math.max(1, Math.min(nativeRatio, budgetRatio)); - return { - insetInlineStart: (container.width - width) / 2 + 'px', - top: (container.height - height) / 2 + 'px', - rasterWidth: width * rasterRatio + 'px', - rasterHeight: height * rasterRatio + 'px', - rasterScale: 1 / rasterRatio, - }; - }); + }, + ); const { status } = $derived(adaptiveImageLoader); const alt = $derived(status.urls.preview ? $getAltText(toTimelineAsset(asset)) : ''); @@ -261,7 +267,6 @@ {alt} width={rasterWidth} height={rasterHeight} - {overlays} quality="preview" src={status.urls.preview} bind:ref={previewElement} @@ -274,11 +279,22 @@ {alt} width={rasterWidth} height={rasterHeight} - {overlays} quality="original" src={status.urls.original} bind:ref={originalElement} /> {/if} + + {#if overlays} +
+ {@render overlays()} +
+ {/if} diff --git a/web/src/lib/components/ImageLayer.svelte b/web/src/lib/components/ImageLayer.svelte index 1ac854259d..7edeb757de 100644 --- a/web/src/lib/components/ImageLayer.svelte +++ b/web/src/lib/components/ImageLayer.svelte @@ -1,7 +1,6 @@ @@ -42,6 +39,5 @@ draggable={false} data-testid={quality} /> - {@render overlays?.()} {/key}