Fehler bei Vollbild und NinePAtch behoben
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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",
|
||||
".",
|
||||
};
|
||||
|
||||
@@ -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",
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user