feat: set background to translucent white to make texts easier to read.
This commit is contained in:
@@ -18,10 +18,7 @@
|
|||||||
package org.jackhuang.hmcl.ui;
|
package org.jackhuang.hmcl.ui;
|
||||||
|
|
||||||
import com.jfoenix.controls.*;
|
import com.jfoenix.controls.*;
|
||||||
import javafx.animation.Interpolator;
|
import javafx.animation.*;
|
||||||
import javafx.animation.KeyFrame;
|
|
||||||
import javafx.animation.KeyValue;
|
|
||||||
import javafx.animation.Timeline;
|
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.InvalidationListener;
|
import javafx.beans.InvalidationListener;
|
||||||
import javafx.beans.Observable;
|
import javafx.beans.Observable;
|
||||||
@@ -324,16 +321,19 @@ public final class FXUtils {
|
|||||||
node.getProperties().put(animationKey, timeline);
|
node.getProperties().put(animationKey, timeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> void playAnimation(Node node, String animationKey, Duration duration, WritableValue<T> property, T from, T to, Interpolator interpolator) {
|
public static <T> Animation playAnimation(Node node, String animationKey, Duration duration, WritableValue<T> property, T from, T to, Interpolator interpolator) {
|
||||||
if (from == null) from = property.getValue();
|
if (from == null) from = property.getValue();
|
||||||
if (duration == null || Objects.equals(duration, Duration.ZERO) || Objects.equals(from, to)) {
|
if (duration == null || Objects.equals(duration, Duration.ZERO) || Objects.equals(from, to)) {
|
||||||
playAnimation(node, animationKey, null);
|
playAnimation(node, animationKey, null);
|
||||||
property.setValue(to);
|
property.setValue(to);
|
||||||
|
return null;
|
||||||
} else {
|
} else {
|
||||||
playAnimation(node, animationKey, new Timeline(
|
Timeline timeline = new Timeline(
|
||||||
new KeyFrame(Duration.ZERO, new KeyValue(property, from, interpolator)),
|
new KeyFrame(Duration.ZERO, new KeyValue(property, from, interpolator)),
|
||||||
new KeyFrame(duration, new KeyValue(property, to, interpolator))
|
new KeyFrame(duration, new KeyValue(property, to, interpolator))
|
||||||
));
|
);
|
||||||
|
playAnimation(node, animationKey, timeline);
|
||||||
|
return timeline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ import javafx.scene.control.SkinBase;
|
|||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import org.jackhuang.hmcl.auth.Account;
|
import org.jackhuang.hmcl.auth.Account;
|
||||||
import org.jackhuang.hmcl.ui.*;
|
import org.jackhuang.hmcl.ui.Controllers;
|
||||||
|
import org.jackhuang.hmcl.ui.FXUtils;
|
||||||
|
import org.jackhuang.hmcl.ui.ListPageBase;
|
||||||
|
import org.jackhuang.hmcl.ui.SVG;
|
||||||
import org.jackhuang.hmcl.ui.construct.AdvancedListBox;
|
import org.jackhuang.hmcl.ui.construct.AdvancedListBox;
|
||||||
import org.jackhuang.hmcl.ui.decorator.DecoratorPage;
|
import org.jackhuang.hmcl.ui.decorator.DecoratorPage;
|
||||||
import org.jackhuang.hmcl.util.javafx.MappedObservableList;
|
import org.jackhuang.hmcl.util.javafx.MappedObservableList;
|
||||||
@@ -37,7 +40,7 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
|||||||
import static org.jackhuang.hmcl.util.javafx.ExtendedProperties.createSelectedItemPropertyFor;
|
import static org.jackhuang.hmcl.util.javafx.ExtendedProperties.createSelectedItemPropertyFor;
|
||||||
|
|
||||||
public class AccountListPage extends ListPageBase<AccountListItem> implements DecoratorPage {
|
public class AccountListPage extends ListPageBase<AccountListItem> implements DecoratorPage {
|
||||||
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("account.manage"), 200));
|
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("account.manage"), -1));
|
||||||
private final ListProperty<Account> accounts = new SimpleListProperty<>(this, "accounts", FXCollections.observableArrayList());
|
private final ListProperty<Account> accounts = new SimpleListProperty<>(this, "accounts", FXCollections.observableArrayList());
|
||||||
private final ObjectProperty<Account> selectedAccount;
|
private final ObjectProperty<Account> selectedAccount;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jackhuang.hmcl.ui.decorator;
|
|||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
import com.jfoenix.svg.SVGGlyph;
|
import com.jfoenix.svg.SVGGlyph;
|
||||||
|
import javafx.animation.Animation;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.collections.ListChangeListener;
|
import javafx.collections.ListChangeListener;
|
||||||
import javafx.css.PseudoClass;
|
import javafx.css.PseudoClass;
|
||||||
@@ -177,8 +178,19 @@ public class DecoratorSkin extends SkinBase<Decorator> {
|
|||||||
navBarPane.getChildren().setAll(node);
|
navBarPane.getChildren().setAll(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
FXUtils.playAnimation(leftPane, "animation",
|
if (s.getLeftPaneWidth() >= 0) {
|
||||||
s.isAnimate() ? Duration.millis(160) : null, leftPane.prefWidthProperty(), null, s.getLeftPaneWidth(), FXUtils.SINE);
|
leftPane.prefWidthProperty().unbind();
|
||||||
|
FXUtils.playAnimation(leftPane, "animation",
|
||||||
|
s.isAnimate() ? Duration.millis(160) : null, leftPane.prefWidthProperty(), null, s.getLeftPaneWidth(), FXUtils.SINE);
|
||||||
|
} else {
|
||||||
|
Animation animation = FXUtils.playAnimation(leftPane, "animation1",
|
||||||
|
s.isAnimate() ? Duration.millis(160) : null, leftPane.prefWidthProperty(), null, container.getWidth(), FXUtils.SINE);
|
||||||
|
if (animation != null) {
|
||||||
|
animation.setOnFinished(action -> {
|
||||||
|
leftPane.prefWidthProperty().bind(container.widthProperty());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
titleBar.setCenter(navBarPane);
|
titleBar.setCenter(navBarPane);
|
||||||
titleBar.setRight(buttonsContainerPlaceHolder);
|
titleBar.setRight(buttonsContainerPlaceHolder);
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import static org.jackhuang.hmcl.ui.versions.VersionPage.wrap;
|
|||||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||||
|
|
||||||
public class DownloadPage extends BorderPane implements DecoratorPage {
|
public class DownloadPage extends BorderPane implements DecoratorPage {
|
||||||
private final ReadOnlyObjectWrapper<DecoratorPage.State> state = new ReadOnlyObjectWrapper<>(DecoratorPage.State.fromTitle(i18n("download"), 200));
|
private final ReadOnlyObjectWrapper<DecoratorPage.State> state = new ReadOnlyObjectWrapper<>(DecoratorPage.State.fromTitle(i18n("download"), -1));
|
||||||
private final TabHeader tab;
|
private final TabHeader tab;
|
||||||
private final TabHeader.Tab<ModDownloadListPage> modTab = new TabHeader.Tab<>("modTab");
|
private final TabHeader.Tab<ModDownloadListPage> modTab = new TabHeader.Tab<>("modTab");
|
||||||
private final TabHeader.Tab<ModDownloadListPage> modpackTab = new TabHeader.Tab<>("modpackTab");
|
private final TabHeader.Tab<ModDownloadListPage> modpackTab = new TabHeader.Tab<>("modpackTab");
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import static org.jackhuang.hmcl.ui.versions.VersionPage.wrap;
|
|||||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||||
|
|
||||||
public class LauncherSettingsPage extends BorderPane implements DecoratorPage {
|
public class LauncherSettingsPage extends BorderPane implements DecoratorPage {
|
||||||
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("settings"), 200));
|
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("settings"), -1));
|
||||||
private final TabHeader tab;
|
private final TabHeader tab;
|
||||||
private final TabHeader.Tab<VersionSettingsPage> gameTab = new TabHeader.Tab<>("versionSettingsPage");
|
private final TabHeader.Tab<VersionSettingsPage> gameTab = new TabHeader.Tab<>("versionSettingsPage");
|
||||||
private final TabHeader.Tab<SettingsPage> settingsTab = new TabHeader.Tab<>("settingsPage");
|
private final TabHeader.Tab<SettingsPage> settingsTab = new TabHeader.Tab<>("settingsPage");
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
|||||||
import static org.jackhuang.hmcl.util.javafx.ExtendedProperties.createSelectedItemPropertyFor;
|
import static org.jackhuang.hmcl.util.javafx.ExtendedProperties.createSelectedItemPropertyFor;
|
||||||
|
|
||||||
public class GameListPage extends ListPageBase<GameListItem> implements DecoratorPage {
|
public class GameListPage extends ListPageBase<GameListItem> implements DecoratorPage {
|
||||||
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("version.manage")));
|
private final ReadOnlyObjectWrapper<State> state = new ReadOnlyObjectWrapper<>(State.fromTitle(i18n("version.manage"), -1));
|
||||||
private final ListProperty<Profile> profiles = new SimpleListProperty<>(FXCollections.observableArrayList());
|
private final ListProperty<Profile> profiles = new SimpleListProperty<>(FXCollections.observableArrayList());
|
||||||
@SuppressWarnings("FieldCanBeLocal")
|
@SuppressWarnings("FieldCanBeLocal")
|
||||||
private final ObservableList<ProfileListItem> profileListItems;
|
private final ObservableList<ProfileListItem> profileListItems;
|
||||||
@@ -243,8 +243,6 @@ public class GameListPage extends ListPageBase<GameListItem> implements Decorato
|
|||||||
|
|
||||||
public GameListSkin() {
|
public GameListSkin() {
|
||||||
super(GameList.this);
|
super(GameList.this);
|
||||||
|
|
||||||
state.set(State.fromTitle(i18n("version.manage"), 200));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ public class VersionPage extends Control implements DecoratorPage, ModDownloadPa
|
|||||||
}
|
}
|
||||||
|
|
||||||
control.state.bind(Bindings.createObjectBinding(() ->
|
control.state.bind(Bindings.createObjectBinding(() ->
|
||||||
State.fromTitle(i18n("version.manage.manage.title", getSkinnable().getVersion()), 200),
|
State.fromTitle(i18n("version.manage.manage.title", getSkinnable().getVersion()), -1),
|
||||||
getSkinnable().version));
|
getSkinnable().version));
|
||||||
|
|
||||||
//control.transitionPane.getStyleClass().add("gray-background");
|
//control.transitionPane.getStyleClass().add("gray-background");
|
||||||
|
|||||||
Reference in New Issue
Block a user