diff --git a/src/main/java/codechicken/nei/bookmark/tree/Camera.java b/src/main/java/codechicken/nei/bookmark/tree/Camera.java index 08295964..c133d310 100644 --- a/src/main/java/codechicken/nei/bookmark/tree/Camera.java +++ b/src/main/java/codechicken/nei/bookmark/tree/Camera.java @@ -2,6 +2,8 @@ package codechicken.nei.bookmark.tree; import java.awt.geom.Point2D; +import org.lwjgl.input.Mouse; + class Camera { private static final float ZOOM_MIN = 0.1f; @@ -39,23 +41,34 @@ class Camera { && y < this.widgetY + this.widgetH; } - public void startDrag(int mouseX, int mouseY) { + public void startDrag(Point2D mouse) { this.dragging = true; - this.lastDragX = mouseX; - this.lastDragY = mouseY; + this.lastDragX = (float) mouse.getX(); + this.lastDragY = (float) mouse.getY(); } - public void drag(int mouseX, int mouseY) { + public void drag(Point2D mouse) { if (!this.dragging) { return; } + final float mouseX = (float) mouse.getX(); + final float mouseY = (float) mouse.getY(); + this.scrollX -= (mouseX - this.lastDragX) / this.zoomLevel; this.scrollY -= (mouseY - this.lastDragY) / this.zoomLevel; this.lastDragX = mouseX; this.lastDragY = mouseY; } + public void update(Point2D mouse, int treeWidth, int treeHeight) { + if (this.dragging && Mouse.isButtonDown(0)) { + drag(mouse); + } + + clampToBounds(treeWidth, treeHeight); + } + public void endDrag() { this.dragging = false; } @@ -79,7 +92,6 @@ class Camera { } else { this.scrollY -= direction * this.widgetH / (SCROLL_STEP_DIVISOR * this.zoomLevel); } - } public void centerOn(float worldX, float worldY) { diff --git a/src/main/java/codechicken/nei/bookmark/tree/CraftingTreeCanvas.java b/src/main/java/codechicken/nei/bookmark/tree/CraftingTreeCanvas.java index 64296042..a037e966 100644 --- a/src/main/java/codechicken/nei/bookmark/tree/CraftingTreeCanvas.java +++ b/src/main/java/codechicken/nei/bookmark/tree/CraftingTreeCanvas.java @@ -169,12 +169,12 @@ class CraftingTreeCanvas { : -FIT_MARGIN; } - public void startDrag(int mouseX, int mouseY) { - this.camera.startDrag(mouseX, mouseY); + public void startDrag(Point2D mouse) { + this.camera.startDrag(mouse); } - public void drag(int mouseX, int mouseY) { - this.camera.drag(mouseX, mouseY); + public void drag(Point2D mouse) { + this.camera.drag(mouse); } public void endDrag() { @@ -259,7 +259,7 @@ class CraftingTreeCanvas { public void draw(Point2D mouse, Set collapsedItems, SearchResult searchResult, boolean useInventorySnapshot, ItemTreeSlot hoveredNode, ItemTreeSlot deleteHoverNode) { - this.camera.clampToBounds(this.treeWidth, this.treeHeight); + this.camera.update(mouse, this.treeWidth, this.treeHeight); final float zScrollX = this.camera.scrollX * this.camera.zoomLevel; final float zScrollY = this.camera.scrollY * this.camera.zoomLevel; diff --git a/src/main/java/codechicken/nei/bookmark/tree/GuiCraftingTree.java b/src/main/java/codechicken/nei/bookmark/tree/GuiCraftingTree.java index 3b3ec660..7137e3fd 100644 --- a/src/main/java/codechicken/nei/bookmark/tree/GuiCraftingTree.java +++ b/src/main/java/codechicken/nei/bookmark/tree/GuiCraftingTree.java @@ -757,7 +757,7 @@ public class GuiCraftingTree extends GuiContainer implements INEIGuiHandler, IGu return true; } - this.canvas.startDrag(mouseX, mouseY); + this.canvas.startDrag(getMousePosition()); } return false; @@ -778,7 +778,7 @@ public class GuiCraftingTree extends GuiContainer implements INEIGuiHandler, IGu } - this.canvas.drag(mouseX, mouseY); + this.canvas.drag(getMousePosition()); } @Override diff --git a/src/main/java/codechicken/nei/scroll/ScrollContainer.java b/src/main/java/codechicken/nei/scroll/ScrollContainer.java index faf11cb9..ce4a72e7 100644 --- a/src/main/java/codechicken/nei/scroll/ScrollContainer.java +++ b/src/main/java/codechicken/nei/scroll/ScrollContainer.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.function.Predicate; import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import codechicken.lib.gui.GuiDraw; @@ -249,6 +250,8 @@ public class ScrollContainer extends WidgetContainer { final boolean canScrollHorizontal = canScrollHorizontal(); if (canScrollVertical || canScrollHorizontal) { + dragScrollBars(mousex, mousey, canScrollVertical, canScrollHorizontal); + GuiHelper.useScissor( this.x + this.paddingInlineStart, this.y + this.paddingBlockStart, @@ -273,6 +276,20 @@ public class ScrollContainer extends WidgetContainer { } + private void dragScrollBars(int mousex, int mousey, boolean canScrollVertical, boolean canScrollHorizontal) { + if (!Mouse.isButtonDown(0)) { + return; + } + + if (canScrollVertical) { + this.verticalScrollBar.onMouseDragged(this, mousex, mousey, 0, 0); + } + + if (canScrollHorizontal) { + this.horizontalScrollBar.onMouseDragged(this, mousex, mousey, 0, 0); + } + } + protected void drawContent(int mousex, int mousey) { GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); GL11.glPushMatrix();