清理 SVG 相关代码 (#5450)

This commit is contained in:
Glavo
2026-02-06 04:21:14 +08:00
committed by GitHub
parent 253bdf974e
commit 84bcb01fe1
6 changed files with 38 additions and 45 deletions

View File

@@ -18,21 +18,17 @@
package org.jackhuang.hmcl.ui; package org.jackhuang.hmcl.ui;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Paint; import javafx.scene.paint.Paint;
import javafx.scene.shape.SVGPath; import javafx.scene.shape.SVGPath;
/** /// All vector icons used in the launcher.
* All vector icons used in the launcher. ///
* <p> /// Unless otherwise stated,
* Unless otherwise stated, /// these icons are from <a href="https://fonts.google.com/icons?icon.size=24&icon.color=%235f6368&icon.query=list&icon.set=Material+Symbols">Material Symbols</a>,
* these icons are from <a href="https://fonts.google.com/icons?icon.size=24&icon.color=%235f6368&icon.query=list&icon.set=Material+Symbols">Material Symbols</a>, /// with a style of outlined, a weight of 400, a grade of 0, and an optical size of 24 px.
* with a style of outlined, a weight of 400, a grade of 0, and an optical size of 24 px. /// The view boxes of all icons are normalized to `0 0 24 24`.
* The view boxes of all icons are normalized to {@code 0 0 24 24}.
*/
public enum SVG { public enum SVG {
ADD("M11 13H5V11H11V5H13V11H19V13H13V19H11V13Z"), ADD("M11 13H5V11H11V5H13V11H19V13H13V19H11V13Z"),
ADD_CIRCLE("M11 17H13V13H17V11H13V7H11V11H7V13H11V17ZM12 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"), ADD_CIRCLE("M11 17H13V13H17V11H13V7H11V11H7V13H11V17ZM12 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"),
@@ -145,38 +141,35 @@ public enum SVG {
return path; return path;
} }
private static Node createIcon(SVGPath path, double size) { public SVGPath createSVGPath() {
if (size < 0) { var p = new SVGPath();
StackPane pane = new StackPane(path);
pane.setAlignment(Pos.CENTER);
return pane;
}
double scale = size / 24;
path.setScaleX(scale);
path.setScaleY(scale);
return new Group(path);
}
public Node createIcon(double size) {
SVGPath p = new SVGPath();
p.setContent(path); p.setContent(path);
p.getStyleClass().add("svg"); p.getStyleClass().add("svg");
return createIcon(p, size); return p;
}
private static Node createIcon(SVGPath path, double size) {
if (size == DEFAULT_SIZE)
return path;
else {
double scale = size / DEFAULT_SIZE;
path.setScaleX(scale);
path.setScaleY(scale);
return new Group(path);
}
} }
public Node createIcon() { public Node createIcon() {
SVGPath p = new SVGPath(); return createIcon(DEFAULT_SIZE);
p.setContent(path); }
p.getStyleClass().add("svg");
return createIcon(p, -1); public Node createIcon(double size) {
return createIcon(createSVGPath(), size);
} }
public Node createIcon(ObservableValue<? extends Paint> color) { public Node createIcon(ObservableValue<? extends Paint> color) {
SVGPath p = new SVGPath(); SVGPath p = createSVGPath();
p.setContent(path);
p.getStyleClass().add("svg");
p.fillProperty().bind(color); p.fillProperty().bind(color);
return createIcon(p, -1); return createIcon(p, DEFAULT_SIZE);
} }
} }

View File

