Update key and mouse handling in preparation for 1.21.9
This commit is contained in:
@@ -26,7 +26,9 @@ import de.johni0702.minecraft.gui.element.GuiButton;
|
||||
import de.johni0702.minecraft.gui.element.GuiElement;
|
||||
import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||
import de.johni0702.minecraft.gui.element.GuiTooltip;
|
||||
import de.johni0702.minecraft.gui.function.Typeable;
|
||||
import de.johni0702.minecraft.gui.function.Click;
|
||||
import de.johni0702.minecraft.gui.function.KeyHandler;
|
||||
import de.johni0702.minecraft.gui.function.KeyInput;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.GridLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
@@ -35,7 +37,6 @@ import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
|
||||
import de.johni0702.minecraft.gui.utils.Colors;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.util.crash.CrashReport;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
@@ -59,7 +60,7 @@ import net.minecraft.text.TranslatableText;
|
||||
//$$ import com.replaymod.replaystudio.util.I18n;
|
||||
//#endif
|
||||
|
||||
public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements Typeable {
|
||||
public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements KeyHandler {
|
||||
private final GuiLabel title = new GuiLabel().setI18nText("replaymod.gui.renderqueue.title").setColor(Colors.BLACK);
|
||||
private final GuiVerticalList list = new GuiVerticalList().setDrawShadow(true).setDrawSlider(true);
|
||||
private final GuiButton addButton = new GuiButton().setI18nLabel("replaymod.gui.renderqueue.add").setSize(150, 20);
|
||||
@@ -272,8 +273,8 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
if (!jobs.isEmpty()) {
|
||||
buttonPanel.removeElement(renderButton);
|
||||
}
|
||||
queueButton.onClick(() -> {
|
||||
RenderSettings settings = save(false);
|
||||
queueButton.onClick(click -> {
|
||||
RenderSettings settings = save(false, click.hasCtrl());
|
||||
|
||||
RenderJob newJob = new RenderJob();
|
||||
newJob.setSettings(settings);
|
||||
@@ -342,8 +343,8 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean typeKey(ReadablePoint mousePosition, int keyCode, char keyChar, boolean ctrlDown, boolean shiftDown) {
|
||||
if (MCVer.Keyboard.hasControlDown() && keyCode == MCVer.Keyboard.KEY_A) {
|
||||
public boolean handleKey(KeyInput keyInput) {
|
||||
if (keyInput.hasCtrl() && keyInput.key == MCVer.Keyboard.KEY_A) {
|
||||
if (selectedEntries.size() < list.getListPanel().getChildren().size()) {
|
||||
for (GuiElement<?> child : list.getListPanel().getChildren()) {
|
||||
if (child instanceof Entry) {
|
||||
@@ -381,8 +382,8 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick() {
|
||||
if (!MCVer.Keyboard.hasControlDown()) {
|
||||
protected void onClick(Click click) {
|
||||
if (!click.hasCtrl()) {
|
||||
selectedEntries.clear();
|
||||
}
|
||||
if (selectedEntries.contains(this)) {
|
||||
@@ -410,8 +411,8 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> implements
|
||||
public GuiRenderSettings edit() {
|
||||
GuiRenderSettings gui = new GuiRenderSettings(container, replayHandler, job.getTimeline());
|
||||
gui.buttonPanel.removeElement(gui.renderButton);
|
||||
gui.queueButton.setI18nLabel("replaymod.gui.done").onClick(() -> {
|
||||
job.setSettings(gui.save(false));
|
||||
gui.queueButton.setI18nLabel("replaymod.gui.done").onClick(click -> {
|
||||
job.setSettings(gui.save(false, click.hasCtrl()));
|
||||
label.setText(job.getName());
|
||||
mod.saveRenderQueue();
|
||||
gui.close();
|
||||
|
||||
@@ -18,6 +18,7 @@ import de.johni0702.minecraft.gui.container.GuiVerticalList;
|
||||
import de.johni0702.minecraft.gui.element.*;
|
||||
import de.johni0702.minecraft.gui.element.advanced.GuiColorPicker;
|
||||
import de.johni0702.minecraft.gui.element.advanced.GuiDropdownMenu;
|
||||
import de.johni0702.minecraft.gui.function.Click;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.GridLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
@@ -232,13 +233,13 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
public final GuiButton queueButton = new GuiButton(buttonPanel)
|
||||
.setSize(100, 20)
|
||||
.setI18nLabel("replaymod.gui.rendersettings.addtoqueue");
|
||||
public final GuiButton renderButton = new GuiButton(buttonPanel).onClick(() -> ReplayMod.instance.runLaterWithoutLock(new Runnable() {
|
||||
public final GuiButton renderButton = new GuiButton(buttonPanel).onClick(click -> ReplayMod.instance.runLaterWithoutLock(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Closing this GUI ensures that settings are saved
|
||||
close();
|
||||
try {
|
||||
VideoRenderer videoRenderer = new VideoRenderer(save(false), replayHandler, timeline);
|
||||
VideoRenderer videoRenderer = new VideoRenderer(save(false, click.hasCtrl()), replayHandler, timeline);
|
||||
videoRenderer.renderVideo();
|
||||
} catch (FFmpegWriter.NoFFmpegException e) {
|
||||
LOGGER.error("Rendering video:", e);
|
||||
@@ -248,7 +249,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
// Update settings with fixed ffmpeg arguments
|
||||
exportArguments.setText(newSettings.getExportArguments());
|
||||
// Restart rendering, this will also save the changed ffmpeg arguments
|
||||
renderButton.onClick();
|
||||
renderButton.onClick(click);
|
||||
});
|
||||
} catch (Throwable t) {
|
||||
error(LOGGER, GuiRenderSettings.this, CrashReport.create(t, "Rendering video"), () -> {});
|
||||
@@ -349,7 +350,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
videoHeight.setTextColor(Colors.RED);
|
||||
}
|
||||
|
||||
String[] compatError = VideoRenderer.checkCompat(save(false));
|
||||
String[] compatError = VideoRenderer.checkCompat(save(false, false));
|
||||
if (resolutionError != null) {
|
||||
renderButton.setDisabled().setTooltip(new GuiTooltip().setI18nText(resolutionError));
|
||||
} else if (compatError != null) {
|
||||
@@ -552,7 +553,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
updateInputs();
|
||||
}
|
||||
|
||||
public RenderSettings save(boolean serialize) {
|
||||
public RenderSettings save(boolean serialize, boolean highPerformance) {
|
||||
int sphericalFov = MIN_SPHERICAL_FOV + sphericalFovSlider.getValue() * SPHERICAL_FOV_STEP_SIZE;
|
||||
|
||||
return new RenderSettings(
|
||||
@@ -576,7 +577,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
serialize || antiAliasingDropdown.isEnabled() ? antiAliasingDropdown.getSelectedValue() : RenderSettings.AntiAliasing.NONE,
|
||||
exportCommand.getText(),
|
||||
exportArguments.getText(),
|
||||
net.minecraft.client.gui.screen.Screen.hasControlDown()
|
||||
highPerformance
|
||||
);
|
||||
}
|
||||
|
||||
@@ -623,7 +624,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
RenderSettings settings = save(true);
|
||||
RenderSettings settings = save(true, false);
|
||||
String json = new Gson().toJson(settings);
|
||||
try {
|
||||
Files.write(getSettingsPath(), json.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
@@ -11,6 +11,7 @@ import de.johni0702.minecraft.gui.element.GuiButton;
|
||||
import de.johni0702.minecraft.gui.element.GuiCheckbox;
|
||||
import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||
import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar;
|
||||
import de.johni0702.minecraft.gui.function.Click;
|
||||
import de.johni0702.minecraft.gui.function.Tickable;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
@@ -67,8 +68,8 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
boolean waitingForConfirmation;
|
||||
|
||||
@Override
|
||||
public boolean mouseClick(ReadablePoint position, int button) {
|
||||
boolean result = super.mouseClick(position, button);
|
||||
public boolean mouseClick(Click click) {
|
||||
boolean result = super.mouseClick(click);
|
||||
if (waitingForConfirmation && !result) {
|
||||
setI18nLabel("replaymod.gui.rendering.cancel");
|
||||
waitingForConfirmation = false;
|
||||
@@ -77,8 +78,8 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
super.onClick();
|
||||
public void onClick(Click click) {
|
||||
super.onClick(click);
|
||||
if (!waitingForConfirmation) {
|
||||
setI18nLabel("replaymod.gui.rendering.cancel.callback");
|
||||
waitingForConfirmation = true;
|
||||
|
||||
Reference in New Issue
Block a user