From ff33ea0509b7f24fe87436d125694de55f520fe6 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Sat, 16 May 2026 12:56:12 +0800 Subject: [PATCH 1/5] qwq --- .../java/org/jackhuang/hmcl/ui/LogWindow.java | 17 +++++++++++++++-- .../main/java/org/jackhuang/hmcl/ui/SVG.java | 1 + .../main/resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../resources/assets/lang/I18N_zh_CN.properties | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 5697ecb3ee5..1b30594bf6f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -52,7 +52,10 @@ import java.nio.file.Paths; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.EnumMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; import java.util.stream.Collectors; import static org.jackhuang.hmcl.setting.ConfigHolder.config; @@ -162,6 +165,8 @@ private final class LogWindowImpl extends Control { private final BooleanProperty autoScroll = new SimpleBooleanProperty(); private final StringProperty[] buttonText = new StringProperty[LEVELS.length]; private final BooleanProperty[] showLevel = new BooleanProperty[LEVELS.length]; + private final JFXButton btnAlwaysOnTop = FXUtils.newToggleButton4(SVG.KEEP, 20); + private final Stage stage = LogWindow.this; private final JFXComboBox cboLines = new JFXComboBox<>(); private final StackPane stackPane = new StackPane(); @@ -177,6 +182,8 @@ private final class LogWindowImpl extends Control { showLevel[i] = new SimpleBooleanProperty(true); } + btnAlwaysOnTop.setOnAction(e -> stage.setAlwaysOnTop(!stage.isAlwaysOnTop())); + cboLines.getItems().setAll(500, 2000, 5000, 10000); cboLines.setValue(Log.getLogLines()); cboLines.getSelectionModel().selectedItemProperty().addListener((a, b, newValue) -> config().setLogLines(newValue)); @@ -280,7 +287,13 @@ private static final class LogWindowSkin extends SkinBase { hBox.setAlignment(Pos.CENTER_LEFT); Label label = new Label(i18n("logwindow.show_lines")); - hBox.getChildren().setAll(label, control.cboLines); + + FXUtils.installFastTooltip(control.btnAlwaysOnTop, i18n("logwindow.always_on_top")); + control.stage.alwaysOnTopProperty().addListener((observable, oldValue, newValue) -> { + if (newValue) control.btnAlwaysOnTop.setRotate(45); + else control.btnAlwaysOnTop.setRotate(0.0); + }); + hBox.getChildren().setAll(control.btnAlwaysOnTop, label, control.cboLines); borderPane.setLeft(hBox); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java index 13a67943c16..90dbb263ff7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java @@ -78,6 +78,7 @@ public enum SVG { HOST("M4 21Q3.175 21 2.5875 20.4125T2 19V5Q2 4.175 2.5875 3.5875T4 3H9Q9.825 3 10.4125 3.5875T11 5V19Q11 19.825 10.4125 20.4125T9 21H4ZM15 21Q14.175 21 13.5875 20.4125T13 19V5Q13 4.175 13.5875 3.5875T15 3H20Q20.825 3 21.4125 3.5875T22 5V19Q22 19.825 21.4125 20.4125T20 21H15ZM4 19H9V5H4V19ZM15 19H20V5H15V19ZM5 15H8V13H5V15ZM16 15H19V13H16V15ZM5 12H8V10H5V12ZM16 12H19V10H16V12ZM5 9H8V7H5V9ZM16 9H19V7H16V9ZM4 19H9 4ZM15 19H20 15Z"), INFO("M11 17H13V11H11V17ZM12 9Q12.425 9 12.7125 8.7125T13 8Q13 7.575 12.7125 7.2875T12 7Q11.575 7 11.2875 7.2875T11 8Q11 8.425 11.2875 8.7125T12 9ZM12 22Q9.925 22 8.1 21.2125T4.925 19.075Q3.575 17.725 2.7875 15.9T2 12Q2 9.925 2.7875 8.1T4.925 4.925Q6.275 3.575 8.1 2.7875T12 2Q14.075 2 15.9 2.7875T19.075 4.925Q20.425 6.275 21.2125 8.1T22 12Q22 14.075 21.2125 15.9T19.075 19.075Q17.725 20.425 15.9 21.2125T12 22ZM12 20Q15.35 20 17.675 17.675T20 12Q20 8.65 17.675 6.325T12 4Q8.65 4 6.325 6.325T4 12Q4 15.35 6.325 17.675T12 20ZM12 12Z"), INFO_FILL("M12 22q2.075-0 3.9-.7875t3.175-2.1375q1.35-1.35 2.1375-3.175T22 12q-0-2.075-.7875-3.9T19.075 4.925q-1.35-1.35-3.175-2.1375T12 2q-2.075 0-3.9.7875T4.925 4.925Q3.575 6.275 2.7875 8.1T2 12q0 2.075.7875 3.9T4.925 19.075q1.35 1.35 3.175 2.1375T12 22ZM12 9q-.425 0-.7125-.2875T11 8t.2875-.7125T12 7q.425-0 .7125.2875T13 8t-.2875.7125T12 9Zm-1 8V11h2v6H11Z"), + KEEP("m16 12l2 2v2h-5v6l-1 1l-1-1v-6H6v-2l2-2V5H7V3h10v2h-1zm-7.15 2h6.3L14 12.85V5h-4v7.85zM12 14"), KEYBOARD_ARROW_DOWN("M12 15.4 6 9.4 7.4 8 12 12.6 16.6 8 18 9.4 12 15.4Z"), KEYBOARD_ARROW_UP("M12 10.8 7.4 15.4 6 14 12 8 18 14 16.6 15.4 12 10.8Z"), LANDSCAPE("M1 18l6-8 4.5 6H19L14 9.35l-2.5 3.3L10.25 11 14 6l9 12H1Zm13.025-2ZM5 16H9L7 13.325 5 16ZH9 5Z"), diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 731eaee788f..51b6645eaa9 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -878,6 +878,7 @@ libraries.download=Downloading Libraries login.empty_username=You have not set your username yet! login.enter_password=Please enter your password. +logwindow.always_on_top=Always On Top logwindow.show_lines=Show Row Number logwindow.terminate_game=Kill Game Process logwindow.title=Log diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 90f2157ece6..be111537d55 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -684,6 +684,7 @@ libraries.download=下載依賴庫 login.empty_username=你還未設定使用者名稱! login.enter_password=請輸入你的密碼 +logwindow.always_on_top=置頂窗口 logwindow.show_lines=顯示行數 logwindow.terminate_game=結束遊戲處理程式 logwindow.title=日誌 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 976a48046c6..33e7b24abf7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -689,6 +689,7 @@ libraries.download=下载依赖库 login.empty_username=你还未设置用户名! login.enter_password=请输入你的密码 +logwindow.always_on_top=置顶窗口 logwindow.show_lines=显示行数 logwindow.terminate_game=结束游戏进程 logwindow.title=日志 From e23613bda8a83521b3feb7ff2857bda08b935b82 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Sat, 16 May 2026 15:14:42 +0800 Subject: [PATCH 2/5] Update HMCL/src/main/resources/assets/lang/I18N_zh.properties Co-authored-by: 3gf8jv4dv <3gf8jv4dv@gmail.com> --- HMCL/src/main/resources/assets/lang/I18N_zh.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index be111537d55..2c7971d4b53 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -684,7 +684,7 @@ libraries.download=下載依賴庫 login.empty_username=你還未設定使用者名稱! login.enter_password=請輸入你的密碼 -logwindow.always_on_top=置頂窗口 +logwindow.always_on_top=置頂視窗 logwindow.show_lines=顯示行數 logwindow.terminate_game=結束遊戲處理程式 logwindow.title=日誌 From 9d0b63bd01f5d436ded04ca509c847c7e46671be Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Sat, 16 May 2026 15:45:36 +0800 Subject: [PATCH 3/5] qwq --- HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 1b30594bf6f..396965bfcdb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -290,8 +290,13 @@ private static final class LogWindowSkin extends SkinBase { FXUtils.installFastTooltip(control.btnAlwaysOnTop, i18n("logwindow.always_on_top")); control.stage.alwaysOnTopProperty().addListener((observable, oldValue, newValue) -> { - if (newValue) control.btnAlwaysOnTop.setRotate(45); - else control.btnAlwaysOnTop.setRotate(0.0); + if (newValue) { + control.btnAlwaysOnTop.setRotate(45); + control.btnAlwaysOnTop.setStyle("-fx-background-color: -monet-secondary-container-transparent-80;"); + } else { + control.btnAlwaysOnTop.setRotate(0.0); + control.btnAlwaysOnTop.setStyle(""); + } }); hBox.getChildren().setAll(control.btnAlwaysOnTop, label, control.cboLines); From 0d24159fa5e81e425cf9c0cf794b1ce6f739db99 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Tue, 19 May 2026 21:50:20 +0800 Subject: [PATCH 4/5] qwq --- .../src/main/java/org/jackhuang/hmcl/ui/LogWindow.java | 10 +++------- HMCL/src/main/resources/assets/css/root.css | 10 ++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 396965bfcdb..467df6eb4b9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -67,6 +67,7 @@ * @author huangyuhui */ public final class LogWindow extends Stage { + private static final PseudoClass SELECTED = PseudoClass.getPseudoClass("selected"); private static final Log4jLevel[] LEVELS = {Log4jLevel.FATAL, Log4jLevel.ERROR, Log4jLevel.WARN, Log4jLevel.INFO, Log4jLevel.DEBUG}; @@ -183,6 +184,7 @@ private final class LogWindowImpl extends Control { } btnAlwaysOnTop.setOnAction(e -> stage.setAlwaysOnTop(!stage.isAlwaysOnTop())); + btnAlwaysOnTop.getStyleClass().add("log-window-always-on-top-button"); cboLines.getItems().setAll(500, 2000, 5000, 10000); cboLines.setValue(Log.getLogLines()); @@ -290,13 +292,7 @@ private static final class LogWindowSkin extends SkinBase { FXUtils.installFastTooltip(control.btnAlwaysOnTop, i18n("logwindow.always_on_top")); control.stage.alwaysOnTopProperty().addListener((observable, oldValue, newValue) -> { - if (newValue) { - control.btnAlwaysOnTop.setRotate(45); - control.btnAlwaysOnTop.setStyle("-fx-background-color: -monet-secondary-container-transparent-80;"); - } else { - control.btnAlwaysOnTop.setRotate(0.0); - control.btnAlwaysOnTop.setStyle(""); - } + control.btnAlwaysOnTop.pseudoClassStateChanged(SELECTED, newValue); }); hBox.getChildren().setAll(control.btnAlwaysOnTop, label, control.cboLines); diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index 3dfd03a84c5..81bb3d0cf50 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -1457,6 +1457,16 @@ -fx-background-color: -fixed-log-selected; } +.log-window-always-on-top-button { + -fx-rotate: 0.0; +} + +.log-window-always-on-top-button:selected { + -fx-background-color: -monet-secondary-container-transparent-80; + -fx-rotate: 45.0; +} + + /******************************************************************************* * * * JFX Spinner * From fa9c23396065d3ba272354a757d511707e3d85c8 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Tue, 19 May 2026 21:52:19 +0800 Subject: [PATCH 5/5] qwq --- HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java | 2 +- HMCL/src/main/resources/assets/css/root.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 467df6eb4b9..2640f138cd4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -184,7 +184,7 @@ private final class LogWindowImpl extends Control { } btnAlwaysOnTop.setOnAction(e -> stage.setAlwaysOnTop(!stage.isAlwaysOnTop())); - btnAlwaysOnTop.getStyleClass().add("log-window-always-on-top-button"); + btnAlwaysOnTop.getStyleClass().add("always-on-top-button"); cboLines.getItems().setAll(500, 2000, 5000, 10000); cboLines.setValue(Log.getLogLines()); diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index 81bb3d0cf50..7440c326db1 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -1457,11 +1457,11 @@ -fx-background-color: -fixed-log-selected; } -.log-window-always-on-top-button { +.log-window .always-on-top-button { -fx-rotate: 0.0; } -.log-window-always-on-top-button:selected { +.log-window .always-on-top-button:selected { -fx-background-color: -monet-secondary-container-transparent-80; -fx-rotate: 45.0; }