Spine View 启动自动打开(等价 Views 菜单勾选),不用每次手点
- ViewInstaller.showView():面板 Actor 填好后调 Fx.D(us.spineView) —— 菜单 'Tree View' 的动作体就是 Fx.D(us.Tree)(og.java:23),是编辑器自己的'显示/停靠视图'入口。 - 为什么之前每次都要手点:视图可见状态写在 views.json,只有正常退出才落盘;而我们一直用 SIGTERM 杀编辑器进程,状态没写回去。启动时主动开一次就绕过了这个。 - 列表区仍按设计需要点一次 Refresh(面板是编辑器 UI 搭好之前就建的,那时场景树还是空的)。
This commit is contained in:
1 parent
9a6913e610
commit
e197a6883a
1 file changed
+28
@@ -76,6 +76,7 @@ public final class ViewInstaller {
|
||||
field.setAccessible(true);
|
||||
field.set(view, panel);
|
||||
System.err.println("[view] 已把 Spine View 面板挂到视图 " + view);
|
||||
showView(loader, view);
|
||||
return true;
|
||||
}
|
||||
System.err.println("[view] 视图枚举里找不到 Actor 字段");
|
||||
@@ -85,6 +86,33 @@ public final class ViewInstaller {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 像 Views 菜单那样把视图"打开"一次,这样面板不用每次手动点开。
|
||||
*
|
||||
* 菜单里 "Tree View" 的动作体就一句:`Fx.D(us.Tree)`(`og.java:23`),
|
||||
* `Fx` 是编辑器里那个静态 Actor 锚点类,`D(Object)` 就是"显示/停靠这个视图"。
|
||||
* 面板的可见状态本来就会写进 `views.json`,但只有正常退出才会写;我们一直用
|
||||
* SIGTERM 杀进程,所以每次都得手动点 —— 这里启动时主动开一次即可。
|
||||
*/
|
||||
private static void showView(ClassLoader loader, Object view) {
|
||||
try {
|
||||
Class<?> fx = Class.forName("Fx", true, loader);
|
||||
for (Method method : fx.getDeclaredMethods()) {
|
||||
if (!java.lang.reflect.Modifier.isStatic(method.getModifiers())) continue;
|
||||
Class<?>[] parameters = method.getParameterTypes();
|
||||
if (parameters.length != 1) continue;
|
||||
if (!parameters[0].isAssignableFrom(view.getClass())) continue;
|
||||
method.setAccessible(true);
|
||||
method.invoke(null, view);
|
||||
System.err.println("[view] 已自动打开 Spine View(等价于 Views 菜单里勾选)");
|
||||
return;
|
||||
}
|
||||
System.err.println("[view] Fx 上没找到打开视图的方法,跳过自动打开");
|
||||
} catch (Throwable error) {
|
||||
System.err.println("[view] 自动打开视图失败: " + error);
|
||||
}
|
||||
}
|
||||
|
||||
/** Skin 挂在 OG 的静态字段上(字节码里 OG 有 LSkin;D)。 */
|
||||
private static Object findSkin(ClassLoader loader) throws Exception {
|
||||
Class<?> holder = Class.forName("OG", true, loader);
|
||||
|
||||
Reference in new issue
Block a user