From 50072799d06eb1e66df23788bdc42e84a8eb89e4 Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 31 Aug 2026 20:48:03 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20#6788:=20=E4=BF=AE=E5=A4=8D=E7=BC=A9?= =?UTF-8?q?=E6=94=BE=20SVG=20=E5=9B=BE=E7=89=87=E6=97=B6=E4=BC=9A=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=20JFXPanel=20=E7=B1=BB=E7=9A=84=E9=97=AE=E9=A2=98=20(?= =?UTF-8?q?#6789)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jackhuang/hmcl/ui/image/ImageUtils.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/image/ImageUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/image/ImageUtils.java index 69f476d3a9..a176e9b15f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/image/ImageUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/image/ImageUtils.java @@ -51,6 +51,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; import java.util.regex.Pattern; import static org.jackhuang.hmcl.util.logging.Logger.LOG; @@ -84,38 +85,37 @@ public final class ImageUtils { LoaderParameters parameters = new LoaderParameters(); parameters.autoStartAnimations = false; - @Nullable SVGImage image; + Supplier supplier = () -> { + SVGImage image = SVGLoader.load(content, parameters); + var snapshotParameters = new SnapshotParameters(); + snapshotParameters.setFill(Color.TRANSPARENT); + + if (requestedWidth <= 0. || requestedHeight <= 0.) { + return image.toImage(snapshotParameters); + } + + double scaleX = requestedWidth / image.getScaledWidth(); + double scaleY = requestedHeight / image.getScaledHeight(); + + if (preserveRatio || scaleX == scaleY) { + double scale = Math.min(scaleX, scaleY); + return image.scale(scale).toImage(snapshotParameters); + } else { + // FIXME: Use DEFAULT_SVG_SNAPSHOT_PARAMS + return image.toImageScaled(ScaleQuality.RENDER_QUALITY, scaleX, scaleY); + } + }; + + @Nullable Image image; if (Platform.isFxApplicationThread()) { - image = SVGLoader.load(content, parameters); + image = supplier.get(); } else { // TODO: Currently, SVGLoader.load(...) requires the javafx.swing module if it operates on a non-JavaFX thread. - image = CompletableFuture.supplyAsync( - () -> SVGLoader.load(content, parameters), - Schedulers.javafx() - ).get(); + image = CompletableFuture.supplyAsync(supplier, Schedulers.javafx()).get(); } - if (image == null) - throw new IOException("Failed to load SVG image"); - - var snapshotParameters = new SnapshotParameters(); - snapshotParameters.setFill(Color.TRANSPARENT); - - if (requestedWidth <= 0. || requestedHeight <= 0.) { - return image.toImage(snapshotParameters); - } - - double scaleX = requestedWidth / image.getScaledWidth(); - double scaleY = requestedHeight / image.getScaledHeight(); - - if (preserveRatio || scaleX == scaleY) { - double scale = Math.min(scaleX, scaleY); - return image.scale(scale).toImage(snapshotParameters); - } else { - // FIXME: Use DEFAULT_SVG_SNAPSHOT_PARAMS - return image.toImageScaled(ScaleQuality.RENDER_QUALITY, scaleX, scaleY); - } + return image; }; public static final ImageLoader APNG = (input, requestedWidth, requestedHeight, preserveRatio, smooth) -> {