From dbb63e9faa05b970795b47576c51fd63550a8fd0 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 17 Apr 2026 21:24:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20ComponentSublist=20?= =?UTF-8?q?=E5=86=85=E9=83=A8=E5=85=83=E7=B4=A0=E7=9A=84=E7=BC=A9=E8=BF=9B?= =?UTF-8?q?=20(#5956)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/construct/ComponentSublistWrapper.java | 32 +++++++++++++------ .../hmcl/ui/construct/MultiFileItem.java | 3 +- .../versions/AdvancedVersionSettingPage.java | 3 -- HMCL/src/main/resources/assets/css/root.css | 18 ++++++++++- .../resources/assets/lang/I18N.properties | 4 --- .../resources/assets/lang/I18N_ar.properties | 4 --- .../resources/assets/lang/I18N_es.properties | 3 -- .../resources/assets/lang/I18N_ja.properties | 1 - .../resources/assets/lang/I18N_lzh.properties | 1 - .../resources/assets/lang/I18N_ru.properties | 4 --- .../resources/assets/lang/I18N_uk.properties | 3 -- .../resources/assets/lang/I18N_zh.properties | 1 - .../assets/lang/I18N_zh_CN.properties | 1 - 13 files changed, 42 insertions(+), 36 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java index 1d4dce53c1..f9e2599809 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentSublistWrapper.java @@ -19,6 +19,8 @@ package org.jackhuang.hmcl.ui.construct; import javafx.animation.*; import javafx.application.Platform; +import javafx.beans.InvalidationListener; +import javafx.css.PseudoClass; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; @@ -28,6 +30,7 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; +import javafx.scene.shape.Rectangle; import javafx.util.Duration; import org.jackhuang.hmcl.theme.Themes; import org.jackhuang.hmcl.ui.FXUtils; @@ -43,8 +46,6 @@ final class ComponentSublistWrapper extends VBox implements NoPaddingComponent { private boolean expanded = false; ComponentSublistWrapper(ComponentSublist sublist) { - boolean noPadding = !sublist.hasComponentPadding(); - this.getStyleClass().add("options-sublist-wrapper"); Node expandIcon = SVG.KEYBOARD_ARROW_DOWN.createIcon(20); @@ -104,12 +105,26 @@ final class ComponentSublistWrapper extends VBox implements NoPaddingComponent { if (container == null) { this.container = new VBox(); - - if (!noPadding) { - container.setPadding(new Insets(8, 16, 10, 16)); - } + this.container.getStyleClass().add("container"); FXUtils.setLimitHeight(container, 0); - FXUtils.setOverflowHidden(container); + + Rectangle rectangle = FXUtils.setOverflowHidden(container); + rectangle.getStyleClass().add("overflow-hidden"); + + var last = PseudoClass.getPseudoClass("last"); + + InvalidationListener updateArc = o -> { + if (ComponentSublistWrapper.this.getPseudoClassStates().contains(last)) { + rectangle.setArcHeight(4); + rectangle.setArcWidth(4); + } else { + rectangle.setArcHeight(0); + rectangle.setArcWidth(0); + } + }; + updateArc.invalidated(null); + ComponentSublistWrapper.this.getPseudoClassStates().addListener(updateArc); + container.getChildren().setAll(sublist); ComponentSublistWrapper.this.getChildren().add(container); @@ -120,8 +135,7 @@ final class ComponentSublistWrapper extends VBox implements NoPaddingComponent { } Platform.runLater(() -> { - // FIXME: ComponentSubList without padding must have a 4 pixel padding for displaying a border radius. - double contentHeight = expanded ? (sublist.prefHeight(sublist.getWidth()) + (noPadding ? 4 : 8 + 10)) : 0; + double contentHeight = expanded ? sublist.prefHeight(sublist.getWidth()) : 0; double targetRotate = expanded ? -180 : 0; if (AnimationUtils.isAnimationEnabled()) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java index 5f89da798b..ea3ae80631 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java @@ -55,7 +55,8 @@ public final class MultiFileItem extends VBox { @SuppressWarnings("unchecked") public MultiFileItem() { - setPadding(new Insets(0, 0, 10, 0)); + this.getStyleClass().add("multi-file-item"); + setSpacing(8); group.selectedToggleProperty().addListener((a, b, newValue) -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/AdvancedVersionSettingPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/AdvancedVersionSettingPage.java index 8c11c68ba2..03ac1daec9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/AdvancedVersionSettingPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/AdvancedVersionSettingPage.java @@ -188,9 +188,6 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor new MultiFileItem.Option<>(i18n("settings.advanced.natives_directory.default"), NativesDirectoryType.VERSION_FOLDER), nativesDirCustomOption )); - HintPane nativesDirHint = new HintPane(MessageDialogPane.MessageType.WARNING); - nativesDirHint.setText(i18n("settings.advanced.natives_directory.hint")); - nativesDirItem.getChildren().add(nativesDirHint); graphicsBackendPane = new LineSelectButton<>(); graphicsBackendPane.setTitle(i18n("settings.advanced.graphics_backend")); diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index 625e483f1f..24c401df2a 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -1093,8 +1093,12 @@ -fx-background-color: -monet-error-container; } +.multi-file-item { + -fx-padding: 10 0 10 0; +} + .options-sublist { - -fx-background-color: -monet-surface; + -fx-background-color: -monet-surface-container; } .options-list-item { @@ -1105,6 +1109,14 @@ -fx-font-size: 12; } +.options-sublist .options-list-item { + -fx-background-color: -monet-surface-container; +} + +.options-sublist .multi-file-item { + -fx-padding: 10 10 10 10; +} + .options-list-item .svg { -fx-fill: -monet-on-surface; -fx-border-color: -monet-outline-variant; @@ -1140,6 +1152,10 @@ -fx-border-width: 0; } +.options-sublist-wrapper > .container { + -fx-background-color: -monet-surface-container; +} + .options-sublist-wrapper .expand-icon .svg { -fx-fill: -monet-on-surface-variant; } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 6c12a0ffb3..571405a186 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1365,10 +1365,6 @@ settings.advanced.natives_directory.choose=Choose the location of the desired na settings.advanced.natives_directory.custom=Custom settings.advanced.natives_directory.default=Default settings.advanced.natives_directory.default.version_id= -settings.advanced.natives_directory.hint=This option is intended only for users of Apple silicon or other not officially supported platforms. Please do not edit this option unless you know what you are doing.\n\ - \n\ - Before proceeding, please make sure all libraries (e.g. lwjgl.dll, libopenal.so) are provided in your desired directory.\n\ - Note: It is recommended to use a fully English-letters path for the specified local library file. Otherwise it may lead to game launch failure. settings.advanced.no_jvm_args=Do not add default JVM arguments settings.advanced.no_optimizing_jvm_args=Do not add default JVM optimization arguments settings.advanced.precall_command=Pre-launch Command diff --git a/HMCL/src/main/resources/assets/lang/I18N_ar.properties b/HMCL/src/main/resources/assets/lang/I18N_ar.properties index f82e27343d..193c07e7c5 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ar.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ar.properties @@ -1341,10 +1341,6 @@ settings.advanced.natives_directory.choose=اختر موقع المكتبة ال settings.advanced.natives_directory.custom=مخصص settings.advanced.natives_directory.default=افتراضي settings.advanced.natives_directory.default.version_id=<اسم النسخة> -settings.advanced.natives_directory.hint=هذا الخيار مخصص فقط لمستخدمي Apple silicon والمنصات غير المدعومة رسمياً. يُرجى عدم تعديل هذا الخيار إلا إذا كنت تعرف ما تفعله.\n\ - \n\ - قبل المتابعة، يُرجى التأكد من توفر جميع المكتبات (مثل lwjgl.dll وlibopenal.so) في المجلد المحدد.\n\ - ملاحظة: يُنصح باستخدام مسار يحتوي على حروف إنجليزية فقط لملف المكتبة المحلية المحدد، وإلا قد يتسبب ذلك في فشل تشغيل اللعبة. settings.advanced.no_jvm_args=عدم إضافة وسيطات JVM الافتراضية settings.advanced.no_optimizing_jvm_args=عدم إضافة وسيطات تحسين JVM الافتراضية settings.advanced.precall_command=أمر ما قبل التشغيل diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index b502a5121b..2fb9cbacdc 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -1251,9 +1251,6 @@ settings.advanced.natives_directory.choose=Elija la ubicación de la biblioteca settings.advanced.natives_directory.custom=Personalizado settings.advanced.natives_directory.default=Por defecto settings.advanced.natives_directory.default.version_id= -settings.advanced.natives_directory.hint=Esta opción está pensada sólo para usuarios de chips de Apple u otras plataformas no soportadas oficialmente. Por favor, no modifique esta opción a menos que sepa lo que está haciendo.\n\ - \n\ - Antes de proceder, por favor, asegúrese de que todas las bibliotecas (por ejemplo, lwjgl.dll, libopenal.so) se proporcionan en su directorio deseado. settings.advanced.no_jvm_args=No añadir argumentos JVM por defecto settings.advanced.no_optimizing_jvm_args=No añadir argumentos de optimización de JVM settings.advanced.precall_command=Comando pre-lanzamiento: diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index bd299ee5ac..30f847798b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -778,7 +778,6 @@ settings.advanced.natives_directory=ネイティブライブラリパス(例 settings.advanced.natives_directory.choose=ネイティブライブラリパスを選択してください settings.advanced.natives_directory.custom=Custom(ゲームが実行時に必要とするネイティブライブラリを提供する必要があります) settings.advanced.natives_directory.default=Standard(ネイティブライブラリは当社が提供します) -settings.advanced.natives_directory.hint=このオプションは、Appleシリコンまたはその他の公式にサポートされていないプラットフォーム/アーキテクチャでゲームをプレイする場合にのみ使用されます。\nこのオプションを変更する意味がわからない場合は、このオプションを変更しないことをお勧めします。、またはゲームが起動しません。\nこのオプションを変更する必要がある場合は、ゲームを実行するために必要なすべてのネイティブライブラリをカスタムネイティブディレクトリの下に配置する必要があります。lwjgl.dll(liblwjgl.so)、openal.dll(libopenal.so)。HMCLは、不足しているネイティブライブラリを提供しません。 settings.advanced.no_jvm_args=デフォルトのJVM引数なし settings.advanced.precall_command=起動前コマンド settings.advanced.precall_command.prompt=ゲーム開始前に実行されます diff --git a/HMCL/src/main/resources/assets/lang/I18N_lzh.properties b/HMCL/src/main/resources/assets/lang/I18N_lzh.properties index a652f5209e..7431959f3e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_lzh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_lzh.properties @@ -1066,7 +1066,6 @@ settings.advanced.natives_directory.choose=擇府庫之徑 settings.advanced.natives_directory.custom=自定 (賴君所供之府庫也) settings.advanced.natives_directory.default=本 (賴啟者所供之府庫) settings.advanced.natives_directory.default.version_id=<例名> -settings.advanced.natives_directory.hint=供於械網之弗見適者,有如蘋矽,以自定府庫也。微其之知,毋改是,改則或弗啟。\n\n將改,而宜錄府庫於是,蓋 lwjgl.dll (liblwjgl.so)、openal.dll (libopenal.so) 之類。啟者弗補是府庫也!\n\n誡:府庫之徑,但宜書以英文、數、下綫,否則或弗啟。 settings.advanced.no_jvm_args=無添爪哇虛機之本通弦 settings.advanced.precall_command=令於戲前 settings.advanced.precall_command.prompt=將前戲啟而行 diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index fefd634e1b..fddbb42bef 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -1242,10 +1242,6 @@ settings.advanced.natives_directory.choose=Выберите расоложени settings.advanced.natives_directory.custom=Пользовательское settings.advanced.natives_directory.default=По умолчанию settings.advanced.natives_directory.default.version_id=<Название сборки> -settings.advanced.natives_directory.hint=Параметр предназначен только для пользователей Apple silicon или других официально не поддерживаемых платформ. Не изменяйте, если не знаете что делаете.\n\ - \n\ - Прежде чем продолжить, убедитесь что все библиотеки (например, lwjgl.dll, libopenal.so) находятся в нужной папке.\n\ - Примечание: Рекомендуется использовать полностью английские пути для указанных файлов локальных библиотек, иначе игра может не запуститься. settings.advanced.no_jvm_args=Не добавлять аргументы JVM по умолчанию settings.advanced.precall_command=Команда перед запуском settings.advanced.precall_command.prompt=Команды, которые необходимо выполнить перед запуском игры diff --git a/HMCL/src/main/resources/assets/lang/I18N_uk.properties b/HMCL/src/main/resources/assets/lang/I18N_uk.properties index 9920651da2..f4ca920b67 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_uk.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_uk.properties @@ -1190,9 +1190,6 @@ settings.advanced.natives_directory.choose=Виберіть місце розт settings.advanced.natives_directory.custom=Власний settings.advanced.natives_directory.default=Типово settings.advanced.natives_directory.default.version_id=<Назва екземпляра> -settings.advanced.natives_directory.hint=Ця опція призначена лише для користувачів Apple silicon або інших неофіційно підтримуваних платформ. Не редагуйте цю опцію, якщо ви не знаєте, що робите. \n\ - Перед продовженням переконайтеся, що всі бібліотеки (наприклад, lwjgl.dll, libopenal.so) надано у вашому бажаному каталозі. \n\ - Примітка: Рекомендується використовувати повністю англійські літери для вказаного локального файлу бібліотеки. Інакше це може призвести до невдалого запуску гри. settings.advanced.no_jvm_args=Не додавати типові аргументи JVM settings.advanced.precall_command=Команда перед запуском settings.advanced.precall_command.prompt=Команди для виконання перед запуском гри diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 69234dc765..1e19f00200 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -1155,7 +1155,6 @@ settings.advanced.natives_directory.choose=選取本機庫路徑 settings.advanced.natives_directory.custom=自訂 (由你提供遊戲需要的本機庫) settings.advanced.natives_directory.default=預設 (由啟動器提供遊戲本機庫) settings.advanced.natives_directory.default.version_id=<實例名稱> -settings.advanced.natives_directory.hint=本選項提供給 Apple Silicon 等未受遊戲官方支援的平台來自訂遊戲本機庫。如果你不知道本選項的含義,請你不要修改本選項,否則會導致遊戲無法啟動。\n\n如果你要修改本選項,你需要保證自訂目錄下有遊戲所需的本機庫檔案,如 lwjgl.dll (liblwjgl.so), openal.dll (libopenal.so) 等檔案。啟動器不會幫你補全缺少的本機庫檔案。\n\n注意:建議指定的本機庫檔案路徑使用全英文字元,否則可能導致遊戲啟動失敗。 settings.advanced.no_jvm_args=不新增預設的 Java 虛擬機參數 settings.advanced.no_optimizing_jvm_args=不自動新增 Java 虛擬機最佳化參數 settings.advanced.precall_command=遊戲啟動前執行指令 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 46827e9ae1..790fbd93c5 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -1160,7 +1160,6 @@ settings.advanced.natives_directory.choose=选择本地库路径 settings.advanced.natives_directory.custom=自定义 (由你提供游戏需要的本地库) settings.advanced.natives_directory.default=默认 (由启动器提供游戏本地库) settings.advanced.natives_directory.default.version_id=<实例名称> -settings.advanced.natives_directory.hint=本选项提供给 Apple Silicon 等未受游戏官方支持的平台来自定义游戏本地库。如果你不知道本选项的含义,请不要修改本选项,否则会导致游戏无法启动!\n\n如果你要修改本选项,你需要保证自定义文件夹下有游戏所需的本地库文件,如 lwjgl.dll (liblwjgl.so)、openal.dll (libopenal.so) 等文件。启动器不会帮你补全缺少的本地库文件!\n\n注意:指定的本地库文件路径建议只包含英文大小写字母、数字和下划线,否则可能会导致启动游戏失败。 settings.advanced.no_jvm_args=不添加默认的 Java 虚拟机参数 settings.advanced.no_optimizing_jvm_args=不自动添加 Java 虚拟机优化参数 settings.advanced.precall_command=游戏启动前执行命令