kotcrab/vis-ui

Window close should have an close callback listener

Opened this issue · 1 comments

Assume using kotlin

addCloseButton(onClose = {
    println("window closed")
})
	public void addCloseButton () {
		Label titleLabel = getTitleLabel();
		Table titleTable = getTitleTable();

		VisImageButton closeButton = new VisImageButton("close-window");
		titleTable.add(closeButton).padRight(-getPadRight() + 0.7f);
		closeButton.addListener(new ChangeListener() {
			@Override
			public void changed (ChangeEvent event, Actor actor) {
				close();
			}
		});
		closeButton.addListener(new ClickListener() {
			@Override
			public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
				event.cancel();
				return true;
			}
		});

		if (titleLabel.getLabelAlign() == Align.center && titleTable.getChildren().size == 2)
			titleTable.getCell(titleLabel).padLeft(closeButton.getWidth() * 2);
	}

Callback support would probably be the most convenient approach, especially with Java 8+ or Kotlin. For now, the workaround would be to extend the class and override the protected void close method. Remember to call super if you want the default fade-out behavior.