package hunternif.mc.atlas.client.gui.core; import hunternif.mc.atlas.client.Textures; public class GuiScrollingContainer extends GuiComponent { private final GuiViewport viewport; private final GuiHScrollbar scrollbarHor; private final GuiVScrollbar scrollbarVer; public GuiScrollingContainer() { viewport = new GuiViewport(); scrollbarHor = new GuiHScrollbar(viewport); scrollbarHor.setTexture(Textures.SCROLLBAR_HOR, 8, 7, 2); scrollbarVer = new GuiVScrollbar(viewport); scrollbarVer.setTexture(Textures.SCROLLBAR_VER, 7, 8, 2); setWheelScrollsVertially(); this.addChild(viewport); this.addChild(scrollbarHor); this.addChild(scrollbarVer); } /** Add scrolling content. Use removeContent to remove it. * @return the child added */ public GuiComponent addContent(GuiComponent child) { return viewport.addContent(child); } /** @return the child removed */ public GuiComponent removeContent(GuiComponent child) { return viewport.removeContent(child); } public void removeAllContent() { viewport.removeAllContent(); } public void setViewportSize(int width, int height) { viewport.setSize(width, height); scrollbarHor.setRelativeCoords(0, height); scrollbarHor.setSize(width, scrollbarHor.getHeight()); scrollbarVer.setRelativeCoords(width, 0); scrollbarVer.setSize(scrollbarVer.getWidth(), height); } @Override protected void validateSize() { super.validateSize(); scrollbarHor.updateContent(); scrollbarVer.updateContent(); } /** Mouse wheel will affect <b>horizontal</b> scrolling and not vertical. * This is the default behavior.*/ public void setWheelScrollsHorizontally() { scrollbarHor.setUsesWheel(true); scrollbarVer.setUsesWheel(false); } /** Mouse wheel will affect <b>vertical</b> scrolling and not horizontal. */ private void setWheelScrollsVertially() { scrollbarHor.setUsesWheel(false); scrollbarVer.setUsesWheel(true); } /** Scroll to the specified point relative to the content's top left corner. * The container attempts to place the specified point at the top left * corner of the viewport as well. */ public void scrollTo(int x, int y) { scrollbarHor.setScrollPos(x); scrollbarVer.setScrollPos(y); } @Override public int getWidth() { return super.getWidth() - (scrollbarVer.visible ? 0 : scrollbarVer.getWidth()); } @Override public int getHeight() { return super.getHeight() - (scrollbarHor.visible ? 0 : scrollbarHor.getHeight()); } }