package buildcraft.core.lib.gui.widgets; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import buildcraft.core.lib.gui.GuiBuildCraft; import buildcraft.core.lib.utils.MathUtils; public class ScrollbarWidget extends Widget { private static final int HEIGHT = 14; private int pos, len; private boolean isClicking; public ScrollbarWidget(int x, int y, int u, int v, int h) { super(x, y, u, v, 6, h); } @Override @SideOnly(Side.CLIENT) public void draw(GuiBuildCraft gui, int guiX, int guiY, int mouseX, int mouseY) { gui.drawTexturedModalRect(guiX + x, guiY + y, u, v, w, h); int posPx = pos * (h - HEIGHT + 2) / len; gui.drawTexturedModalRect(guiX + x, guiY + y + posPx, u + 6, v, w, HEIGHT); } private void updateLength(int mouseY) { setPosition(((mouseY - y) * len + (h / 2)) / h); } @Override @SideOnly(Side.CLIENT) public boolean handleMouseClick(int mouseX, int mouseY, int mouseButton) { if (mouseButton == 0) { isClicking = true; updateLength(mouseY); return true; } return false; } @Override @SideOnly(Side.CLIENT) public void handleMouseMove(int mouseX, int mouseY, int mouseButton, long time) { if (isClicking && mouseButton == 0) { updateLength(mouseY); } } @Override @SideOnly(Side.CLIENT) public void handleMouseRelease(int mouseX, int mouseY, int eventType) { if (isClicking && eventType == 0) { updateLength(mouseY); isClicking = false; } } public int getPosition() { return pos; } public void setPosition(int pos) { this.pos = MathUtils.clamp(pos, 0, len); } public void setLength(int len) { this.len = len; setPosition(this.pos); } }