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.*;
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.
* immediately after frame got updated.
*/
private boolean viewRepaintNeeded = true;
+
public ViewPanel() {
viewRenderListeners.add(avatar);
viewRenderListeners.add(HIDInputTracker);
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);
}
private void renderFrame() {
-
// paint root geometry collection to the offscreen render buffer
clearCanvas();
rootShapeCollection.paint(this, renderingContext);
// abort rendering if window size is invalid
if ((getWidth() > 0) && (getHeight() > 0) && renderFrame) {
renderFrame();
- handleDetectedComponentMouseEvents();
+ viewRepaintNeeded = renderingContext.handleDetectedComponentMouseEvents();
}
}
renderingContext = new RenderingContext(panelWidth, panelHeight);
}
- renderingContext.mouseEvent = null;
- renderingContext.objectUnderMouse = null;
+ renderingContext.prepareForNewFrameRendering();
}
private boolean notifyViewRenderListeners(int millisecondsPassedSinceLastUpdate) {