From 6cf933741f412990fcdcb27fe84cf8f184970a3f Mon Sep 17 00:00:00 2001 From: Wulian233 <1055917385@qq.com> Date: Mon, 18 Aug 2025 20:05:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E5=AE=9E=E9=99=85=E5=B1=8F?= =?UTF-8?q?=E5=B9=95=E5=88=86=E8=BE=A8=E7=8E=87=E6=B7=BB=E5=8A=A0=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E7=AA=97=E5=8F=A3=E5=88=86=E8=BE=A8=E7=8E=87=E9=80=89?= =?UTF-8?q?=E9=A1=B9=20(#4275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/versions/VersionSettingsPage.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index e3548ffef..96e89777d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -26,12 +26,14 @@ import javafx.beans.value.ChangeListener; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.geometry.Rectangle2D; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.control.Toggle; import javafx.scene.layout.*; import javafx.scene.text.Text; import javafx.stage.FileChooser; +import javafx.stage.Screen; import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.java.JavaManager; import org.jackhuang.hmcl.setting.*; @@ -394,14 +396,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag cboWindowsSize.setEditable(true); cboWindowsSize.setStyle("-fx-padding: 4 4 4 16"); cboWindowsSize.setPromptText("854x480"); - cboWindowsSize.getItems().addAll( - "854x480", - "1280x720", - "1600x900", - "1920x1080", - "2560x1440", - "3840x2160" - ); + cboWindowsSize.getItems().setAll(getSupportedResolutions()); chkFullscreen = new JFXCheckBox(); right.setRight(chkFullscreen); @@ -784,6 +779,28 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag FXUtils.limitSize(iconPickerItem.getImageView(), 32, 32); } + private static List getSupportedResolutions() { + int maxScreenWidth = 0; + int maxScreenHeight = 0; + + for (Screen screen : Screen.getScreens()) { + Rectangle2D bounds = screen.getBounds(); + int screenWidth = (int) (bounds.getWidth() * screen.getOutputScaleX()); + int screenHeight = (int) (bounds.getHeight() * screen.getOutputScaleY()); + + maxScreenWidth = Math.max(maxScreenWidth, screenWidth); + maxScreenHeight = Math.max(maxScreenHeight, screenHeight); + } + + List resolutions = new ArrayList<>(List.of("854x480", "1280x720", "1600x900")); + + if (maxScreenWidth >= 1920 && maxScreenHeight >= 1080) resolutions.add("1920x1080"); + if (maxScreenWidth >= 2560 && maxScreenHeight >= 1440) resolutions.add("2560x1440"); + if (maxScreenWidth >= 3840 && maxScreenHeight >= 2160) resolutions.add("3840x2160"); + + return resolutions; + } + @Override public ReadOnlyObjectProperty stateProperty() { return state.getReadOnlyProperty();