2121import javafx .css .PseudoClass ;
2222import javafx .geometry .Insets ;
2323import javafx .geometry .Pos ;
24- import javafx .scene .Node ;
2524import javafx .scene .control .SkinBase ;
2625import javafx .scene .layout .BorderPane ;
2726import javafx .scene .layout .HBox ;
2827import org .jackhuang .hmcl .setting .GameDirectoryManager ;
2928import org .jackhuang .hmcl .ui .FXUtils ;
3029import org .jackhuang .hmcl .ui .SVG ;
30+ import org .jackhuang .hmcl .ui .SVGContainer ;
31+ import org .jackhuang .hmcl .ui .animation .Motion ;
3132import org .jackhuang .hmcl .ui .construct .RipplerContainer ;
3233import org .jackhuang .hmcl .ui .construct .TwoLineListItem ;
3334import org .jetbrains .annotations .NotNullByDefault ;
@@ -48,18 +49,23 @@ public GameDirectoryListItemSkin(GameDirectoryListItem skinnable) {
4849 root .setPickOnBounds (false );
4950 RipplerContainer container = new RipplerContainer (root );
5051
52+ SVGContainer left = (skinnable .isSelected () ? SVG .FOLDER_FILL : SVG .FOLDER ).createIcon (20 );
53+ left .setMouseTransparent (true );
54+ BorderPane .setMargin (left , new Insets (0 , 6 , 0 , 6 ));
55+ BorderPane .setAlignment (left , Pos .CENTER_LEFT );
56+ root .setLeft (left );
57+
5158 FXUtils .onChangeAndOperate (skinnable .selectedProperty (), active -> {
5259 skinnable .pseudoClassStateChanged (SELECTED , active );
60+
61+ SVG targetIcon = active ? SVG .FOLDER_FILL : SVG .FOLDER ;
62+ if (left .getIcon () != targetIcon ) {
63+ left .setIcon (targetIcon , Motion .SHORT4 );
64+ }
5365 });
5466
5567 FXUtils .onClicked (getSkinnable (), () -> GameDirectoryManager .setSelectedGameDirectory (skinnable .getGameDirectory ()));
5668
57- Node left = SVG .FOLDER .createIcon (20 );
58- left .setMouseTransparent (true );
59- BorderPane .setMargin (left , new Insets (0 , 6 , 0 , 6 ));
60- root .setLeft (left );
61- BorderPane .setAlignment (left , Pos .CENTER_LEFT );
62-
6369 TwoLineListItem item = new TwoLineListItem ();
6470 item .setPickOnBounds (false );
6571 BorderPane .setAlignment (item , Pos .CENTER );
0 commit comments