@@ -24,7 +24,7 @@ import org.jackhuang.hmcl.ui.SVG;
public final class IconedMenuItem extends IconedItem { public final class IconedMenuItem extends IconedItem {
public IconedMenuItem(SVG icon, String text, Runnable action, JFXPopup popup) { public IconedMenuItem(SVG icon, String text, Runnable action, JFXPopup popup) {
super(icon != null ? FXUtils.limitingSize(icon.createIcon(14), 14, 14) : null, text); super(icon != null ? icon.createIcon(14) : null, text);
getStyleClass().setAll("iconed-menu-item"); getStyleClass().setAll("iconed-menu-item");

View File

@@ -241,7 +241,7 @@ public final class JavaManagementPage extends ListPageBase<JavaRuntime> {
right.setAlignment(Pos.CENTER_RIGHT); right.setAlignment(Pos.CENTER_RIGHT);
{ {
JFXButton revealButton = new JFXButton(); JFXButton revealButton = new JFXButton();
revealButton.setGraphic(FXUtils.limitingSize(SVG.FOLDER_OPEN.createIcon(24), 24, 24)); revealButton.setGraphic(SVG.FOLDER_OPEN.createIcon());
revealButton.getStyleClass().add("toggle-icon4"); revealButton.getStyleClass().add("toggle-icon4");
revealButton.setOnAction(e -> { revealButton.setOnAction(e -> {
JavaRuntime java = getItem(); JavaRuntime java = getItem();

View File

@@ -159,7 +159,7 @@ public final class JavaRestorePage extends ListPageBase<JavaRestorePage.Disabled
{ {
JFXButton revealButton = new JFXButton(); JFXButton revealButton = new JFXButton();
revealButton.getStyleClass().add("toggle-icon4"); revealButton.getStyleClass().add("toggle-icon4");
revealButton.setGraphic(FXUtils.limitingSize(SVG.FOLDER_OPEN.createIcon(24), 24, 24)); revealButton.setGraphic(SVG.FOLDER_OPEN.createIcon());
revealButton.setOnAction(e -> skinnable.onReveal()); revealButton.setOnAction(e -> skinnable.onReveal());
FXUtils.installFastTooltip(revealButton, i18n("reveal.in_file_manager")); FXUtils.installFastTooltip(revealButton, i18n("reveal.in_file_manager"));
@@ -168,7 +168,7 @@ public final class JavaRestorePage extends ListPageBase<JavaRestorePage.Disabled
JFXButton removeButton = new JFXButton(); JFXButton removeButton = new JFXButton();
removeButton.getStyleClass().add("toggle-icon4"); removeButton.getStyleClass().add("toggle-icon4");
removeButton.setGraphic(FXUtils.limitingSize(SVG.DELETE.createIcon(24), 24, 24)); removeButton.setGraphic(SVG.DELETE.createIcon());
removeButton.setOnAction(e -> skinnable.onRemove()); removeButton.setOnAction(e -> skinnable.onRemove());
FXUtils.installFastTooltip(removeButton, i18n("java.disabled.management.remove")); FXUtils.installFastTooltip(removeButton, i18n("java.disabled.management.remove"));
@@ -176,7 +176,7 @@ public final class JavaRestorePage extends ListPageBase<JavaRestorePage.Disabled
} else { } else {
JFXButton restoreButton = new JFXButton(); JFXButton restoreButton = new JFXButton();
restoreButton.getStyleClass().add("toggle-icon4"); restoreButton.getStyleClass().add("toggle-icon4");
restoreButton.setGraphic(FXUtils.limitingSize(SVG.RESTORE.createIcon(24), 24, 24)); restoreButton.setGraphic(SVG.RESTORE.createIcon());
restoreButton.setOnAction(e -> skinnable.onRestore()); restoreButton.setOnAction(e -> skinnable.onRestore());
FXUtils.installFastTooltip(restoreButton, i18n("java.disabled.management.restore")); FXUtils.installFastTooltip(restoreButton, i18n("java.disabled.management.restore"));

View File

@@ -115,7 +115,7 @@ public final class GameListCell extends ListCell<GameListItem> {
item.update(); item.update();
}); });
btnUpgrade.getStyleClass().add("toggle-icon4"); btnUpgrade.getStyleClass().add("toggle-icon4");
btnUpgrade.setGraphic(FXUtils.limitingSize(SVG.UPDATE.createIcon(24), 24, 24)); btnUpgrade.setGraphic(SVG.UPDATE.createIcon());
FXUtils.installFastTooltip(btnUpgrade, i18n("version.update")); FXUtils.installFastTooltip(btnUpgrade, i18n("version.update"));
right.getChildren().add(btnUpgrade); right.getChildren().add(btnUpgrade);
@@ -127,7 +127,7 @@ public final class GameListCell extends ListCell<GameListItem> {
}); });
btnLaunch.getStyleClass().add("toggle-icon4"); btnLaunch.getStyleClass().add("toggle-icon4");
BorderPane.setAlignment(btnLaunch, Pos.CENTER); BorderPane.setAlignment(btnLaunch, Pos.CENTER);
btnLaunch.setGraphic(FXUtils.limitingSize(SVG.ROCKET_LAUNCH.createIcon(24), 24, 24)); btnLaunch.setGraphic(SVG.ROCKET_LAUNCH.createIcon());
FXUtils.installFastTooltip(btnLaunch, i18n("version.launch.test")); FXUtils.installFastTooltip(btnLaunch, i18n("version.launch.test"));
right.getChildren().add(btnLaunch); right.getChildren().add(btnLaunch);
@@ -143,7 +143,7 @@ public final class GameListCell extends ListCell<GameListItem> {
}); });
btnManage.getStyleClass().add("toggle-icon4"); btnManage.getStyleClass().add("toggle-icon4");
BorderPane.setAlignment(btnManage, Pos.CENTER); BorderPane.setAlignment(btnManage, Pos.CENTER);
btnManage.setGraphic(FXUtils.limitingSize(SVG.MORE_VERT.createIcon(24), 24, 24)); btnManage.setGraphic(SVG.MORE_VERT.createIcon());
FXUtils.installFastTooltip(btnManage, i18n("settings.game.management")); FXUtils.installFastTooltip(btnManage, i18n("settings.game.management"));
right.getChildren().add(btnManage); right.getChildren().add(btnManage);
} }

View File

@@ -580,15 +580,15 @@ final class ModListPageSkin extends SkinBase<ModListPage> {
imageView.setImage(VersionIconType.COMMAND.getIcon()); imageView.setImage(VersionIconType.COMMAND.getIcon());
restoreButton.getStyleClass().add("toggle-icon4"); restoreButton.getStyleClass().add("toggle-icon4");
restoreButton.setGraphic(FXUtils.limitingSize(SVG.RESTORE.createIcon(24), 24, 24)); restoreButton.setGraphic(SVG.RESTORE.createIcon());
FXUtils.installFastTooltip(restoreButton, i18n("mods.restore")); FXUtils.installFastTooltip(restoreButton, i18n("mods.restore"));
revealButton.getStyleClass().add("toggle-icon4"); revealButton.getStyleClass().add("toggle-icon4");
revealButton.setGraphic(FXUtils.limitingSize(SVG.FOLDER.createIcon(24), 24, 24)); revealButton.setGraphic(SVG.FOLDER.createIcon());
infoButton.getStyleClass().add("toggle-icon4"); infoButton.getStyleClass().add("toggle-icon4");
infoButton.setGraphic(FXUtils.limitingSize(SVG.INFO.createIcon(24), 24, 24)); infoButton.setGraphic(SVG.INFO.createIcon());
container.getChildren().setAll(checkBox, imageView, content, restoreButton, revealButton, infoButton); container.getChildren().setAll(checkBox, imageView, content, restoreButton, revealButton, infoButton);