X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fgui%2FViewPanel.java;h=84d45293f38aa19095ee72b5d1ef99c9c18f23d4;hp=ea55a312fe1e451b8971ec0e53717083f71b123e;hb=9dcd9d8a7d3bc16eb6fde3681cd32e02dc0707e9;hpb=4bb8945294848559aab76e248207781c6e097714 diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java b/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java index ea55a31..84d4529 100755 --- a/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java @@ -127,27 +127,23 @@ public class ViewPanel extends JPanel implements ComponentListener { } private void handleDetectedComponentMouseEvents() { - if (renderingContext.clickedItem != null) { - if (renderingContext.mouseClick.button == 0) { + if (renderingContext.objectUnderMouse != null) { + if (renderingContext.mouseEvent.button == 0) { // mouse over if (currentMouseOverComponent == null) { - currentMouseOverComponent = renderingContext.clickedItem; - currentMouseOverComponent.mouseEntered(); - viewRepaintNeeded = true; - } else if (currentMouseOverComponent != renderingContext.clickedItem) { - currentMouseOverComponent.mouseExited(); - currentMouseOverComponent = renderingContext.clickedItem; - currentMouseOverComponent.mouseEntered(); - viewRepaintNeeded = true; + currentMouseOverComponent = renderingContext.objectUnderMouse; + viewRepaintNeeded |= currentMouseOverComponent.mouseEntered(); + } else if (currentMouseOverComponent != renderingContext.objectUnderMouse) { + viewRepaintNeeded |= currentMouseOverComponent.mouseExited(); + currentMouseOverComponent = renderingContext.objectUnderMouse; + viewRepaintNeeded |= currentMouseOverComponent.mouseEntered(); } } else { // mouse click - renderingContext.clickedItem.mouseClicked(); - viewRepaintNeeded = true; + viewRepaintNeeded |= renderingContext.objectUnderMouse.mouseClicked(); } } else if (currentMouseOverComponent != null) { - currentMouseOverComponent.mouseExited(); - viewRepaintNeeded = true; + viewRepaintNeeded |= currentMouseOverComponent.mouseExited(); currentMouseOverComponent = null; } } @@ -162,8 +158,6 @@ public class ViewPanel extends JPanel implements ComponentListener { } private void renderFrame() { - if (isNewRenderingContextNeeded()) - renderingContext = new RenderingContext(getWidth(), getHeight()); // paint root geometry collection to the offscreen render buffer clearCanvas(); @@ -180,12 +174,6 @@ public class ViewPanel extends JPanel implements ComponentListener { renderingContext.graphics.fillRect(0, 0, getWidth(), getHeight()); } - private boolean isNewRenderingContextNeeded() { - return (renderingContext == null) - || (renderingContext.width != getWidth()) - || (renderingContext.height != getHeight()); - } - /** * Calling this methods tells 3D engine that current 3D view needs to be * repainted on first opportunity. @@ -234,10 +222,7 @@ public class ViewPanel extends JPanel implements ComponentListener { * graphics is needed. */ void updateView() { - if (renderingContext != null) { - renderingContext.mouseClick = null; - renderingContext.clickedItem = null; - } + maintainRenderingContext(); final int millisecondsPassedSinceLastUpdate = getMillisecondsPassedSinceLastUpdate(); @@ -249,13 +234,30 @@ public class ViewPanel extends JPanel implements ComponentListener { } // abort rendering if window size is invalid - if ((getWidth() <= 0) || (getHeight() <= 0)) - renderFrame = false; - - if (renderFrame) { + if ((getWidth() > 0) && (getHeight() > 0) && renderFrame) { renderFrame(); handleDetectedComponentMouseEvents(); } + + } + + private void maintainRenderingContext() { + int panelWidth = getWidth(); + int panelHeight = getHeight(); + + if (panelWidth <= 0 || panelHeight <=0){ + renderingContext = null; + return; + } + + if ((renderingContext == null) + || (renderingContext.width != panelWidth) + || (renderingContext.height != panelHeight)) { + renderingContext = new RenderingContext(panelWidth, panelHeight); + } + + renderingContext.mouseEvent = null; + renderingContext.objectUnderMouse = null; } private boolean notifyViewRenderListeners(int millisecondsPassedSinceLastUpdate) {