Skip to content

Commit ac8c34f

Browse files
committed
Try to improve the post processor dropdown (broken due to the separator).
1 parent 31b1846 commit ac8c34f

File tree

4 files changed

+24
-30
lines changed

4 files changed

+24
-30
lines changed

chunky/src/java/se/llbit/chunky/renderer/postprocessing/PostProcessingFilters.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,6 @@ public static Optional<PostProcessingFilter> getPostProcessingFilterFromId(Strin
2424
return Optional.ofNullable(filters.get(id));
2525
}
2626

27-
// TODO Create a ChoiceBox that can use different string as ID and as visual representation
28-
// so this isn't needed
29-
@Deprecated
30-
public static Optional<PostProcessingFilter> getPostProcessingFilterFromName(String name) {
31-
return Optional.ofNullable(filtersByName.get(name));
32-
}
33-
3427
public static Collection<PostProcessingFilter> getFilters() {
3528
return filtersByName.values();
3629
}

chunky/src/java/se/llbit/chunky/ui/render/tabs/PostprocessingTab.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020
import javafx.fxml.FXMLLoader;
2121
import javafx.fxml.Initializable;
2222
import javafx.scene.Node;
23-
import javafx.scene.control.ChoiceBox;
23+
import javafx.scene.control.ComboBox;
2424
import javafx.scene.control.ScrollPane;
2525
import javafx.scene.control.Separator;
2626
import javafx.scene.control.Tooltip;
27+
import javafx.scene.control.SingleSelectionModel;
2728
import javafx.util.StringConverter;
2829
import se.llbit.chunky.renderer.postprocessing.PostProcessingFilter;
2930
import se.llbit.chunky.renderer.postprocessing.PostProcessingFilters;
@@ -32,20 +33,22 @@
3233
import se.llbit.chunky.ui.DoubleAdjuster;
3334
import se.llbit.chunky.ui.controller.RenderControlsFxController;
3435
import se.llbit.chunky.ui.render.RenderControlsTab;
36+
import se.llbit.chunky.ui.RegisterableCellAdapter;
37+
import se.llbit.fxutil.CustomizedListCellFactory;
3538
import se.llbit.util.ProgressListener;
3639
import se.llbit.util.TaskTracker;
40+
import se.llbit.util.TaskTracker.Task;
3741

3842
import java.io.IOException;
3943
import java.net.URL;
4044
import java.util.ResourceBundle;
41-
import se.llbit.util.TaskTracker.Task;
4245

4346
public class PostprocessingTab extends ScrollPane implements RenderControlsTab, Initializable {
4447
private Scene scene;
4548
private RenderControlsFxController controller;
4649

4750
@FXML private DoubleAdjuster exposure;
48-
@FXML private ChoiceBox<PostProcessingFilter> postprocessingFilter;
51+
@FXML private ComboBox<PostProcessingFilter> postprocessingFilter;
4952

5053
public PostprocessingTab() throws IOException {
5154
FXMLLoader loader = new FXMLLoader(getClass().getResource("PostprocessingTab.fxml"));
@@ -84,21 +87,13 @@ public PostprocessingTab() throws IOException {
8487
postprocessingFilter.getSelectionModel().select(Scene.DEFAULT_POSTPROCESSING_FILTER);
8588
postprocessingFilter.getSelectionModel().selectedItemProperty().addListener(
8689
(observable, oldValue, newValue) -> {
87-
scene.setPostprocess(newValue);
88-
scene.postProcessFrame(new TaskTracker(ProgressListener.NONE));
89-
controller.getCanvas().forceRepaint();
90+
if (!(newValue instanceof Separator)) {
91+
scene.setPostprocess(newValue);
92+
scene.postProcessFrame(new TaskTracker(ProgressListener.NONE));
93+
controller.getCanvas().forceRepaint();
94+
}
9095
});
91-
postprocessingFilter.setConverter(new StringConverter<PostProcessingFilter>() {
92-
@Override
93-
public String toString(PostProcessingFilter object) {
94-
return object == null ? null : object.getName();
95-
}
96-
97-
@Override
98-
public PostProcessingFilter fromString(String string) {
99-
return PostProcessingFilters.getPostProcessingFilterFromName(string).orElse(Scene.DEFAULT_POSTPROCESSING_FILTER);
100-
}
101-
});
96+
CustomizedListCellFactory.install(postprocessingFilter, RegisterableCellAdapter.INSTANCE);
10297
exposure.setName("Exposure");
10398
exposure.setTooltip("Linear exposure of the image.");
10499
exposure.setRange(Scene.MIN_EXPOSURE, Scene.MAX_EXPOSURE);

chunky/src/res/se/llbit/chunky/ui/render/tabs/PostprocessingTab.fxml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

33
<?import javafx.geometry.Insets?>
4-
<?import javafx.scene.control.ChoiceBox?>
4+
<?import javafx.scene.control.ComboBox?>
55
<?import javafx.scene.control.Label?>
66
<?import javafx.scene.layout.HBox?>
77
<?import javafx.scene.layout.VBox?>
@@ -14,7 +14,7 @@
1414
<DoubleAdjuster fx:id="exposure" />
1515
<HBox alignment="CENTER_LEFT" prefWidth="200.0" spacing="10.0">
1616
<Label text="Postprocessing filter:" />
17-
<ChoiceBox fx:id="postprocessingFilter" prefWidth="150.0" />
17+
<ComboBox fx:id="postprocessingFilter" prefWidth="150.0" />
1818
</HBox>
1919
<Text strokeType="OUTSIDE" strokeWidth="0.0" wrappingWidth="275"
2020
text="Postprocessing affects performance when Render Preview tab is visible. Switching to the Map tab mitigates this." />

lib/src/se/llbit/fxutil/CustomizedListCellFactory.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
*/
1717
package se.llbit.fxutil;
1818

19-
import javafx.scene.control.ComboBox;
20-
import javafx.scene.control.ListCell;
21-
import javafx.scene.control.ListView;
22-
import javafx.scene.control.Tooltip;
19+
import javafx.geometry.Insets;
20+
import javafx.scene.Node;
21+
import javafx.scene.control.*;
2322
import javafx.util.Callback;
23+
import javafx.util.StringConverter;
2424

2525
/**
2626
* A list cell factory that shows labels and tooltips.
@@ -66,7 +66,13 @@ protected void updateItem(T item, boolean empty) {
6666
super.updateItem(item, empty);
6767
if (item == null || empty || adapter == null) {
6868
setGraphic(null);
69+
} else if (item instanceof Separator) {
70+
setDisabled(true);
71+
setMouseTransparent(true);
72+
setGraphic((Node) item);
73+
setPadding(Insets.EMPTY);
6974
} else {
75+
setGraphic(null);
7076
setText(adapter.getLabel(item));
7177
setTooltip(adapter.getTooltip(item));
7278
}

0 commit comments

Comments
 (0)