Fixed mouse hovering detection
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / gui / ViewPanel.java
index 84d4529..86006b6 100755 (executable)
@@ -11,7 +11,6 @@ package eu.svjatoslav.sixth.e3d.gui;
 
 import eu.svjatoslav.sixth.e3d.gui.humaninput.HIDInputTracker;
 import eu.svjatoslav.sixth.e3d.gui.humaninput.KeyboardFocusStack;
-import eu.svjatoslav.sixth.e3d.gui.humaninput.MouseInteractionController;
 import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection;
 
 import javax.swing.*;
@@ -40,10 +39,6 @@ public class ViewPanel extends JPanel implements ComponentListener {
     private Timer canvasUpdateTimer;
     private ViewUpdateTimerTask canvasUpdateTimerTask;
     private RenderingContext renderingContext = null;
-    /**
-     * UI component that mouse is currently hovering over.
-     */
-    private MouseInteractionController currentMouseOverComponent;
     /**
      * Currently target FPS for this view. It can be changed at runtime. Also when nothing
      * changes in the view, then frames are not really repainted.
@@ -54,6 +49,7 @@ public class ViewPanel extends JPanel implements ComponentListener {
      * immediately after frame got updated.
      */
     private boolean viewRepaintNeeded = true;
+
     public ViewPanel() {
         viewRenderListeners.add(avatar);
         viewRenderListeners.add(HIDInputTracker);
@@ -126,28 +122,6 @@ public class ViewPanel extends JPanel implements ComponentListener {
         return renderingContext;
     }
 
-    private void handleDetectedComponentMouseEvents() {
-        if (renderingContext.objectUnderMouse != null) {
-            if (renderingContext.mouseEvent.button == 0) {
-                // mouse over
-                if (currentMouseOverComponent == null) {
-                    currentMouseOverComponent = renderingContext.objectUnderMouse;
-                    viewRepaintNeeded |= currentMouseOverComponent.mouseEntered();
-                } else if (currentMouseOverComponent != renderingContext.objectUnderMouse) {
-                    viewRepaintNeeded |= currentMouseOverComponent.mouseExited();
-                    currentMouseOverComponent = renderingContext.objectUnderMouse;
-                    viewRepaintNeeded |= currentMouseOverComponent.mouseEntered();
-                }
-            } else {
-                // mouse click
-                viewRepaintNeeded |= renderingContext.objectUnderMouse.mouseClicked();
-            }
-        } else if (currentMouseOverComponent != null) {
-            viewRepaintNeeded |= currentMouseOverComponent.mouseExited();
-            currentMouseOverComponent = null;
-        }
-    }
-
     private void initializePanelLayout() {
         setFocusCycleRoot(true);
         setOpaque(true);
@@ -158,7 +132,6 @@ public class ViewPanel extends JPanel implements ComponentListener {
     }
 
     private void renderFrame() {
-
         // paint root geometry collection to the offscreen render buffer
         clearCanvas();
         rootShapeCollection.paint(this, renderingContext);
@@ -236,7 +209,7 @@ public class ViewPanel extends JPanel implements ComponentListener {
         // abort rendering if window size is invalid
         if ((getWidth() > 0) && (getHeight() > 0) && renderFrame) {
             renderFrame();
-            handleDetectedComponentMouseEvents();
+            viewRepaintNeeded = renderingContext.handleDetectedComponentMouseEvents();
         }
 
     }
@@ -256,8 +229,7 @@ public class ViewPanel extends JPanel implements ComponentListener {
             renderingContext = new RenderingContext(panelWidth, panelHeight);
         }
 
-        renderingContext.mouseEvent = null;
-        renderingContext.objectUnderMouse = null;
+        renderingContext.prepareForNewFrameRendering();
     }
 
     private boolean notifyViewRenderListeners(int millisecondsPassedSinceLastUpdate) {