Compare commits

...

3 Commits

Author SHA1 Message Date
k88936 25df114b93 修复资源卡片缩放控件裁剪
Project CI / Repository checks (pull_request) Successful in 4m19s
Project CI / Frontend tests (pull_request) Successful in 3m3s
Project CI / Native shell tests (pull_request) Failing after 6m31s
Project CI / Backend tests (pull_request) Successful in 8m55s
将卡片容器改为可见溢出,避免逆缩放徽标和媒体控件在低缩放时被截断

保留视觉内容层的溢出裁剪并继承卡片圆角
2026-09-09 11:28:14 +08:00
k88936 96e95ae155 恢复资源卡片静态图标描边缩放
移除占位图标继承 inverse-scale 的统一 stroke-width 规则

保留资源依赖关系线的 non-scaling-stroke 几何覆盖行为
2026-09-09 11:25:12 +08:00
k88936 b4595d3125 统一画布视口缩放兜底逻辑
提取 getSafeViewportScale 供 world transform 与逆缩放变量复用

导出共享缩放辅助函数并保持现有渲染行为
2026-09-09 11:23:10 +08:00
4 changed files with 16 additions and 12 deletions
+2 -7
View File
@@ -5869,7 +5869,7 @@ iframe.preview-frame {
height: var(--resource-card-height);
min-height: var(--resource-card-height);
padding: 0;
overflow: hidden;
overflow: visible;
border: 1px solid #eadbd4;
border-radius: 12px;
background: #fff;
@@ -5912,6 +5912,7 @@ iframe.preview-frame {
inset: 0;
display: grid;
overflow: hidden;
border-radius: inherit;
background: linear-gradient(145deg, #fffaf6, #f6ece6);
color: #c46a40;
place-items: center;
@@ -5982,12 +5983,6 @@ iframe.preview-frame {
transform-origin: bottom right;
}
.game-resource-card-placeholder > svg *,
.game-resource-card-version-visual > svg *,
.game-resource-card-audio-visual > svg * {
stroke-width: calc(2px * var(--genarrative-image-canvas-inverse-scale, 1));
}
.game-resource-card-open {
position: absolute;
z-index: 1;
@@ -7,6 +7,7 @@ import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';
import {
CANVAS_RENDER_SUPERSAMPLE,
canvasViewportToWorldTransform,
getSafeViewportScale,
} from './canvasWorldRendering';
export function CanvasWorld({
@@ -21,8 +22,7 @@ export function CanvasWorld({
viewport: CanvasViewport;
worldSize?: number;
}) {
const viewportScale =
Number.isFinite(viewport.scale) && viewport.scale > 0 ? viewport.scale : 1;
const viewportScale = getSafeViewportScale(viewport);
return (
<div
@@ -2,9 +2,15 @@ import type { CanvasViewport } from '@genarrative/image-canvas-core';
export const CANVAS_RENDER_SUPERSAMPLE = 2;
/** 将 viewport scale 规范化为可用于渲染和反向缩放的正有限值。 */
export function getSafeViewportScale(viewport: CanvasViewport) {
return Number.isFinite(viewport.scale) && viewport.scale > 0
? viewport.scale
: 1;
}
/** 将逻辑 viewport 转换为 world 的渲染 transform。 */
export function canvasViewportToWorldTransform(viewport: CanvasViewport) {
const scale =
Number.isFinite(viewport.scale) && viewport.scale > 0 ? viewport.scale : 1;
const scale = getSafeViewportScale(viewport);
return `translate(${viewport.x}px, ${viewport.y}px) scale(${scale / CANVAS_RENDER_SUPERSAMPLE})`;
}
+4 -1
View File
@@ -2,7 +2,10 @@ export * from './CanvasChrome';
export * from './CanvasPortal';
export * from './CanvasViewport';
export * from './CanvasWorld';
export { canvasViewportToWorldTransform } from './canvasWorldRendering';
export {
canvasViewportToWorldTransform,
getSafeViewportScale,
} from './canvasWorldRendering';
export * from './LayerRenderer';
export * from './Minimap';
export * from './SelectionOverlay';