diff options
author | isxander <xander@isxander.dev> | 2024-04-11 19:44:43 +0100 |
---|---|---|
committer | isxander <xander@isxander.dev> | 2024-04-11 19:44:43 +0100 |
commit | 25ba978582957647e9a8b3069823df43928f32eb (patch) | |
tree | 495b99387f976961bb551293ba6ceb4a4d720ec9 /src/main/java/dev/isxander/yacl3/gui | |
parent | dc56cd7ab946c8f19c1451e0f5d759de95afd0e3 (diff) | |
download | YetAnotherConfigLib-25ba978582957647e9a8b3069823df43928f32eb.tar.gz YetAnotherConfigLib-25ba978582957647e9a8b3069823df43928f32eb.tar.bz2 YetAnotherConfigLib-25ba978582957647e9a8b3069823df43928f32eb.zip |
Replace some AW with mixin and remove common project
Diffstat (limited to 'src/main/java/dev/isxander/yacl3/gui')
-rw-r--r-- | src/main/java/dev/isxander/yacl3/gui/YACLScreen.java | 4 | ||||
-rw-r--r-- | src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java | 26 |
2 files changed, 19 insertions, 11 deletions
diff --git a/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java b/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java index e88c144..ec70d60 100644 --- a/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java +++ b/src/main/java/dev/isxander/yacl3/gui/YACLScreen.java @@ -43,7 +43,7 @@ public class YACLScreen extends Screen { private final Screen parent; public final TabManager tabManager = new TabManager(this::addRenderableWidget, this::removeWidget); - public TabNavigationBar tabNavigationBar; + public ScrollableNavigationBar tabNavigationBar; public ScreenRectangle tabArea; public Component saveButtonMessage; @@ -67,7 +67,7 @@ public class YACLScreen extends Screen { tabArea = new ScreenRectangle(0, 24 - 1, this.width, this.height - 24 + 1); int currentTab = tabNavigationBar != null - ? tabNavigationBar.tabs.indexOf(tabManager.getCurrentTab()) + ? tabNavigationBar.getTabs().indexOf(tabManager.getCurrentTab()) : 0; if (currentTab == -1) currentTab = 0; diff --git a/src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java b/src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java index 5829202..f458557 100644 --- a/src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java +++ b/src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java @@ -23,11 +23,14 @@ public class ScrollableNavigationBar extends TabNavigationBar { private int scrollOffset; private int maxScrollOffset; + private final TabNavigationBarAccessor accessor; + public ScrollableNavigationBar(int width, TabManager tabManager, Iterable<? extends Tab> tabs) { super(width, tabManager, ImmutableList.copyOf(tabs)); + this.accessor = (TabNavigationBarAccessor) this; // add tab tooltips to the tab buttons - for (TabButton tabButton : this.tabButtons) { + for (TabButton tabButton : accessor.getTabButtons()) { if (tabButton.tab() instanceof TabExt tab) { tabButton.setTooltip(tab.getTooltip()); } @@ -36,20 +39,21 @@ public class ScrollableNavigationBar extends TabNavigationBar { @Override public void arrangeElements() { - int noScrollWidth = this.width - NAVBAR_MARGIN*2; + ImmutableList<TabButton> tabButtons = accessor.getTabButtons(); + int noScrollWidth = accessor.getWidth() - NAVBAR_MARGIN*2; int allTabsWidth = 0; // first pass: set the width of each tab button - for (TabButton tabButton : this.tabButtons) { + for (TabButton tabButton : tabButtons) { int buttonWidth = font.width(tabButton.getMessage()) + 20; allTabsWidth += buttonWidth; tabButton.setWidth(buttonWidth); } if (allTabsWidth < noScrollWidth) { - int equalWidth = noScrollWidth / this.tabButtons.size(); - var smallTabs = this.tabButtons.stream().filter(btn -> btn.getWidth() < equalWidth).toList(); - var bigTabs = this.tabButtons.stream().filter(btn -> btn.getWidth() >= equalWidth).toList(); + int equalWidth = noScrollWidth / tabButtons.size(); + var smallTabs = tabButtons.stream().filter(btn -> btn.getWidth() < equalWidth).toList(); + var bigTabs = tabButtons.stream().filter(btn -> btn.getWidth() >= equalWidth).toList(); int leftoverWidth = noScrollWidth - bigTabs.stream().mapToInt(AbstractWidget::getWidth).sum(); int equalWidthForSmallTabs = leftoverWidth / smallTabs.size(); for (TabButton tabButton : smallTabs) { @@ -64,7 +68,7 @@ public class ScrollableNavigationBar extends TabNavigationBar { layout.setY(0); scrollOffset = 0; - layout.setX(Math.max((this.width - allTabsWidth) / 2, NAVBAR_MARGIN)); + layout.setX(Math.max((accessor.getWidth() - allTabsWidth) / 2, NAVBAR_MARGIN)); this.maxScrollOffset = Math.max(0, allTabsWidth - noScrollWidth); } @@ -113,8 +117,12 @@ public class ScrollableNavigationBar extends TabNavigationBar { protected void ensureVisible(TabButton tabButton) { if (tabButton.getX() < NAVBAR_MARGIN) { this.setScrollOffset(this.scrollOffset - (NAVBAR_MARGIN - tabButton.getX())); - } else if (tabButton.getX() + tabButton.getWidth() > this.width - NAVBAR_MARGIN) { - this.setScrollOffset(this.scrollOffset + (tabButton.getX() + tabButton.getWidth() - (this.width - NAVBAR_MARGIN))); + } else if (tabButton.getX() + tabButton.getWidth() > accessor.getWidth() - NAVBAR_MARGIN) { + this.setScrollOffset(this.scrollOffset + (tabButton.getX() + tabButton.getWidth() - (accessor.getWidth() - NAVBAR_MARGIN))); } } + + public ImmutableList<Tab> getTabs() { + return accessor.getTabs(); + } } |