From 5c3b42a3755fa06830fc37c61b15b039c5b53cfa Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 23 Mar 2016 13:23:17 +0100 Subject: [PATCH] Abstract out Scrollbar in different class. --- src/main/java/refinedstorage/gui/GuiGrid.java | 74 ++------------ .../java/refinedstorage/gui/Scrollbar.java | 96 ++++++++++++++++++ .../jei/PluginRefinedStorage.java | 1 + .../textures/gui/crafting_grid.png | Bin 2141 -> 2089 bytes .../refinedstorage/textures/gui/grid.png | Bin 1994 -> 1940 bytes .../assets/refinedstorage/textures/icons.png | Bin 2561 -> 2615 bytes 6 files changed, 106 insertions(+), 65 deletions(-) create mode 100644 src/main/java/refinedstorage/gui/Scrollbar.java diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index aff7fa99a..15c1b2773 100644 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -36,9 +36,7 @@ public class GuiGrid extends GuiBase private int hoveringSlotId; private int hoveringId; - private float currentScroll; - private boolean wasClicking = false; - private boolean isScrolling = false; + private Scrollbar scrollbar = new Scrollbar(174, 20, 12, 70); public GuiGrid(ContainerGrid container, TileGrid grid) { @@ -67,7 +65,9 @@ public class GuiGrid extends GuiBase @Override public void update(int x, int y) { - if (canScroll()) + scrollbar.setCanScroll(getRows() > getVisibleRows()); + + if (scrollbar.canScroll()) { int wheel = Mouse.getDWheel(); @@ -77,74 +77,18 @@ public class GuiGrid extends GuiBase if (wheel == -1) { - setCurrentScroll(currentScroll - delta); + scrollbar.setCurrentScroll(scrollbar.getCurrentScroll() - delta); } else if (wheel == 1) { - setCurrentScroll(currentScroll + delta); + scrollbar.setCurrentScroll(scrollbar.getCurrentScroll() + delta); } } } - private boolean inBoundsOfScrollbar(int x, int y) - { - return inBounds(174, 20, 12, 70, x, y); - } - - public void handleScrolling(int mouseX, int mouseY) - { - if (!canScroll()) - { - isScrolling = false; - wasClicking = false; - currentScroll = 0; - } - else - { - boolean down = Mouse.isButtonDown(0); - - if (!wasClicking && down && inBoundsOfScrollbar(mouseX, mouseY)) - { - isScrolling = true; - } - - if (!down) - { - isScrolling = false; - } - - wasClicking = down; - - if (isScrolling) - { - setCurrentScroll(mouseY - 20); - } - } - } - - public void setCurrentScroll(float newCurrentScroll) - { - if (newCurrentScroll < 0) - { - newCurrentScroll = 0; - } - - if (newCurrentScroll > (89 - 20 - 12 - 2)) - { - newCurrentScroll = 89 - 20 - 12 - 2; - } - - currentScroll = newCurrentScroll; - } - - public boolean canScroll() - { - return getRows() > getVisibleRows(); - } - public int getOffset() { - return (int) (currentScroll / 70f * (float) getRows()); + return (int) (scrollbar.getCurrentScroll() / 70f * (float) getRows()); } public int getVisibleRows() @@ -198,7 +142,7 @@ public class GuiGrid extends GuiBase drawTexture(x, y, 0, 0, width, height); - drawTexture(x + 174, y + 20 + (int) currentScroll, canScroll() ? 232 : 244, 0, 12, 15); + scrollbar.draw(this); searchField.drawTextBox(); } @@ -206,7 +150,7 @@ public class GuiGrid extends GuiBase @Override public void drawForeground(int mouseX, int mouseY) { - handleScrolling(mouseX, mouseY); + scrollbar.update(this, mouseX, mouseY); drawString(7, 7, t("gui.refinedstorage:grid")); diff --git a/src/main/java/refinedstorage/gui/Scrollbar.java b/src/main/java/refinedstorage/gui/Scrollbar.java new file mode 100644 index 000000000..694f43513 --- /dev/null +++ b/src/main/java/refinedstorage/gui/Scrollbar.java @@ -0,0 +1,96 @@ +package refinedstorage.gui; + +import org.lwjgl.input.Mouse; + +public class Scrollbar +{ + private boolean canScroll = true; + + private int x; + private int y; + private int scrollbarWidth; + private int scrollbarHeight; + + private float currentScroll; + private boolean wasClicking = false; + private boolean isScrolling = false; + + public Scrollbar(int x, int y, int scrollbarWidth, int scrollbarHeight) + { + this.x = x; + this.y = y; + this.scrollbarWidth = scrollbarWidth; + this.scrollbarHeight = scrollbarHeight; + } + + public void setCanScroll(boolean canScroll) + { + this.canScroll = canScroll; + } + + public boolean canScroll() + { + return canScroll; + } + + public float getCurrentScroll() + { + return currentScroll; + } + + public void setCurrentScroll(float newCurrentScroll) + { + if (newCurrentScroll < 0) + { + newCurrentScroll = 0; + } + + int scrollbarItselfHeight = 12; + + int max = scrollbarHeight - scrollbarItselfHeight - 3; + + if (newCurrentScroll > max) + { + newCurrentScroll = max; + } + + currentScroll = newCurrentScroll; + } + + public void draw(GuiBase gui) + { + gui.bindTexture("icons.png"); + gui.drawTexture(gui.guiLeft + x, gui.guiTop + y + (int) currentScroll, canScroll() ? 232 : 244, 0, 12, 15); + } + + public void update(GuiBase gui, int mouseX, int mouseY) + { + if (!canScroll()) + { + isScrolling = false; + wasClicking = false; + currentScroll = 0; + } + else + { + boolean down = Mouse.isButtonDown(0); + + if (!wasClicking && down && gui.inBounds(x, y, scrollbarWidth, scrollbarHeight, mouseX, mouseY)) + { + isScrolling = true; + } + + if (!down) + { + isScrolling = false; + } + + wasClicking = down; + + if (isScrolling) + { + setCurrentScroll(mouseY - 20); + } + } + } +} diff --git a/src/main/java/refinedstorage/jei/PluginRefinedStorage.java b/src/main/java/refinedstorage/jei/PluginRefinedStorage.java index cf9898e12..678d28d28 100644 --- a/src/main/java/refinedstorage/jei/PluginRefinedStorage.java +++ b/src/main/java/refinedstorage/jei/PluginRefinedStorage.java @@ -15,6 +15,7 @@ public class PluginRefinedStorage extends BlankModPlugin @Override public void register(IModRegistry registry) { + // @TODO: JEI transfer handler registry.addRecipeCategories(new SoldererRecipeCategory(registry.getJeiHelpers().getGuiHelper())); registry.addRecipeHandlers(new SoldererRecipeHandler()); diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png index 522b89053e8ccf315f25fd3388c3b95b4cb42a7e..d10eaab8107ebbd6447507ce5813a6c782a77156 100644 GIT binary patch delta 944 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 Bt9AeY delta 1459 zcmb_Z|2xwO9RGYi`_ML8lNF20;%W2Tvxgc^=BBA>IfZH!a&ngjD+ai0$|heRod z+Vu75DnmRe^JUZZtk#aXu0k0rs#9hw#oBy1-Teji^#1MjykGCv`}MqDH%Qr}(&1w- zLmGWR7%DS@*6>L~rAH$R;{f720D#Z|-aMA1FN=X`NPI9Skas9Xf7-HrM-VB`4R@{M zisJy~{DLlkz5^x6^IKgK zRfnjP1A(PsM=6S`o~3X5g!tA%@b;ZD3{*p2C#vV4;TE#U=g^Q%9IS8zXM3i%Y#Ba5 zOjt|mW)_1aA%g?*3HjRdz)04AKwWb9`FWsc{QnJ$?#tkU?JwOY;_ikja>tq`1^fSD zeG~-PACl```oq@Zkl-Rb`~E_!6L@MNE3!U57;8_l*G(99R)(;9<^1>t`xL{iuhA$# zVn-qnNC3utub>{_1G}C%yXqtoI$gN5a8BSHRN9mm=Y~(XzJ5L%9SuvQV2u{R5+hW; zjA9w@sq`9CYpG$Yzz()SgG7keDGsQ~j$O7lUn4HAS%C)czC`^?>Dh} z7(N7U@XYC8JE~A%rJ@<3Dm>i!?!xtRkI1Ig1-AWS`tp``#(}4~SM^#k!YqEDYS-OE zhP{vmcEuD-g34 zTN)cnI`>4_%K~Y{6<%JsyIoHHwdCMR9Wxsp8IgMQR!N$uX+!?m=;g~}FBWO8j}2e& ziS(_t$5vDr9s0cjk~h{ljlc+`RLZvdvIf(*T&XJ6i}@WTHf~r>Fv(+XPzN`P+3dDo z+#2-oyHrtnu9eYa6(*flG_wW{wt*iUUSU-QDQ_1*GVS9-j;zjC(>y2+S*hcej3UF> z{OmtqUgS~KK{u%(ClCnR=3U*2$AqF!g_(gHRcoczXpLAz(< zR9H@i5fPSt>~bDfL8REFyzQSVxHC-(;9l(UgPjdCmL3D5@$^v9olZs5{J@u*YUafF zg1Wh+_x<#nYngew*)-&bP0^Z=u4Rgyh+Q{}3?EL8zCR4_bpa zXB6_8c&}V^J3}PmENp%AI7@(>lwh@1kVc!<TbRO