Make *OptionChoice components scrollable

This commit is contained in:
2021-03-17 23:45:47 +01:00
parent d90be792bb
commit ecc420d2a5
2 changed files with 28 additions and 3 deletions

View File

@@ -8,7 +8,7 @@ import com.bartlomiejpluta.base.api.game.input.KeyEvent;
import java.util.EnumSet; import java.util.EnumSet;
public class HOptionChoice extends HLayout { public class HOptionChoice extends HScrollableLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
private int selected = 0; private int selected = 0;
@@ -43,17 +43,29 @@ public class HOptionChoice extends HLayout {
blurAll(); blurAll();
selected = (++selected) % children.size(); selected = (++selected) % children.size();
children.get(selected).focus(); children.get(selected).focus();
scrollToSelected();
event.consume(); event.consume();
} else if (event.getKey() == Key.KEY_LEFT && ACTIONS.contains(event.getAction())) { } else if (event.getKey() == Key.KEY_LEFT && ACTIONS.contains(event.getAction())) {
blurAll(); blurAll();
var size = children.size(); var size = children.size();
selected = (((--selected) % size) + size) % size; selected = (((--selected) % size) + size) % size;
children.get(selected).focus(); children.get(selected).focus();
scrollToSelected();
event.consume(); event.consume();
} }
} }
private void scrollToSelected() {
var childrenWidth = 0.0f;
for (int i = 0; i < selected; ++i) {
var child = this.children.get(i);
childrenWidth += child.getMarginLeft() + child.getWidth() + child.getMarginRight();
}
scrollTo(childrenWidth / getWidth());
}
private void blurAll() { private void blurAll() {
for (var child : children) { for (var child : children) {
child.blur(); child.blur();

View File

@@ -8,7 +8,7 @@ import com.bartlomiejpluta.base.api.game.input.KeyEvent;
import java.util.EnumSet; import java.util.EnumSet;
public class VOptionChoice extends VLayout { public class VOptionChoice extends VScrollableLayout {
private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT); private static final EnumSet<KeyAction> ACTIONS = EnumSet.of(KeyAction.PRESS, KeyAction.REPEAT);
private int selected = 0; private int selected = 0;
@@ -43,16 +43,29 @@ public class VOptionChoice extends VLayout {
blurAll(); blurAll();
selected = (++selected) % children.size(); selected = (++selected) % children.size();
children.get(selected).focus(); children.get(selected).focus();
scrollToSelected();
event.consume(); event.consume();
} else if (event.getKey() == Key.KEY_UP && ACTIONS.contains(event.getAction())) { } else if (event.getKey() == Key.KEY_UP && ACTIONS.contains(event.getAction())) {
blurAll(); blurAll();
var size = children.size(); var size = children.size();
selected = (((--selected) % size) + size) % size; selected = (((--selected) % size) + size) % size;
children.get(selected).focus(); children.get(selected).focus();
scrollToSelected();
event.consume(); event.consume();
} }
} }
private void scrollToSelected() {
var childrenHeight = 0.0f;
for (int i = 0; i < selected; ++i) {
var child = children.get(i);
childrenHeight += child.getMarginTop() + child.getHeight() + child.getMarginBottom();
}
scrollTo(childrenHeight / getHeight());
}
private void blurAll() { private void blurAll() {
for (var child : children) { for (var child : children) {
child.blur(); child.blur();