Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ public class GuiOptionEditorDraggableList extends ComponentEditor {
private boolean enableDeleting;
private List<Object> activeText;
private final boolean requireNonEmpty;
private int dragStartIndex = -1;
private int dropdownScrollOffset = 0;
private static final int DROPDOWN_MAX_VISIBLE = 8;

private LerpingInteger2 trashAnimation = new LerpingInteger2(255, 3, 2);
private Pair<Integer, Integer> lastListRenderPos = new Pair<>(0, 0);
Expand Down Expand Up @@ -342,7 +343,7 @@ public int getWidth() {
public int getHeight() {
List<Object> remaining = new ArrayList<>(exampleText.keySet());
remaining.removeAll(activeText);
return -1 + 12 * remaining.size();
return -1 + 12 * Math.min(remaining.size(), DROPDOWN_MAX_VISIBLE);
}

@Override
Expand All @@ -352,18 +353,34 @@ public boolean mouseEvent(@NotNull MouseEvent mouseEvent, @NotNull GuiImmediateC
if (click.getMouseState() && context.isHovered()) {
List<Object> remaining = new ArrayList<>(exampleText.keySet());
remaining.removeAll(activeText);
int visibleEnd = Math.min(dropdownScrollOffset + DROPDOWN_MAX_VISIBLE, remaining.size());
int dropdownY = -1;
for (Object indexObject : remaining) {
for (int idx = dropdownScrollOffset; idx < visibleEnd; idx++) {
Object indexObject = remaining.get(idx);
if (context.translated(0, dropdownY + 3, context.getWidth(), 10).isHovered()) {
activeText.add(indexObject);
dropdownScrollOffset = 0;
return true;
}
dropdownY += 12;
}
} else if (click.getMouseState()) {
dropdownScrollOffset = 0;
closeOverlay();
}
}
if (mouseEvent instanceof MouseEvent.Scroll) {
List<Object> remaining = new ArrayList<>(exampleText.keySet());
remaining.removeAll(activeText);
int maxScroll = Math.max(0, remaining.size() - DROPDOWN_MAX_VISIBLE);
MouseEvent.Scroll scroll = (MouseEvent.Scroll) mouseEvent;
if (scroll.getDelta() > 0) {
dropdownScrollOffset = Math.max(0, dropdownScrollOffset - 1);
} else {
dropdownScrollOffset = Math.min(maxScroll, dropdownScrollOffset + 1);
}
return true;
}
return super.mouseEvent(mouseEvent, context);
}

Expand Down Expand Up @@ -396,8 +413,9 @@ public void render(@NotNull GuiImmediateContext context) {
renderContext.drawColoredRect(1, 1, dropdownWidth - 1, dropdownHeight - 1, main); //Middle

int dropdownY = -1;
for (Object indexObject : remaining) {
StructuredText str = getExampleText(indexObject);
int visibleEnd = Math.min(dropdownScrollOffset + DROPDOWN_MAX_VISIBLE, remaining.size());
for (int idx = dropdownScrollOffset; idx < visibleEnd; idx++) {
StructuredText str = getExampleText(remaining.get(idx));
if (str.getText().isEmpty()) {
str = StructuredText.of("<NONE>");
}
Expand Down