Fehler bei Vollbild und NinePAtch behoben

This commit is contained in:
2026-07-15 18:39:54 +02:00
parent 6cf8f52faf
commit 975161e2cc
4 changed files with 26 additions and 24 deletions

View File

@@ -7331,9 +7331,6 @@ public class EditorApp extends Application {
final boolean isNewGame = pendingNewGame;
pendingNewGame = false;
// Editor minimieren, damit das GLFW-Vollbild-Fenster keinen Focus-Konkurrenten hat.
// GLFW_AUTO_ICONIFY würde das Vollbild-Fenster sonst sofort minimieren, weil der
// Editor beim Starten noch den Fokus hat. Der JVM-Start des Spiels dauert mehrere
// Sekunden das Fenster ist längst minimiert, bevor GLFW das Fenster anlegt.
Platform.runLater(() -> { if (primaryStage != null) primaryStage.setIconified(true); });
new Thread(() -> {
try {

View File

@@ -101,10 +101,11 @@ public class BlightGame extends SimpleApplication {
settings.setBitsPerPixel(32);
settings.setVSync(gs.vsync);
settings.setSamples(gs.samples);
// X11 erzwingen: auf Systemen mit Wayland-Libs läuft GLFW sonst im Wayland-Modus,
// was libdecor-Fensterrahmen auch im Vollbild aktiviert.
settings.setX11PlatformPreferred(true);
// Nur unter X11-Linux: GLFW auf X11-Backend festlegen, damit libdecor keine
// Fensterrahmen im Vollbild hinzufügt. Unter nativem Wayland nicht setzen.
if ("x11".equalsIgnoreCase(System.getenv("XDG_SESSION_TYPE"))) {
settings.setX11PlatformPreferred(true);
}
// Splash vor GLFW-Fenstererstellung schließen: verhindert auto-iconify
// (JWindow kann X11-Fokus zurückbekommen → GLFW-Vollbild sofort minimiert)
if (gs.fullscreen && app.splashWindow != null) {
@@ -474,10 +475,11 @@ public class BlightGame extends SimpleApplication {
}
// Vollbild sicherstellen: GLFW ist hier bereits durch JME3 initialisiert.
// Problem: GLFW_AUTO_ICONIFY (default true) minimiert das Vollbild-Fenster sofort,
// wenn beim Start ein anderes Fenster (z.B. Editor) noch den Fokus hat.
// Der Editor minimiert sich inzwischen selbst vor dem Spielstart dieser Fix greift
// dennoch als Fallback und korrigiert außerdem einen falschen Monitor-Index.
// Problem: JME3 erstellt das Fenster sofort sichtbar. Cinnamon/Muffin (GLFW 3.5 nutzt
// _NET_WM_STATE_FULLSCREEN statt OverrideRedirect) schiebt das Fenster beim ersten
// Erscheinen um eine Panel-Höhe nach unten (z.B. Y+32), bevor der WM den State
// vollständig verarbeitet hat. glfwSetWindowMonitor() erzwingt einen Neuaufbau des
// Fullscreen-States und setzt die Position auf den Monitor-Origin zurück.
private void fixFullscreenMonitor() {
if (!(context instanceof LwjglWindow)) {
log.warn("[Grafik] Kein LwjglWindow-Kontext, Vollbild-Fix übersprungen");
@@ -526,22 +528,21 @@ public class BlightGame extends SimpleApplication {
}
}
if (currentMonitor == target) {
// Bereits korrekt im Vollbild auf dem richtigen Monitor kein Monitor-Wechsel,
// da glfwSetWindowMonitor sonst den OverrideRedirect-Zustand stören kann.
log.info("[Grafik] Fenster ist bereits Vollbild auf dem Ziel-Monitor nur Fokus setzen");
GLFW.glfwFocusWindow(win);
return;
}
// Falscher Monitor oder fensterbasierter Modus → Vollbild erzwingen
GLFWVidMode vm = GLFW.glfwGetVideoMode(target);
if (vm == null) {
log.warn("[Grafik] Kein VideoMode für Ziel-Monitor");
return;
}
log.info("[Grafik] Setze Vollbild: {}×{}@{}Hz (war: Monitor-Handle={})",
vm.width(), vm.height(), vm.refreshRate(), currentMonitor);
// Windowed → Fullscreen Toggle:
// JME3 erstellt das Fenster sofort sichtbar; Cinnamon setzt Y+32 (Panel-Offset)
// bevor _NET_WM_STATE_FULLSCREEN vollständig verarbeitet ist.
// Kurz in den Fenstermodus wechseln und zurück → WM verarbeitet den
// State neu und setzt Y korrekt auf Monitor-Origin.
log.info("[Grafik] Vollbild-Fix: Toggle Fenstermodus → Vollbild auf Monitor {} ({}×{}@{}Hz)",
target, vm.width(), vm.height(), vm.refreshRate());
GLFW.glfwSetWindowMonitor(win, 0L, awt.x, awt.y, vm.width(), vm.height(), 0);
GLFW.glfwWaitEventsTimeout(0.1);
GLFW.glfwSetWindowMonitor(win, target, 0, 0, vm.width(), vm.height(), vm.refreshRate());
GLFW.glfwFocusWindow(win);

View File

@@ -27,7 +27,8 @@ public class AnimationLibrary extends BaseAppState {
private static final Logger log = LoggerFactory.getLogger(AnimationLibrary.class);
private static final String[] ASSET_BASES = {
"blight-assets/src/main/resources",
"blight-assets/src/main/resources", // CWD = Projekt-Root (Editor-Subprocess)
"../blight-assets/src/main/resources", // CWD = blight-game/ (Direktstart)
"assets",
".",
};

View File

@@ -565,9 +565,12 @@ public class WorldScene extends BaseAppState {
private static final String[] MODEL_SAVE_ROOTS = {
"blight-assets/src/main/resources",
"blight-assets/src/main/resources", // CWD = Projekt-Root (Editor-Subprocess)
"../blight-assets/src/main/resources", // CWD = blight-game/ (Direktstart)
"blight-assets/bin/main",
"../blight-assets/bin/main",
"blight-assets/build/resources/main",
"../blight-assets/build/resources/main",
"assets",
};