From 550277f9452bbb79bb070942e31a9c4b9be80713 Mon Sep 17 00:00:00 2001 From: nea Date: Mon, 13 Feb 2023 12:47:20 +0100 Subject: Reverse scrolling --- .../moulberry/notenoughupdates/SomeClass.java | 71 -------------------- .../notenoughupdates/TooltipTextScrolling.java | 78 ++++++++++++++++++++++ .../notenoughupdates/mixins/MixinGuiUtils.java | 4 +- .../options/seperateSections/Misc.java | 8 +++ 4 files changed, 88 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/TooltipTextScrolling.java (limited to 'src/main') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java b/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java deleted file mode 100644 index 7f20a44d..00000000 --- a/src/main/java/io/github/moulberry/notenoughupdates/SomeClass.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2023 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see . - */ - -package io.github.moulberry.notenoughupdates; - -import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe; -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import org.lwjgl.input.Mouse; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -@NEUAutoSubscribe -public class SomeClass { - static List lastRenderedTooltip = null; - static int scrollOffset = 0; - static boolean didRenderTooltip = false; - - public static void handleTextLineRendering(List tooltip) { - didRenderTooltip = true; - if (!Objects.equals(tooltip, lastRenderedTooltip)) { - lastRenderedTooltip = new ArrayList<>(tooltip); - scrollOffset = 0; - return; - } - lastRenderedTooltip = new ArrayList<>(tooltip); - for (int i = 0; i < scrollOffset && tooltip.size() > 1; i++) { - tooltip.remove(0); - } - } - - @SubscribeEvent - public void onMouse(GuiScreenEvent.MouseInputEvent.Pre event) { - if (Mouse.getEventDWheel() < 0) { - scrollOffset = Math.max(0, scrollOffset - 1); - } else if (Mouse.getEventDWheel() > 0) { - scrollOffset = Math.min( - lastRenderedTooltip == null ? 0 : Math.max(lastRenderedTooltip.size() - 1, 0), - scrollOffset + 1 - ); - } - } - - @SubscribeEvent - public void onTick(TickEvent.RenderTickEvent event) { - if (event.phase == TickEvent.Phase.START) { - didRenderTooltip = false; - } else if (!didRenderTooltip) { - lastRenderedTooltip = null; - } - } -} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/TooltipTextScrolling.java b/src/main/java/io/github/moulberry/notenoughupdates/TooltipTextScrolling.java new file mode 100644 index 00000000..3261cc17 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/TooltipTextScrolling.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2023 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates; + +import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.lwjgl.input.Mouse; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@NEUAutoSubscribe +public class TooltipTextScrolling { + static List lastRenderedTooltip = null; + static int scrollOffset = 0; + static boolean didRenderTooltip = false; + + public static void handleTextLineRendering(List tooltip) { + didRenderTooltip = true; + if (!Objects.equals(tooltip, lastRenderedTooltip)) { + lastRenderedTooltip = new ArrayList<>(tooltip); + scrollOffset = 0; + return; + } + lastRenderedTooltip = new ArrayList<>(tooltip); + for (int i = 0; i < scrollOffset && tooltip.size() > 1; i++) { + tooltip.remove(0); + } + for (int i = 0; i < -scrollOffset && tooltip.size() > 1; i++) { + tooltip.remove(tooltip.size() - 1); + } + } + + @SubscribeEvent + public void onMouse(GuiScreenEvent.MouseInputEvent.Pre event) { + if (!NotEnoughUpdates.INSTANCE.config.misc.scrollableTooltips) return; + if (Mouse.getEventDWheel() < 0) { + scrollOffset = Math.max( + lastRenderedTooltip == null ? 0 : -Math.max(lastRenderedTooltip.size() - 1, 0) + , scrollOffset - 1 + ); + } else if (Mouse.getEventDWheel() > 0) { + scrollOffset = Math.min( + lastRenderedTooltip == null ? 0 : Math.max(lastRenderedTooltip.size() - 1, 0), + scrollOffset + 1 + ); + } + } + + @SubscribeEvent + public void onTick(TickEvent.RenderTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + didRenderTooltip = false; + } else if (!didRenderTooltip) { + lastRenderedTooltip = null; + } + } +} diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java index 74a072b2..6176b22f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinGuiUtils.java @@ -20,7 +20,7 @@ package io.github.moulberry.notenoughupdates.mixins; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; -import io.github.moulberry.notenoughupdates.SomeClass; +import io.github.moulberry.notenoughupdates.TooltipTextScrolling; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -80,6 +80,6 @@ public class MixinGuiUtils { FontRenderer font, CallbackInfo ci ) { - SomeClass.handleTextLineRendering(textLines); + TooltipTextScrolling.handleTextLineRendering(textLines); } } diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java index 47e51eec..6b524dd0 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java @@ -311,4 +311,12 @@ public class Misc { @ConfigEditorBoolean public boolean dungeonGroupsPV = true; + @Expose + @ConfigOption( + name = "Scrollable Tooltips", + desc = "Make tooltips text scrollable, by making some text lines disappear when using the mouse while hovering over an item." + ) + @ConfigEditorBoolean + public boolean scrollableTooltips = false; + } -- cgit