From f4a890749e07123b5b7db8200b53c943a93ede01 Mon Sep 17 00:00:00 2001 From: isXander Date: Thu, 19 Jan 2023 22:06:13 +0000 Subject: 22w03a - now with better navigation! --- .../yacl/gui/controllers/ControllerWidget.java | 22 +++++++++--- .../yacl/gui/controllers/LabelController.java | 42 ++++++++++++++++++++++ .../cycling/CyclingControllerElement.java | 4 +-- .../slider/SliderControllerElement.java | 4 +-- .../string/StringControllerElement.java | 5 +-- 5 files changed, 66 insertions(+), 11 deletions(-) (limited to 'src/client/java/dev/isxander/yacl/gui/controllers') diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java b/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java index 90c0e20..22c469d 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java @@ -7,11 +7,14 @@ import dev.isxander.yacl.gui.AbstractWidget; import dev.isxander.yacl.gui.YACLScreen; import dev.isxander.yacl.gui.utils.GuiUtils; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.ComponentPath; import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.components.MultiLineLabel; import net.minecraft.client.gui.narration.NarratedElementType; import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.Nullable; public abstract class ControllerWidget> extends AbstractWidget { protected final T control; @@ -126,13 +129,22 @@ public abstract class ControllerWidget> extends Abstract return getDimension().y() + getDimension().height() / 2f - textRenderer.lineHeight / 2f; } + @Nullable @Override - public boolean changeFocus(boolean lookForwards) { - if (!isAvailable()) - return false; + public ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) { + if (!this.isAvailable()) + return null; + return !this.isFocused() ? ComponentPath.leaf(this) : null; + } - this.focused = !this.focused; - return this.focused; + @Override + public boolean isFocused() { + return focused; + } + + @Override + public void setFocused(boolean focused) { + this.focused = focused; } @Override diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java index 0017b59..dd0048d 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java @@ -6,12 +6,18 @@ import dev.isxander.yacl.api.Option; import dev.isxander.yacl.api.utils.Dimension; import dev.isxander.yacl.gui.AbstractWidget; import dev.isxander.yacl.gui.YACLScreen; +import net.minecraft.client.gui.ComponentPath; +import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.components.MultiLineLabel; +import net.minecraft.client.gui.narration.NarratedElementType; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.Style; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -50,6 +56,7 @@ public class LabelController implements Controller { public class LabelControllerElement extends AbstractWidget { private List wrappedText; protected MultiLineLabel wrappedTooltip; + protected boolean focused; protected final YACLScreen screen; @@ -70,6 +77,13 @@ public class LabelController implements Controller { textRenderer.drawShadow(matrices, text, getDimension().x() + getXPadding(), y + getYPadding(), option().available() ? -1 : 0xFFA0A0A0); y += textRenderer.lineHeight; } + + if (isFocused()) { + GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().y() - 2, getDimension().xLimit() + 2, getDimension().y(), -1); + GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().y() - 2, getDimension().x(), getDimension().yLimit() + 2, -1); + GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().yLimit(), getDimension().xLimit() + 2, getDimension().yLimit() + 2, -1); + GuiComponent.fill(matrices, getDimension().xLimit(), getDimension().y() - 2, getDimension().xLimit() + 2, getDimension().yLimit() + 2, -1); + } } @Override @@ -147,5 +161,33 @@ public class LabelController implements Controller { public boolean matchesSearch(String query) { return formatValue().getString().toLowerCase().contains(query.toLowerCase()); } + + @Nullable + @Override + public ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) { + if (!option().available()) + return null; + return !this.isFocused() ? ComponentPath.leaf(this) : null; + } + + @Override + public boolean isFocused() { + return focused; + } + + @Override + public void setFocused(boolean focused) { + this.focused = focused; + } + + @Override + public void updateNarration(NarrationElementOutput builder) { + builder.add(NarratedElementType.TITLE, formatValue()); + } + + @Override + public NarrationPriority narrationPriority() { + return NarrationPriority.FOCUSED; + } } } diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java b/src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java index b2fa776..ff20039 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java @@ -39,9 +39,9 @@ public class CyclingControllerElement extends ControllerWidget + case InputConstants.KEY_LEFT -> cycleValue(-1); - case InputConstants.KEY_RIGHT, InputConstants.KEY_UP -> + case InputConstants.KEY_RIGHT -> cycleValue(1); case InputConstants.KEY_RETURN, InputConstants.KEY_SPACE, InputConstants.KEY_NUMPADENTER -> cycleValue(Screen.hasControlDown() || Screen.hasShiftDown() ? -1 : 1); diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java b/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java index ddfdd4d..2d6f1ea 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java @@ -104,8 +104,8 @@ public class SliderControllerElement extends ControllerWidget incrementValue(-1); - case InputConstants.KEY_RIGHT, InputConstants.KEY_UP -> incrementValue(1); + case InputConstants.KEY_LEFT -> incrementValue(-1); + case InputConstants.KEY_RIGHT -> incrementValue(1); default -> { return false; } diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java b/src/client/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java index 2723089..ce9d252 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java @@ -355,8 +355,9 @@ public class StringControllerElement extends ControllerWidget Date: Sun, 29 Jan 2023 22:00:13 +0000 Subject: 22w04a --- build.gradle.kts | 6 +++--- gradle.properties | 4 ++-- .../java/dev/isxander/yacl/gui/controllers/LabelController.java | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/client/java/dev/isxander/yacl/gui/controllers') diff --git a/build.gradle.kts b/build.gradle.kts index 616e452..8517bd4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,10 @@ plugins { java - id("fabric-loom") version "[1.0.16, 1.1.0)" // 1.0.+ but patch must be 16 or higher + id("fabric-loom") version "1.1.+" // 1.0.+ but patch must be 16 or higher id("io.github.juuxel.loom-quiltflower") version "1.8.+" - id("com.modrinth.minotaur") version "2.5.+" + id("com.modrinth.minotaur") version "2.6.+" id("me.hypherionmc.cursegradle") version "2.+" id("com.github.breadmoirai.github-release") version "2.+" `maven-publish` @@ -75,7 +75,7 @@ dependencies { }) modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") - "modClientImplementation"(fabricApi.module("fabric-resource-loader-v0", "0.72.1+1.19.4")) + "modClientImplementation"(fabricApi.module("fabric-resource-loader-v0", "0.73.1+1.19.4")) "testmodImplementation"(sourceSets.main.get().output) "testmodImplementation"(sourceSets["client"].output) diff --git a/gradle.properties b/gradle.properties index 439a116..358c97d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ org.gradle.jvmargs=-Xmx3G -minecraftVersion=23w03a +minecraftVersion=23w04a fabricLoaderVersion=0.14.13 -qmBuild=3 +qmBuild=5 modId=yet-another-config-lib modName=YetAnotherConfigLib diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java index dd0048d..1dfae0b 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/LabelController.java @@ -79,10 +79,10 @@ public class LabelController implements Controller { } if (isFocused()) { - GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().y() - 2, getDimension().xLimit() + 2, getDimension().y(), -1); - GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().y() - 2, getDimension().x(), getDimension().yLimit() + 2, -1); - GuiComponent.fill(matrices, getDimension().x() - 2, getDimension().yLimit(), getDimension().xLimit() + 2, getDimension().yLimit() + 2, -1); - GuiComponent.fill(matrices, getDimension().xLimit(), getDimension().y() - 2, getDimension().xLimit() + 2, getDimension().yLimit() + 2, -1); + GuiComponent.fill(matrices, getDimension().x() - 1, getDimension().y() - 1, getDimension().xLimit() + 1, getDimension().y(), -1); + GuiComponent.fill(matrices, getDimension().x() - 1, getDimension().y() - 1, getDimension().x(), getDimension().yLimit() + 1, -1); + GuiComponent.fill(matrices, getDimension().x() - 1, getDimension().yLimit(), getDimension().xLimit() + 1, getDimension().yLimit() + 1, -1); + GuiComponent.fill(matrices, getDimension().xLimit(), getDimension().y() - 1, getDimension().xLimit() + 1, getDimension().yLimit() + 1, -1); } } -- cgit From 6c08419a6fcd683bab987699f2e73c1ce912980d Mon Sep 17 00:00:00 2001 From: isXander Date: Wed, 8 Feb 2023 20:02:39 +0000 Subject: fix sliders not showing tooltip when focused --- .../isxander/yacl/gui/controllers/slider/SliderControllerElement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/client/java/dev/isxander/yacl/gui/controllers') diff --git a/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java b/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java index 2d6f1ea..d00f3d7 100644 --- a/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java +++ b/src/client/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java @@ -158,7 +158,7 @@ public class SliderControllerElement extends ControllerWidget