package eu.svjatoslav.sixth.e3d.gui;
+import eu.svjatoslav.sixth.e3d.gui.humaninput.KeyboardFocusTracker;
import eu.svjatoslav.sixth.e3d.gui.humaninput.MouseInteractionController;
+import eu.svjatoslav.sixth.e3d.gui.humaninput.UserInputTracker;
+import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection;
import javax.swing.*;
import java.awt.*;
import java.util.Timer;
public class ViewPanel extends JPanel implements ComponentListener {
+ private final UserInputTracker userInputTracker = new UserInputTracker(this);
+
+ private final KeyboardFocusTracker keyboardFocusTracker = new KeyboardFocusTracker(
+ this);
+
+ private final Avatar avatar = new Avatar();
+
+ private final ShapeCollection rootShapeCollection = new ShapeCollection();
+
+
+ public Avatar getAvatar() {
+ return avatar;
+ }
+
+ public KeyboardFocusTracker getKeyboardFocusTracker() {
+ return keyboardFocusTracker;
+ }
+
+ public ShapeCollection getRootShapeCollection() {
+ return rootShapeCollection;
+ }
+
+ public UserInputTracker getUserInputTracker() {
+ return userInputTracker;
+ }
private static final long serialVersionUID = 1683277888885045387L;
private final List<ViewRenderListener> viewRenderListeners = new ArrayList<>();
- private final ViewContext context = new ViewContext(this);
/**
* Last time this view was updated.
*/
private boolean viewRepaintNeeded = true;
public ViewPanel() {
- viewRenderListeners.add(context.getAvatar());
-
- // initialize input tracker
- context.getUserInputTracker().bind(this);
- viewRenderListeners.add(context.getUserInputTracker());
+ viewRenderListeners.add(avatar);
+ viewRenderListeners.add(userInputTracker);
initializePanelLayout();
viewRepaintNeeded = true;
}
- public ViewContext getContext() {
- return context;
- }
-
@Override
public Dimension getMaximumSize() {
return getPreferredSize();
}
// paint root geometry collection to the offscreen render buffer
- context.getRootShapeCollection().paint(context, renderingContext);
+ rootShapeCollection.paint(this, renderingContext);
// draw rendered offscreen image to visible screen
final Graphics graphics = getGraphics();
boolean reRenderFrame = false;
for (final ViewRenderListener listener : viewRenderListeners)
- if (listener.beforeRender(context,
- millisecondsPassedSinceLastUpdate))
+ if (listener.beforeRender(this, millisecondsPassedSinceLastUpdate))
reRenderFrame = true;
// abort rendering if window size is invalid