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