/*
- * Sixth 3D engine. Copyright ©2012-2018, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 3 of the GNU Lesser General Public License
- * or later as published by the Free Software Foundation.
- *
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
*/
-
package eu.svjatoslav.sixth.e3d.gui.humaninput;
import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
private final ViewPanel viewPanel;
private WorldNavigationUserInputTracker defaultInputHandler = new WorldNavigationUserInputTracker();
- private Stack<UserInputHandler> inputHandlers = new Stack<>();
- private UserInputHandler currentUserInputHandler;
+ private Stack<KeyboardInputHandler> inputHandlers = new Stack<>();
+ private KeyboardInputHandler currentUserInputHandler;
public KeyboardFocusStack(final ViewPanel viewPanel) {
this.viewPanel = viewPanel;
pushFocusOwner(defaultInputHandler);
}
- public UserInputHandler getCurrentFocusOwner() {
+ public KeyboardInputHandler getCurrentFocusOwner() {
return currentUserInputHandler;
}
currentUserInputHandler.focusReceived(viewPanel);
}
- public void pushFocusOwner(final UserInputHandler newInputHandler) {
+ public boolean pushFocusOwner(final KeyboardInputHandler newInputHandler) {
+ boolean updateNeeded = false;
+
if (currentUserInputHandler == newInputHandler)
- return;
+ return false;
if (currentUserInputHandler != null) {
- currentUserInputHandler.focusLost(viewPanel);
+ updateNeeded = currentUserInputHandler.focusLost(viewPanel);
inputHandlers.push(currentUserInputHandler);
}
currentUserInputHandler = newInputHandler;
- currentUserInputHandler.focusReceived(viewPanel);
+ updateNeeded |= currentUserInputHandler.focusReceived(viewPanel);
+
+ return updateNeeded;
}
}