diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java index bbbf22f21..37d52cf4c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionPane.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.ui.animation; -import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Platform; import javafx.scene.Node; @@ -66,26 +65,25 @@ public class TransitionPane extends StackPane implements AnimationHandler { updateContent(newView); if (previousNode == EMPTY_PANE) { - setMouseTransparent(false); getChildren().setAll(newView); return; } - if (AnimationUtils.isAnimationEnabled()) { + if (AnimationUtils.isAnimationEnabled() && transition != ContainerAnimations.NONE) { + setMouseTransparent(true); transition.init(this); // runLater or "init" will not work Platform.runLater(() -> { Timeline newAnimation = new Timeline(); - newAnimation.getKeyFrames().addAll(transition.animate(this)); - newAnimation.getKeyFrames().add(new KeyFrame(duration, e -> { + newAnimation.getKeyFrames().setAll(transition.animate(this)); + newAnimation.setOnFinished(e -> { setMouseTransparent(false); getChildren().remove(previousNode); - })); + }); FXUtils.playAnimation(this, "transition_pane", newAnimation); }); } else { - setMouseTransparent(false); getChildren().remove(previousNode); } } @@ -101,8 +99,6 @@ public class TransitionPane extends StackPane implements AnimationHandler { if (previousNode == newView) previousNode = EMPTY_PANE; - setMouseTransparent(true); - currentNode = newView; getChildren().setAll(previousNode, currentNode); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorAnimationProducer.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorAnimationProducer.java index cb709a922..6a16a7fcd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorAnimationProducer.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorAnimationProducer.java @@ -31,7 +31,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class DecoratorAnimationProducer implements AnimationProducer { +public final class DecoratorAnimationProducer implements AnimationProducer { @Override public void init(AnimationHandler handler) { } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java index c3fe8b9b6..91e7b6529 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java @@ -62,9 +62,9 @@ public class LauncherSettingsPage extends DecoratorAnimatedPage implements Decor tab = new TabHeader(gameTab, javaManagementTab, settingsTab, personalizationTab, downloadTab, helpTab, feedbackTab, aboutTab); tab.select(gameTab); - gameTab.initializeIfNeeded(); gameTab.getNode().loadVersion(Profiles.getSelectedProfile(), null); - FXUtils.onChangeAndOperate(tab.getSelectionModel().selectedItemProperty(), newValue -> { + transitionPane.setContent(gameTab.getNode(), ContainerAnimations.NONE); + FXUtils.onChange(tab.getSelectionModel().selectedItemProperty(), newValue -> { transitionPane.setContent(newValue.getNode(), ContainerAnimations.FADE); }); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java index ce0c18a6e..7b39ed39a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java @@ -66,7 +66,7 @@ public class VersionPage extends DecoratorAnimatedPage implements DecoratorPage private String preferredVersionName = null; - { + public VersionPage() { versionSettingsTab.setNodeSupplier(loadVersionFor(() -> new VersionSettingsPage(false))); installerListTab.setNodeSupplier(loadVersionFor(InstallerListPage::new)); modListTab.setNodeSupplier(loadVersionFor(ModListPage::new)); @@ -77,7 +77,8 @@ public class VersionPage extends DecoratorAnimatedPage implements DecoratorPage addEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onNavigated); tab.select(versionSettingsTab); - FXUtils.onChangeAndOperate(tab.getSelectionModel().selectedItemProperty(), newValue -> { + transitionPane.setContent(versionSettingsTab.getNode(), ContainerAnimations.NONE); + FXUtils.onChange(tab.getSelectionModel().selectedItemProperty(), newValue -> { transitionPane.setContent(newValue.getNode(), ContainerAnimations.FADE); });