diff --git a/Platform/Apple/tools/jace/src/main/java/jace/EmulatorUILogic.java b/Platform/Apple/tools/jace/src/main/java/jace/EmulatorUILogic.java index 7872f39b..d108f9fb 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/EmulatorUILogic.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/EmulatorUILogic.java @@ -275,6 +275,7 @@ public class EmulatorUILogic implements Reconfigurable { Stage stage = LawlessLegends.getApplication().primaryStage; stage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); stage.setFullScreen(!stage.isFullScreen()); + LawlessLegends.getApplication().controller.setAspectRatioEnabled(stage.isFullScreen()); }); } @@ -406,37 +407,41 @@ public class EmulatorUILogic implements Reconfigurable { || LawlessLegends.getApplication().primaryStage == null) { return; } + Stage stage = LawlessLegends.getApplication().primaryStage; size++; if (size > 3) { size = 0; } - int width = 0, height = 0; - switch (size) { - case 0: // 1x - width = 560; - height = 384; - break; - case 1: // 1.5x - width = 840; - height = 576; - break; - case 2: // 2x - width = 560 * 2; - height = 384 * 2; - break; - case 3: // 3x (retina) 2880x1800 - width = 560 * 3; - height = 384 * 3; - break; - default: // 2x - width = 560 * 2; - height = 384 * 2; + if (stage.isFullScreen()) { + LawlessLegends.getApplication().controller.toggleAspectRatio(); + } else { + int width = 0, height = 0; + switch (size) { + case 0: // 1x + width = 560; + height = 384; + break; + case 1: // 1.5x + width = 840; + height = 576; + break; + case 2: // 2x + width = 560 * 2; + height = 384 * 2; + break; + case 3: // 3x (retina) 2880x1800 + width = 560 * 3; + height = 384 * 3; + break; + default: // 2x + width = 560 * 2; + height = 384 * 2; + } + double vgap = stage.getScene().getY(); + double hgap = stage.getScene().getX(); + stage.setWidth(hgap * 2 + width); + stage.setHeight(vgap + height); } - Stage stage = LawlessLegends.getApplication().primaryStage; - double vgap = stage.getScene().getY(); - double hgap = stage.getScene().getX(); - stage.setWidth(hgap * 2 + width); - stage.setHeight(vgap + height); }); } diff --git a/Platform/Apple/tools/jace/src/main/java/jace/JaceUIController.java b/Platform/Apple/tools/jace/src/main/java/jace/JaceUIController.java index 812e6979..177c4375 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/JaceUIController.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/JaceUIController.java @@ -29,6 +29,11 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import javafx.application.Platform; +import javafx.beans.binding.DoubleBinding; +import javafx.beans.binding.NumberBinding; +import javafx.beans.binding.When; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.geometry.Insets; @@ -71,13 +76,19 @@ public class JaceUIController { Computer computer; + private BooleanProperty aspectRatioCorrectionEnabled = new SimpleBooleanProperty(false); + @FXML void initialize() { assert rootPane != null : "fx:id=\"rootPane\" was not injected: check your FXML file 'JaceUI.fxml'."; assert stackPane != null : "fx:id=\"stackPane\" was not injected: check your FXML file 'JaceUI.fxml'."; assert notificationBox != null : "fx:id=\"notificationBox\" was not injected: check your FXML file 'JaceUI.fxml'."; assert appleScreen != null : "fx:id=\"appleScreen\" was not injected: check your FXML file 'JaceUI.fxml'."; - appleScreen.fitWidthProperty().bind(rootPane.widthProperty()); + NumberBinding aspectCorrectedWidth = rootPane.heightProperty().multiply(3.0).divide(2.0); + NumberBinding width = new When( + aspectRatioCorrectionEnabled.and(aspectCorrectedWidth.lessThan(rootPane.widthProperty())) + ).then(aspectCorrectedWidth).otherwise(rootPane.widthProperty()); + appleScreen.fitWidthProperty().bind(width); appleScreen.fitHeightProperty().bind(rootPane.heightProperty()); appleScreen.setVisible(false); rootPane.setOnDragEntered(this::processDragEnteredEvent); @@ -85,6 +96,14 @@ public class JaceUIController { rootPane.setBackground(new Background(new BackgroundFill(Color.BLACK, null, null))); } + public void toggleAspectRatio() { + setAspectRatioEnabled(aspectRatioCorrectionEnabled.not().get()); + } + + public void setAspectRatioEnabled(boolean enabled) { + aspectRatioCorrectionEnabled.set(enabled); + } + public void connectComputer(Computer computer, Stage primaryStage) { if (computer == null) { return;