Make *OptionChoice components scrollable
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user