Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 36 additions & 53 deletions src/dom-renderer/domRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,26 @@ function updateRenderStateIfNeeded(node: DOMNode | DOMText): void {
}
}

function applyLegacyObjectFit(
node: DOMNode,
img: HTMLImageElement,
srcPos: InstanceType<lng.TextureMap['SubTexture']>['props'] | null,
): void {
const resizeMode = (node.props.textureOptions as any)?.resizeMode;
const clipX = resizeMode?.clipX ?? 0.5;
const clipY = resizeMode?.clipY ?? 0.5;
computeLegacyObjectFit(
node,
img,
resizeMode,
clipX,
clipY,
srcPos,
supportsObjectFit,
supportsObjectPosition,
);
}

function updateNodeStyles(node: DOMNode | DOMText) {
let { props } = node;

Expand Down Expand Up @@ -680,7 +700,14 @@ function updateNodeStyles(node: DOMNode | DOMText) {
}

let bgLayerStyle =
'position: absolute; top:0; left:0; right:0; bottom:0; z-index: -1; pointer-events: none; -webkit-clip-path: inset(0); clip-path: inset(0);';
'position: absolute; top:0; left:0; right:0; bottom:0; z-index: -1; pointer-events: none;';
// overflow:hidden clips the transformed imgEl to prevent sprite bleed-through
// for non-tinted subtextures. NOT applied when hasDivBgTint because
// overflow:hidden + CSS mask-image causes a 1px white border artifact on WebKit.
// Tinted nodes use mask-image for visual clipping, so overflow:hidden is unnecessary.
if (srcPos !== null && !hasDivBgTint) {
bgLayerStyle += 'overflow: hidden;';
}
if (bgStyle) {
bgLayerStyle += bgStyle;
}
Expand Down Expand Up @@ -717,19 +744,9 @@ function updateNodeStyles(node: DOMNode | DOMText) {
node.lazyImageSubTextureProps,
);

const resizeMode = (node.props.textureOptions as any)?.resizeMode;
const clipX = resizeMode?.clipX ?? 0.5;
const clipY = resizeMode?.clipY ?? 0.5;
computeLegacyObjectFit(
node,
node.imgEl!,
resizeMode,
clipX,
clipY,
node.lazyImageSubTextureProps,
supportsObjectFit,
supportsObjectPosition,
);
if (!node.lazyImageSubTextureProps) {
applyLegacyObjectFit(node, node.imgEl!, null);
}

// Reveal only after final fit/positioning is applied
if (node.imgEl) {
Expand Down Expand Up @@ -798,19 +815,7 @@ function updateNodeStyles(node: DOMNode | DOMText) {
(!supportsObjectFit || !supportsObjectPosition) &&
node.imgEl.dataset.rawSrc === rawImgSrc
) {
const resizeMode = (node.props.textureOptions as any)?.resizeMode;
const clipX = resizeMode?.clipX ?? 0.5;
const clipY = resizeMode?.clipY ?? 0.5;
computeLegacyObjectFit(
node,
node.imgEl,
resizeMode,
clipX,
clipY,
srcPos,
supportsObjectFit,
supportsObjectPosition,
);
applyLegacyObjectFit(node, node.imgEl, srcPos);
}
} else {
node.lazyImagePendingSrc = null;
Expand Down Expand Up @@ -861,19 +866,9 @@ function updateNodeStyles(node: DOMNode | DOMText) {
node.lazyImageSubTextureProps,
);

const resizeMode = (node.props.textureOptions as any)?.resizeMode;
const clipX = resizeMode?.clipX ?? 0.5;
const clipY = resizeMode?.clipY ?? 0.5;
computeLegacyObjectFit(
node,
node.imgEl!,
resizeMode,
clipX,
clipY,
node.lazyImageSubTextureProps,
supportsObjectFit,
supportsObjectPosition,
);
if (!node.lazyImageSubTextureProps) {
applyLegacyObjectFit(node, node.imgEl!, null);
}

if (node.imgEl) {
node.imageLoading = false;
Expand Down Expand Up @@ -934,19 +929,7 @@ function updateNodeStyles(node: DOMNode | DOMText) {
(!supportsObjectFit || !supportsObjectPosition) &&
node.imgEl.dataset.rawSrc === rawImgSrc
) {
const resizeMode = (node.props.textureOptions as any)?.resizeMode;
const clipX = resizeMode?.clipX ?? 0.5;
const clipY = resizeMode?.clipY ?? 0.5;
computeLegacyObjectFit(
node,
node.imgEl,
resizeMode,
clipX,
clipY,
srcPos,
supportsObjectFit,
supportsObjectPosition,
);
applyLegacyObjectFit(node, node.imgEl, srcPos);
}
} else {
node.lazyImagePendingSrc = null;
Expand Down
Loading