/*
- * 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.geometry.Point2D;
import java.util.List;
import java.util.Map;
+/**
+ * This class is responsible for tracking human input devices (keyboard, mouse, etc.) and
+ * forwarding those inputs to subsequent virtual components.
+ */
public class HIDInputTracker implements
MouseMotionListener, KeyListener, MouseListener, MouseWheelListener, ViewRenderListener {
/**
- * <pre>
- * Key is keyboard key code.
- * Value is system milliseconds when key was pressed.
- *
- * So by reading the map one can determine currently pressed keys as well as duration.
- * </pre>
+ * <p> Map of pressed keys. </p>
+ * <p> Key is mouse button code. </p>
+ * <p> Value is system milliseconds when button was pressed. </p>
+ * <p> So by reading the map one can determine currently pressed buttons as well as duration. </p>
*/
private final Map<Integer, Long> pressedKeysToPressedTimeMap = new HashMap<>();
private final List<MouseEvent> detectedMouseEvents = new ArrayList<>();
private final List<KeyEvent> detectedKeyEvents = new ArrayList<>();
private int wheelMovedDirection = 0;
- private Point2D mouseDraggedDirection = new Point2D();
+ private final Point2D mouseDraggedDirection = new Point2D();
private Point2D oldMouseCoordinatesWhenDragging;
- private ViewPanel viewPanel;
+ private final ViewPanel viewPanel;
private Point2D currentMouseLocation;
private boolean mouseMoved;
private boolean mouseWithinWindow = false;
* @return <code>true</code> if view needs to be repainted.
*/
private boolean handleKeyboardEvents() {
- final UserInputHandler currentFocusOwner = viewPanel.getKeyboardFocusStack().getCurrentFocusOwner();
+ final KeyboardInputHandler currentFocusOwner = viewPanel.getKeyboardFocusStack().getCurrentFocusOwner();
ArrayList<KeyEvent> unprocessedKeyboardEvents = getUnprocessedKeyboardEvents();
return currentFocusOwner != null
* @return <code>true</code> if view update is needed.
*/
private boolean forwardKeyboardEventsToFocusOwner(
- UserInputHandler currentFocusOwner, ArrayList<KeyEvent> keyEvents) {
+ KeyboardInputHandler currentFocusOwner, ArrayList<KeyEvent> keyEvents) {
boolean viewUpdateNeeded = false;
for (KeyEvent keyEvent : keyEvents)
return viewUpdateNeeded;
}
- private boolean processKeyEvent(UserInputHandler currentFocusOwner, KeyEvent keyEvent) {
+ private boolean processKeyEvent(KeyboardInputHandler currentFocusOwner, KeyEvent keyEvent) {
switch (keyEvent.getID()) {
case KeyEvent.KEY_PRESSED:
return currentFocusOwner.keyPressed(keyEvent, viewPanel);
private synchronized boolean handleMouseClicksAndHover(final ViewPanel viewPanel) {
boolean rerenderNeeded = false;
MouseEvent event = findClickLocationToTrace();
- if (event != null){
+ if (event != null) {
// process mouse clicks as a first priority
rerenderNeeded = true;
} else {
* @return <code>true</code> if view needs to be repainted.
*/
private boolean handleMouseDragging() {
- // TODO: need to detect whether user moved mouse or touch screen
+ // TODO: It would be nice here to detect somehow whether user moved mouse or touch screen.
+ // in case of touch screen, we would like to reverse movement along X and Y axis.
final Avatar avatar = viewPanel.getAvatar();
// for mouse