Improved code readability. Components now aware of what mouse button was clicked.
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / gui / RenderingContext.java
index 3641bc9..b6417e5 100644 (file)
@@ -28,11 +28,11 @@ public class RenderingContext {
     /**
      * UI component that mouse is currently hovering over.
      */
-    private MouseInteractionController currentMouseOverComponent;
+    private MouseInteractionController objectPreviouslyUnderMouseCursor;
 
     public void prepareForNewFrameRendering(){
         mouseEvent = null;
-        objectUnderMouse = null;
+        currentObjectUnderMouseCursor = null;
     }
 
     /**
@@ -51,15 +51,15 @@ public class RenderingContext {
     /**
      * Item that user clicked on.
      */
-    private MouseInteractionController objectUnderMouse;
+    private MouseInteractionController currentObjectUnderMouseCursor;
 
     /**
      * Called when given object was detected under mouse cursor, while processing {@link #mouseEvent}.
      * Because objects are rendered back to front. The last method caller will set the top-most object, if
      * there are multiple objects under mouse cursor.
      */
-    public void setObjectUnderMouse(MouseInteractionController objectUnderMouse) {
-        this.objectUnderMouse = objectUnderMouse;
+    public void setCurrentObjectUnderMouseCursor(MouseInteractionController currentObjectUnderMouseCursor) {
+        this.currentObjectUnderMouseCursor = currentObjectUnderMouseCursor;
     }
 
     public RenderingContext(final int width, final int height) {
@@ -85,28 +85,24 @@ public class RenderingContext {
     /**
      * @return <code>true</code> if view repaint is needed.
      */
-    public boolean handleDetectedComponentMouseEvents() {
-        if (objectUnderMouse != null) {
-            if (mouseEvent.button == 0) {
-                // mouse over
-                if (currentMouseOverComponent == null) {
-                    currentMouseOverComponent = objectUnderMouse;
-                    return currentMouseOverComponent.mouseEntered();
-                } else if (currentMouseOverComponent != objectUnderMouse) {
-                    boolean viewRepaintNeeded = currentMouseOverComponent.mouseExited();
-                    currentMouseOverComponent = objectUnderMouse;
-                    return viewRepaintNeeded | currentMouseOverComponent.mouseEntered();
-                }
-            } else {
-                // mouse click
-                return objectUnderMouse.mouseClicked();
-            }
-        } else if (currentMouseOverComponent != null) {
-            boolean viewRepaintNeeded = currentMouseOverComponent.mouseExited();
-            currentMouseOverComponent = null;
-            return viewRepaintNeeded;
+    public boolean handlePossibleComponentMouseEvent() {
+        if (mouseEvent == null) return false;
+
+        boolean viewRepaintNeeded = false;
+
+        if (objectPreviouslyUnderMouseCursor != currentObjectUnderMouseCursor) {
+            // Mouse cursor has just entered or left component.
+            viewRepaintNeeded = objectPreviouslyUnderMouseCursor != null && objectPreviouslyUnderMouseCursor.mouseExited();
+            viewRepaintNeeded |= currentObjectUnderMouseCursor != null && currentObjectUnderMouseCursor.mouseEntered();
+            objectPreviouslyUnderMouseCursor = currentObjectUnderMouseCursor;
         }
-        return false;
+
+        if (mouseEvent.button != 0 && currentObjectUnderMouseCursor != null) {
+            // Mouse button was clicked on some component.
+            viewRepaintNeeded |= currentObjectUnderMouseCursor.mouseClicked(mouseEvent.button);
+        }
+
+        return viewRepaintNeeded;
     }
 
 }