aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl3/gui
diff options
context:
space:
mode:
authorisxander <xander@isxander.dev>2024-04-11 19:44:43 +0100
committerisxander <xander@isxander.dev>2024-04-11 19:44:43 +0100
commit25ba978582957647e9a8b3069823df43928f32eb (patch)
tree495b99387f976961bb551293ba6ceb4a4d720ec9 /src/main/java/dev/isxander/yacl3/gui
parentdc56cd7ab946c8f19c1451e0f5d759de95afd0e3 (diff)
downloadYetAnotherConfigLib-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.java4
-rw-r--r--src/main/java/dev/isxander/yacl3/gui/tab/ScrollableNavigationBar.java26
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();
+ }
}