From f40979f965b02cab81ab5249bd2d96691302ef1d Mon Sep 17 00:00:00 2001 From: tianmo Date: Fri, 16 Oct 2026 19:31:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E7=85=A7=E8=A1=A8=EF=BC=9A=E8=A1=A5?= =?UTF-8?q?=20WidgetGroup=20=E5=B0=BA=E5=AF=B8=E8=AF=BB=E5=8F=96(min/pref/?= =?UTF-8?q?maxW/H)=20+=20=E5=AF=B9=E8=AF=9D=E6=A1=86=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E5=85=A8/=E9=97=AA=E5=B7=A6=E4=B8=8B=E8=A7=92?= =?UTF-8?q?=E7=9A=84=E4=B8=A4=E4=B8=AA=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 弹窗建出来默认 150x150,正文和按钮被裁 → 显式设 width/height=max(pref,min,下限) 再 invalidate - '先左下角再跳中间' = addActor 后过一帧才居中;改成尺寸+居中在同一次渲染回调里做完 names.tsv 338 条,payload-named.zip 已重产(5617 处引用) --- tools/deobf/anchors.tsv | 12 ++++++++++++ tools/deobf/names.tsv | 6 ++++++ 混淆名对照表.md | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/tools/deobf/anchors.tsv b/tools/deobf/anchors.tsv index bb894c2..a6798ea 100644 --- a/tools/deobf/anchors.tsv +++ b/tools/deobf/anchors.tsv @@ -338,3 +338,15 @@ com.spineview.ObjectPanel wire (Ljava/lang/ClassLoader;Ljava/lang/Object;Ljava/l com.spineview.SceneObjects listAllNodes (Ljava/lang/ClassLoader;)Ljava/util/List; listAllNodes com.spineview.SceneActions delete (Ljava/lang/ClassLoader;Ljava/lang/Object;)Z delete # ^ 面板自己的"罗列场景对象 / 删除对象"(走编辑器删除流程,自带撤销)——清理误建对象时用它 + +# ---- WidgetGroup 的尺寸读取(本次用来把对话框撑到合适大小)---- +eX LineNumberTable ()F getMinWidth +eX String ()F getMinHeight +eX StackMapTable ()F getPrefWidth +eX init ()F getPrefHeight +eX Ljava ()F getMaxWidth +eX Class ()F getMaxHeight +# ^ 六个 Layout 方法按 eX 声明顺序对应 minWidth/minHeight/prefWidth/prefHeight/maxWidth/maxHeight +# (面板日志里一直用的 `init` 读出来就是 prefHeight;本次实测对话框 pref=399x166) +# ^ ⚠️ 窗口刚建出来时的尺寸是默认的 150x150(所以正文/按钮会被裁), +# 要显式 `Actor.width/height = max(pref, min, 下限)` + `eX.b_()V`(invalidate) 才会按 pref 撑开 diff --git a/tools/deobf/names.tsv b/tools/deobf/names.tsv index a02b865..1d3498f 100644 --- a/tools/deobf/names.tsv +++ b/tools/deobf/names.tsv @@ -262,11 +262,17 @@ eM D ()Z hasChildren eM D (Ljava/lang/Object;)LeM; findNode eM I ()V collapseAll eM S ()V expandAll +eX Class ()F getMaxHeight eX D (LJ;F)V draw +eX LineNumberTable ()F getMinWidth +eX Ljava ()F getMaxWidth eX Object ()Z needsLayout +eX StackMapTable ()F getPrefWidth eX StackMapTable ()V layout +eX String ()F getMinHeight eX V (Z)V setFillParent eX b_ ()V invalidate +eX init ()F getPrefHeight et B (Lca;)V drawDebugBounds et B (LeN;)Let; padTop et B (Z)V setDebug diff --git a/混淆名对照表.md b/混淆名对照表.md index 8a391f7..b21f6c0 100644 --- a/混淆名对照表.md +++ b/混淆名对照表.md @@ -522,3 +522,12 @@ macOS 文件系统大小写不敏感,解到目录里会互相覆盖 —— 所 > 另外踩到两个**跟 API 无关但会浪费半天**的坑,记在这里: > 1) **HotSpot 同名 agent 类只加载一次** —— 改了 agent 代码再 attach 同一个类名,跑的还是旧代码;每次改代码都要换类名。 > 2) 编辑器字体**没有中文字形**,对话框/按钮文字写中文会显示成乱码 —— 一律用英文。 + +### 对话框"显示不全 / 先闪左下角"的两个修正(2026-10-16 实测) + +| 载荷签名 | 真名 | 依据 / 坑 | +| --- | --- | --- | +| `eX.StackMapTable()F` / `eX.init()F` | **getPrefWidth / getPrefHeight** | `eX`(WidgetGroup) 六个 Layout 方法按声明顺序 = minW/minH/prefW/prefH/maxW/maxH。实测对话框 pref=**399x166**,但窗口刚建出来时是默认 **150x150** → 正文和按钮被裁。修法:`Actor.width/height = max(pref, min, 下限)` 再 `eX.b_()V`(invalidate) | +| `eX.LineNumberTable()F` / `eX.String()F` | **getMinWidth / getMinHeight** | 同上(对话框 min=302x166) | +| `eX.b_()V` | **invalidate** | 让内容按新尺寸重新布局(和 `dl.b_()Z`=remove 同名不同描述符) | +| `dl.D(FFI)V` | **setPosition(x,y,alignment)** | **align=0 → 以 (x,y) 为中心**。"先出现在左下角、再跳到中间"的原因就是:先 `addActor`(默认 (0,0))渲染了一帧,350ms 后才居中。修法:**尺寸 + 居中都在同一次渲染回调里做完**(本次实测 399x170 @ (1665.5,937) → 中心正好 (1865,1022) = 3730x2044 的正中) |