@@ -20,8 +20,8 @@ public class DropdownWidget<T> extends ElementListWidget<DropdownWidget.Entry<T>
20
20
protected T selected ;
21
21
protected boolean open ;
22
22
23
- public DropdownWidget (MinecraftClient minecraftClient , int x , int y , int width , List <T > entries , Consumer <T > selectCallback , T selected ) {
24
- super (minecraftClient , width , ( entries .size () + 1 ) * ENTRY_HEIGHT + 8 , y , ENTRY_HEIGHT );
23
+ public DropdownWidget (MinecraftClient minecraftClient , int x , int y , int width , int maxHeight , List <T > entries , Consumer <T > selectCallback , T selected ) {
24
+ super (minecraftClient , width , Math . min (( entries .size () + 1 ) * ENTRY_HEIGHT + 8 , maxHeight ) , y , ENTRY_HEIGHT );
25
25
setX (x );
26
26
this .entries = entries ;
27
27
this .selectCallback = selectCallback ;
@@ -58,29 +58,44 @@ public void renderWidget(DrawContext context, int mouseX, int mouseY, float delt
58
58
context .getMatrices ().push ();
59
59
context .getMatrices ().translate (0 , 0 , 100 );
60
60
61
- context .fill (getX (), getY (), getX () + width , getY () + headerHeight , 0xFF000000 );
62
- context .drawHorizontalLine (getX (), getX () + width , getY (), 0xFFFFFFFF );
63
- context .drawHorizontalLine (getX (), getX () + width , getY () + headerHeight , 0xFFFFFFFF );
64
- context .drawVerticalLine (getX (), getY (), getY () + headerHeight , 0xFFFFFFFF );
65
- context .drawVerticalLine (getX () + width , getY (), getY () + headerHeight , 0xFFFFFFFF );
61
+ int y = getY () - (int ) getScrollAmount ();
62
+ int height = getMaxPosition ();
63
+
64
+ context .fill (getX (), y , getX () + width , y + headerHeight , 0xFF000000 );
65
+ context .drawHorizontalLine (getX (), getX () + width , y , 0xFFFFFFFF );
66
+ context .drawHorizontalLine (getX (), getX () + width , y + headerHeight , 0xFFFFFFFF );
67
+ context .drawVerticalLine (getX (), y , y + headerHeight , 0xFFFFFFFF );
68
+ context .drawVerticalLine (getX () + width , y , y + headerHeight , 0xFFFFFFFF );
66
69
67
70
if (open ) {
68
- context .fill (getX (), getY () + headerHeight + 1 , getX () + width , getY () + height , 0xFF000000 );
69
- context .drawHorizontalLine (getX (), getX () + width , getY () + height , 0xFFFFFFFF );
70
- context .drawVerticalLine (getX (), getY () + headerHeight , getY () + height , 0xFFFFFFFF );
71
- context .drawVerticalLine (getX () + width , getY () + headerHeight , getY () + height , 0xFFFFFFFF );
71
+ context .fill (getX (), y + headerHeight + 1 , getX () + width , y + height , 0xFF000000 );
72
+ context .drawHorizontalLine (getX (), getX () + width , y + height , 0xFFFFFFFF );
73
+ context .drawVerticalLine (getX (), y + headerHeight , y + height , 0xFFFFFFFF );
74
+ context .drawVerticalLine (getX () + width , y + headerHeight , y + height , 0xFFFFFFFF );
72
75
73
76
super .renderWidget (context , mouseX , mouseY , delta );
74
77
} else {
75
- renderHeader (context , getRowLeft (), getY () + 4 - ( int ) getScrollAmount () );
78
+ renderHeader (context , getRowLeft (), y + 4 );
76
79
}
77
80
78
81
context .getMatrices ().pop ();
79
82
}
80
83
84
+ @ Override
85
+ protected void drawMenuListBackground (DrawContext context ) {}
86
+
87
+ @ Override
88
+ protected void drawHeaderAndFooterSeparators (DrawContext context ) {}
89
+
90
+ @ Override
91
+ public boolean mouseScrolled (double mouseX , double mouseY , double horizontalAmount , double verticalAmount ) {
92
+ return open && super .mouseScrolled (mouseX , mouseY , horizontalAmount , verticalAmount );
93
+ }
94
+
81
95
protected void select (T entry ) {
82
96
selected = entry ;
83
97
open = false ;
98
+ setScrollAmount (0 );
84
99
if (selected != prevSelected ) {
85
100
selectCallback .accept (entry );
86
101
prevSelected = selected ;
0 commit comments