From 05c5d45cca282ce7fe7a0f963fcd1e2ac0058269 Mon Sep 17 00:00:00 2001 From: tianmo Date: Fri, 16 Oct 2026 17:07:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=20run.sh=EF=BC=88=E6=BC=8F=20import?= =?UTF-8?q?=20os=EF=BC=8C=E5=AF=BC=E8=87=B4=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E6=A0=B9=E6=9C=AC=E8=B5=B7=E4=B8=8D=E6=9D=A5=EF=BC=89+=20?= =?UTF-8?q?=E4=B8=89=E6=AE=B5=E9=AB=98=E5=BA=A6=2020/60/20=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8C=89=20Stage=20=E9=AB=98=E5=BA=A6=E7=AE=97?= =?UTF-8?q?=EF=BC=88=E5=AE=9E=E6=B5=8B=20Stage.B()F=3DgetHeight=EF=BC=9A4K?= =?UTF-8?q?=20=E7=AA=97=E5=8F=A3=202044=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/deobf/anchors.tsv | 5 +++ tools/deobf/names.tsv | 2 + viewpanel/run.sh | 2 +- viewpanel/src/com/spineview/ObjectPanel.java | 40 ++++++++++++++------ 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/tools/deobf/anchors.tsv b/tools/deobf/anchors.tsv index c3e4ec3..68af292 100644 --- a/tools/deobf/anchors.tsv +++ b/tools/deobf/anchors.tsv @@ -98,3 +98,8 @@ dl L (Ldv;)V setTouchable # Cell.I(900) -> root 高度 580 -> 1080(其它候选 L/B/Z/V/C/S/F 都没这个效果) # => Cell.I(float) 就是 height(float);现象佐证:设了它之后列表区出现滚动条、可滚。 dR I (F)LdR; height +# ---- Stage 宽高(2026-10-16 实测)---- +# 依据:编辑器窗口 4K 下读 Stage 的无参 float 只有两个:B=2044、D=3726(高<宽), +# 故 B()F = getHeight、D()F = getWidth。 +dt B ()F getHeight +dt D ()F getWidth diff --git a/tools/deobf/names.tsv b/tools/deobf/names.tsv index c693fc7..0237a1f 100644 --- a/tools/deobf/names.tsv +++ b/tools/deobf/names.tsv @@ -167,6 +167,8 @@ do L (Ldl;)Z removeActor do L (Z)V setTransform do LineNumberTable ()Z isTransform do init ()Z hasChildren +dt B ()F getHeight +dt D ()F getWidth eM C ()V expandTo eM D ()F getHeight eM D ()Z hasChildren diff --git a/viewpanel/run.sh b/viewpanel/run.sh index 2f2253e..4242150 100755 --- a/viewpanel/run.sh +++ b/viewpanel/run.sh @@ -29,7 +29,7 @@ echo "== 启动(工程 $PROJ)" # 注意:不能用 `nohup … &` —— 那样进程挂在本 shell 的会话里,跑这条命令的终端一结束 # 编辑器就被一起收掉。必须 start_new_session=True 让它彻底脱离会话。 python3 - "$JX" "$ROOT" "$HERE" "$PAY" "$PROJ" "$LOG" <<'PYEOF' -import subprocess, sys +import os, subprocess, sys jx, root, here, pay, proj, log = sys.argv[1:7] cmd = [jx, "-javaagent:" + root + "/tools/agent/view-agent.jar", diff --git a/viewpanel/src/com/spineview/ObjectPanel.java b/viewpanel/src/com/spineview/ObjectPanel.java index 1d4fe06..c2b03e2 100644 --- a/viewpanel/src/com/spineview/ObjectPanel.java +++ b/viewpanel/src/com/spineview/ObjectPanel.java @@ -218,18 +218,34 @@ public final class ObjectPanel { } // 三段高度按用户要求:上 20% / 中 60% / 下 20%(不用 expand)。 // 面板高度取实测值 984(见日志 pass0 dock=984),换算 = 197 / 590 / 197。 - // 面板高度:默认取实测值 984(本机逻辑高度),可用 -Dpanel.h=<像素> 覆盖(4K/不同窗口大小用)。 - final float PANEL_H = Float.parseFloat(System.getProperty("panel.h", "984")); - try { - call(buttonsCell, "I", new Class[] {float.class}, cellClass, - Float.valueOf(PANEL_H * 0.20f)); - call(cell, "I", new Class[] {float.class}, cellClass, Float.valueOf(PANEL_H * 0.60f)); - call(logCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(PANEL_H * 0.20f)); - System.err.println("[panel] 三段高度: " + (PANEL_H * 0.20f) + " / " + (PANEL_H * 0.60f) - + " / " + (PANEL_H * 0.20f)); - } catch (Throwable error) { - System.err.println("[panel] 设置三段高度失败: " + error); - } + // 三段高度 20/60/20:面板高度从编辑器 Stage 读(建面板时 Stage 可能还没挂上,延迟 1.2s 再读) + final Object middleCell = cell; + Thread fit = new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(1200); + float stageH = 0f; + Object stage = SceneObjects.global(state.loader, "uk"); + if (stage == null) stage = SceneObjects.global(state.loader, "dt"); + // Stage 上:`B()F`=getHeight、`D()F`=getWidth(实测:4K 窗口 2044 / 3726) + if (stage != null) stageH = floatOf(stage, "B"); + float panelH = stageH > 300f ? stageH - 100f : 984f; + call(buttonsCell, "I", new Class[] {float.class}, cellClass, + Float.valueOf(panelH * 0.2f)); + call(middleCell, "I", new Class[] {float.class}, cellClass, + Float.valueOf(panelH * 0.6f)); + call(logCell, "I", new Class[] {float.class}, cellClass, Float.valueOf(panelH * 0.2f)); + call(state.root, "b_", new Class[0], void.class); + System.err.println("[panel] 面板高度(自动): stage=" + stageH + " -> " + panelH + + ";三段 = " + (panelH * 0.2f) + " / " + (panelH * 0.6f) + " / " + (panelH * 0.2f)); + } catch (Throwable error) { + System.err.println("[panel] 自动三段高度失败: " + error); + } + } + }, "spineview-fit"); + fit.setDaemon(true); + fit.start(); System.err.println("[panel] 增删改查面板已建好"); refreshList(state); return root;