Open dropdowns within the visible part of their list
ElementContext carries the part of the screen where an element can be seen, passed down in a Frame and narrowed by each Scroll to its own box. A dropdown opens below only if its list fits in that part, otherwise above if it fits there, or else on the side with more room, so one at the bottom of a scrolled list no longer opens past the list's edge. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -15,15 +15,14 @@ public class ElementRenderer {
|
||||
}
|
||||
|
||||
public static void render(List<Element> elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY) {
|
||||
render(elements, elapsed, renderScope, mouseX, mouseY, 0, 0);
|
||||
render(elements, elapsed, renderScope, mouseX, mouseY, ElementContext.Frame.SCREEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders elements whose parent's top-left corner is at
|
||||
* ({@code parentX}, {@code parentY}) on the screen.
|
||||
* Renders a container's children within its {@code frame}.
|
||||
*/
|
||||
public static void render(List<Element> elements, long elapsed, RenderScope renderScope, int mouseX, int mouseY,
|
||||
int parentX, int parentY) {
|
||||
ElementContext.Frame frame) {
|
||||
for (Element element : elements) {
|
||||
element.playAnimationFrame(elapsed);
|
||||
|
||||
@@ -31,7 +30,7 @@ public class ElementRenderer {
|
||||
renderScope.setOpacity(element.opacity);
|
||||
renderScope.getMatrixStack().translate(element.x, element.y);
|
||||
renderScope.getMatrixStack().scale(element.scale, element.scale);
|
||||
element.render(renderScope, new ElementContext(elapsed, mouseX, mouseY, parentX, parentY, element));
|
||||
element.render(renderScope, new ElementContext(elapsed, mouseX, mouseY, frame, element));
|
||||
renderScope.getMatrixStack().pop();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user