diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 5a4fe371d..9975f47d2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -61,7 +61,6 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import static org.jackhuang.hmcl.setting.ConfigHolder.*; -import static org.jackhuang.hmcl.ui.FXUtils.newBuiltinImage; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; public final class Controllers { @@ -262,7 +261,7 @@ public final class Controllers { decorator.getDecorator().prefHeightProperty().bind(scene.heightProperty()); scene.getStylesheets().setAll(Theme.getTheme().getStylesheets(config().getLauncherFontFamily())); - stage.getIcons().add(newBuiltinImage("/assets/img/icon.png")); + FXUtils.setIcon(stage); stage.setTitle(Metadata.FULL_TITLE); stage.initStyle(StageStyle.TRANSPARENT); stage.setScene(scene); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java index cb8936947..a3f85c619 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java @@ -30,7 +30,6 @@ import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.countly.CrashReport; import org.jackhuang.hmcl.upgrade.UpdateChecker; -import static org.jackhuang.hmcl.ui.FXUtils.newBuiltinImage; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; /** @@ -70,7 +69,7 @@ public class CrashWindow extends Stage { Scene scene = new Scene(pane, 800, 480); setScene(scene); - getIcons().add(newBuiltinImage("/assets/img/icon.png")); + FXUtils.setIcon(this); setTitle(i18n("message.error")); setOnCloseRequest(e -> System.exit(1)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 1db2b3b23..ab818bfeb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -43,6 +43,7 @@ import javafx.scene.layout.StackPane; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.scene.text.TextFlow; +import javafx.stage.Stage; import javafx.util.Callback; import javafx.util.Duration; import javafx.util.StringConverter; @@ -676,6 +677,16 @@ public final class FXUtils { comboBox.getSelectionModel().selectedIndexProperty().removeListener(listener); } + public static void setIcon(Stage stage) { + String icon; + if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { + icon = "/assets/img/icon.png"; + } else { + icon = "/assets/img/icon@4x.png"; + } + stage.getIcons().add(newBuiltinImage(icon)); + } + /** * Suppress IllegalArgumentException since the url is supposed to be correct definitely. * @@ -769,8 +780,8 @@ public final class FXUtils { Task.runAsync(() -> { Path newPath = Files.createTempFile("hmcl-net-resource-cache-", ".cache"); try ( // Make sure the file is released from JVM before we put the path into remoteImageCache. - OutputStream outputStream = Files.newOutputStream(newPath); - PNGWriter writer = new PNGWriter(outputStream, PNGType.RGBA, PNGWriter.DEFAULT_COMPRESS_LEVEL) + OutputStream outputStream = Files.newOutputStream(newPath); + PNGWriter writer = new PNGWriter(outputStream, PNGType.RGBA, PNGWriter.DEFAULT_COMPRESS_LEVEL) ) { writer.write(PNGJavaFXUtils.asArgbImage(image)); } catch (IOException e) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java index f7946995e..7adea92a9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java @@ -66,7 +66,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import static org.jackhuang.hmcl.setting.ConfigHolder.config; -import static org.jackhuang.hmcl.ui.FXUtils.newBuiltinImage; import static org.jackhuang.hmcl.ui.FXUtils.runInFX; import static org.jackhuang.hmcl.util.Logging.LOG; import static org.jackhuang.hmcl.util.Pair.pair; @@ -116,7 +115,7 @@ public class GameCrashWindow extends Stage { setScene(new Scene(view, 800, 480)); getScene().getStylesheets().addAll(Theme.getTheme().getStylesheets(config().getLauncherFontFamily())); setTitle(i18n("game.crash.title")); - getIcons().add(newBuiltinImage("/assets/img/icon.png")); + FXUtils.setIcon(this); analyzeCrashReport(); } 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 798e25d83..694e700fc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -60,7 +60,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import static org.jackhuang.hmcl.setting.ConfigHolder.config; -import static org.jackhuang.hmcl.ui.FXUtils.newBuiltinImage; import static org.jackhuang.hmcl.util.Lang.thread; import static org.jackhuang.hmcl.util.Logging.LOG; import static org.jackhuang.hmcl.util.StringUtils.parseEscapeSequence; @@ -98,7 +97,7 @@ public final class LogWindow extends Stage { setScene(new Scene(impl, 800, 480)); getScene().getStylesheets().addAll(Theme.getTheme().getStylesheets(config().getLauncherFontFamily())); setTitle(i18n("logwindow.title")); - getIcons().add(newBuiltinImage("/assets/img/icon.png")); + FXUtils.setIcon(this); levelShownMap.values().forEach(property -> property.addListener((a, b, newValue) -> shakeLogs())); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/WebStage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/WebStage.java index 32a413407..1b57ca0aa 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/WebStage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/WebStage.java @@ -29,7 +29,6 @@ import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.setting.Theme; import static org.jackhuang.hmcl.setting.ConfigHolder.config; -import static org.jackhuang.hmcl.ui.FXUtils.newBuiltinImage; public class WebStage extends Stage { protected final StackPane pane = new StackPane(); @@ -44,7 +43,7 @@ public class WebStage extends Stage { public WebStage(int width, int height) { setScene(new Scene(pane, width, height)); getScene().getStylesheets().addAll(Theme.getTheme().getStylesheets(config().getLauncherFontFamily())); - getIcons().add(newBuiltinImage("/assets/img/icon.png")); + FXUtils.setIcon(this); webView.getEngine().setUserDataDirectory(Metadata.HMCL_DIRECTORY.toFile()); webView.setContextMenuEnabled(false); progressBar.progressProperty().bind(webView.getEngine().getLoadWorker().progressProperty()); diff --git a/HMCL/src/main/resources/assets/img/icon@4x.png b/HMCL/src/main/resources/assets/img/icon@4x.png new file mode 100644 index 000000000..161e6fbf8 Binary files /dev/null and b/HMCL/src/main/resources/assets/img/icon@4x.png differ