Improved code readability. Components now aware of what mouse button was clicked.
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / gui / humaninput / HIDInputTracker.java
index b5061dd..a63c33b 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Sixth 3D engine. Author: Svjatoslav Agejenko. 
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
  * This project is released under Creative Commons Zero (CC0) license.
  */
 package eu.svjatoslav.sixth.e3d.gui.humaninput;
@@ -16,24 +16,26 @@ import java.util.HashMap;
 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;
@@ -69,7 +71,7 @@ public class HIDInputTracker implements
      * @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
@@ -88,7 +90,7 @@ public class HIDInputTracker implements
      * @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)
@@ -97,7 +99,7 @@ public class HIDInputTracker implements
         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);
@@ -114,7 +116,7 @@ public class HIDInputTracker implements
     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 {
@@ -240,7 +242,8 @@ public class HIDInputTracker implements
      * @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