Merge branch 'master' into add-items
This commit is contained in:
commit
ce573b51ce
16
build.gradle
16
build.gradle
@ -40,7 +40,6 @@ compileJava {
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
|
||||
/*
|
||||
* Specify Windcorp Maven repository
|
||||
@ -66,8 +65,8 @@ dependencies {
|
||||
|
||||
// Log4j
|
||||
// A logging library
|
||||
implementation 'org.apache.logging.log4j:log4j-api:2.16.0'
|
||||
implementation 'org.apache.logging.log4j:log4j-core:2.16.0'
|
||||
implementation 'org.apache.logging.log4j:log4j-api:2.17.0'
|
||||
implementation 'org.apache.logging.log4j:log4j-core:2.17.0'
|
||||
|
||||
// JUnit
|
||||
// A unit-testing library
|
||||
@ -173,13 +172,20 @@ compileJava.mustRunAfter addNativeDependencies // Make sure runtimeOnly has not
|
||||
task requestLinuxDependencies {
|
||||
description 'Adds linux, linux-arm64 and linux-arm32 native libraries to built artifacts.'
|
||||
doFirst {
|
||||
project.ext.platforms.addAll(['natives-linux', 'natives-linux-arm64', 'natives-linux-arm32'])
|
||||
project.ext.platforms.addAll([
|
||||
'natives-linux',
|
||||
'natives-linux-arm64',
|
||||
'natives-linux-arm32'
|
||||
])
|
||||
}
|
||||
}
|
||||
task requestWindowsDependencies {
|
||||
description 'Adds windows and windows-x86 native libraries to built artifacts.'
|
||||
doFirst {
|
||||
project.ext.platforms.addAll(['natives-windows', 'natives-windows-x86'])
|
||||
project.ext.platforms.addAll([
|
||||
'natives-windows',
|
||||
'natives-windows-x86'
|
||||
])
|
||||
}
|
||||
}
|
||||
task requestMacOSDependencies {
|
||||
|
@ -563,6 +563,10 @@ public class Component extends Named {
|
||||
inputBus.unregister(listener);
|
||||
}
|
||||
|
||||
protected boolean passInputToChildren(InputEvent e) {
|
||||
return true;
|
||||
}
|
||||
|
||||
InputBus getInputBus() {
|
||||
return inputBus;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import ru.windcorp.progressia.client.graphics.flat.RenderTarget;
|
||||
import ru.windcorp.progressia.client.graphics.input.InputEvent;
|
||||
import ru.windcorp.progressia.client.graphics.input.KeyEvent;
|
||||
import ru.windcorp.progressia.client.graphics.input.bus.InputBus;
|
||||
import ru.windcorp.progressia.common.util.LowOverheadCache;
|
||||
import ru.windcorp.progressia.common.util.StashingStack;
|
||||
|
||||
public abstract class GUILayer extends AssembledFlatLayer {
|
||||
@ -75,9 +76,11 @@ public abstract class GUILayer extends AssembledFlatLayer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Stack for {@link #handleInput(InputEvent)}.
|
||||
* Stacks for {@link #handleInput(InputEvent)}.
|
||||
*/
|
||||
private StashingStack<EventHandlingFrame> path = new StashingStack<>(64, EventHandlingFrame::new);
|
||||
private final LowOverheadCache<StashingStack<EventHandlingFrame>> pathCache = new LowOverheadCache<>(
|
||||
() -> new StashingStack<>(64, EventHandlingFrame::new)
|
||||
);
|
||||
|
||||
/*
|
||||
* This is essentially a depth-first iteration of the component tree. The
|
||||
@ -85,10 +88,10 @@ public abstract class GUILayer extends AssembledFlatLayer {
|
||||
*/
|
||||
@Override
|
||||
public void handleInput(InputEvent event) {
|
||||
StashingStack<EventHandlingFrame> path = pathCache.grab();
|
||||
|
||||
if (!path.isEmpty()) {
|
||||
throw new IllegalStateException(
|
||||
"path is not empty: " + path + ". Are events being processed concurrently?"
|
||||
);
|
||||
throw new IllegalStateException("path is not empty: " + path);
|
||||
}
|
||||
|
||||
path.push().init(root);
|
||||
@ -101,7 +104,7 @@ public abstract class GUILayer extends AssembledFlatLayer {
|
||||
Component c = it.next();
|
||||
|
||||
if (c.isEnabled()) {
|
||||
if (c.getChildren().isEmpty()) {
|
||||
if (c.getChildren().isEmpty() || !c.passInputToChildren(event)) {
|
||||
c.getInputBus().dispatch(event);
|
||||
} else {
|
||||
path.push().init(c);
|
||||
@ -114,6 +117,8 @@ public abstract class GUILayer extends AssembledFlatLayer {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pathCache.release(path);
|
||||
}
|
||||
|
||||
private void attemptFocusTransfer(KeyEvent e) {
|
||||
|
Reference in New Issue
Block a user