updated = new LinkedHashSet<>();
public Overlay(AppAccess app) {
super(app);
this.mouse = getInput().getMousePos();
this.root = new ConstraintLayout(app, getDisplay());
addChildClient(root);
addChildClient(keybindings);
rendered.add(root);
}
@Override
public final void bindKey(KeyStroke stroke, Runnable task)
{
keybindings.bindKey(stroke, task);
}
@Override
public final void unbindKey(KeyStroke stroke)
{
keybindings.unbindKey(stroke);
}
@Override
public final boolean isVisible()
{
return visible;
}
@Override
public void setVisible(boolean visible)
{
this.visible = visible;
}
/**
* Get rendering layer
*
* @return higher = on top.
*/
@DefaultImpl
public abstract int getZIndex();
/**
* Get event bus listening priority - useful to block incoming events.
*
* @return higher = first.
*/
public int getEventPriority()
{
return getZIndex();
}
/**
* Render the overlay. The caller MUST check for visibility himself.
*/
@Override
public void render()
{
for (final Renderable r : rendered) {
r.render();
}
}
@Override
public void update(double delta)
{
for (final Updateable u : updated) {
u.update(delta);
}
}
@Override
public int compareTo(Overlay o)
{
return o.getEventPriority() - getEventPriority();
}
/**
*
* Screen size changed.
*
*
* Layouts / components should listen for this event and update their cached
* constraints; components added to root or directly to this overlay as
* child clients will receive the event.
*
*/
@Override
@DefaultImpl
public void onLayoutChanged()
{
}
}