Make storage overlay scrollbar draggable
This commit is contained in:
@@ -166,4 +166,22 @@ public class PatchHandledScreen<T extends ScreenHandler> extends Screen implemen
|
||||
}
|
||||
return original.call(instance, mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
@Inject(method = "mouseDragged", at = @At("HEAD"), cancellable = true)
|
||||
public void overrideMouseDrags(double mouseX, double mouseY, int button, double deltaX, double deltaY, CallbackInfoReturnable<Boolean> cir) {
|
||||
if (override != null) {
|
||||
if (override.mouseDragged(mouseX, mouseY, button, deltaX, deltaY))
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "mouseReleased",
|
||||
at = @At("HEAD"), cancellable = true)
|
||||
public void overrideMouseReleases(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) {
|
||||
if (override != null) {
|
||||
if (override.mouseReleased(mouseX, mouseY, button))
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
package moe.nea.firmament.features.inventory.storageoverlay
|
||||
|
||||
import me.shedaniel.math.Point
|
||||
@@ -59,6 +58,14 @@ class StorageOverlayCustom(
|
||||
return false
|
||||
}
|
||||
|
||||
override fun mouseReleased(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
return overview.mouseReleased(mouseX, mouseY, button)
|
||||
}
|
||||
|
||||
override fun mouseDragged(mouseX: Double, mouseY: Double, button: Int, deltaX: Double, deltaY: Double): Boolean {
|
||||
return overview.mouseDragged(mouseX, mouseY, button, deltaX, deltaY)
|
||||
}
|
||||
|
||||
override fun mouseClick(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
return overview.mouseClicked(mouseX, mouseY, button, (handler as? StorageBackingHandle.Page)?.storagePageSlot)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
package moe.nea.firmament.features.inventory.storageoverlay
|
||||
|
||||
import me.shedaniel.math.Point
|
||||
@@ -8,10 +7,7 @@ import net.minecraft.client.gui.screen.Screen
|
||||
import net.minecraft.screen.slot.Slot
|
||||
import net.minecraft.text.Text
|
||||
import net.minecraft.util.Identifier
|
||||
import moe.nea.firmament.annotations.Subscribe
|
||||
import moe.nea.firmament.events.CommandEvent
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.ScreenUtil
|
||||
import moe.nea.firmament.util.assertTrueOr
|
||||
|
||||
class StorageOverlayScreen : Screen(Text.literal("")) {
|
||||
@@ -56,6 +52,7 @@ class StorageOverlayScreen : Screen(Text.literal("")) {
|
||||
.coerceAtMost((width - PADDING) / (PAGE_WIDTH + PADDING))
|
||||
.coerceAtLeast(1)
|
||||
measurements = Measurements()
|
||||
scroll = scroll.coerceAtMost(getMaxScroll()).coerceAtLeast(0F)
|
||||
}
|
||||
|
||||
override fun mouseScrolled(
|
||||
@@ -185,10 +182,31 @@ class StorageOverlayScreen : Screen(Text.literal("")) {
|
||||
context.disableScissor()
|
||||
}
|
||||
|
||||
var knobGrabbed = false
|
||||
|
||||
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
return mouseClicked(mouseX, mouseY, button, null)
|
||||
}
|
||||
|
||||
override fun mouseReleased(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
if (knobGrabbed) {
|
||||
knobGrabbed = false
|
||||
return true
|
||||
}
|
||||
return super.mouseReleased(mouseX, mouseY, button)
|
||||
}
|
||||
|
||||
override fun mouseDragged(mouseX: Double, mouseY: Double, button: Int, deltaX: Double, deltaY: Double): Boolean {
|
||||
if (knobGrabbed) {
|
||||
val sbRect = getScrollBarRect()
|
||||
val percentage = (mouseY - sbRect.getY()) / sbRect.getHeight()
|
||||
scroll = (getMaxScroll() * percentage).toFloat()
|
||||
mouseScrolled(0.0, 0.0, 0.0, 0.0)
|
||||
return true
|
||||
}
|
||||
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY)
|
||||
}
|
||||
|
||||
fun mouseClicked(mouseX: Double, mouseY: Double, button: Int, activePage: StoragePageSlot?): Boolean {
|
||||
if (getScrollPanelInner().contains(mouseX, mouseY)) {
|
||||
val data = StorageOverlay.Data.data ?: StorageData()
|
||||
@@ -202,10 +220,10 @@ class StorageOverlayScreen : Screen(Text.literal("")) {
|
||||
}
|
||||
val sbRect = getScrollBarRect()
|
||||
if (sbRect.contains(mouseX, mouseY)) {
|
||||
// TODO: support dragging of the mouse and such
|
||||
val percentage = (mouseY - sbRect.getY()) / sbRect.getHeight()
|
||||
scroll = (getMaxScroll() * percentage).toFloat()
|
||||
mouseScrolled(0.0, 0.0, 0.0, 0.0)
|
||||
knobGrabbed = true
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
package moe.nea.firmament.util.customgui
|
||||
|
||||
import me.shedaniel.math.Rectangle
|
||||
@@ -69,4 +68,12 @@ abstract class CustomGui {
|
||||
open fun onVoluntaryExit(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
open fun mouseReleased(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
open fun mouseDragged(mouseX: Double, mouseY: Double, button: Int, deltaX: Double, deltaY: Double): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user