diff --git a/src/java/com/threerings/media/sprite/AnimationManager.java b/src/java/com/threerings/media/sprite/AnimationManager.java
index 0e42c1c67..e6726da43 100644
--- a/src/java/com/threerings/media/sprite/AnimationManager.java
+++ b/src/java/com/threerings/media/sprite/AnimationManager.java
@@ -1,5 +1,5 @@
//
-// $Id: AnimationManager.java,v 1.6 2001/08/04 01:41:02 shaper Exp $
+// $Id: AnimationManager.java,v 1.7 2001/08/06 18:57:39 shaper Exp $
package com.threerings.miso.sprite;
@@ -40,7 +40,18 @@ public class AnimationManager implements Interval, PerformanceObserver
tick();
}
};
+ }
+ /**
+ * This method should be called by the component the animation
+ * manager is animating after it's been fully laid out within its
+ * container(s); typically, after Component.doLayout()
+ * has been called. The animation manager will then register
+ * itself with the IntervalManager to effect its
+ * periodic repainting of the target component.
+ */
+ public void start ()
+ {
// register to monitor the refresh action
PerformanceMonitor.register(this, "refresh", 1000);
@@ -48,12 +59,21 @@ public class AnimationManager implements Interval, PerformanceObserver
IntervalManager.register(this, REFRESH_INTERVAL, null, true);
}
+ /**
+ * Called by our interval when we'd like to begin a tick. Returns
+ * whether we're already ticking, and notes that we've requested
+ * another tick.
+ */
protected synchronized boolean requestTick ()
{
if (_ticking++ > 0) return false;
return true;
}
+ /**
+ * Called by the tick task when it's finished with a tick.
+ * Returns whether a new tick task should be created immediately.
+ */
protected synchronized boolean finishedTick ()
{
if (--_ticking > 0) {
@@ -82,7 +102,7 @@ public class AnimationManager implements Interval, PerformanceObserver
_view.invalidateRects(rects);
// update frame-rate information
- //PerformanceMonitor.tick(AnimationManager.this, "refresh");
+ PerformanceMonitor.tick(AnimationManager.this, "refresh");
// refresh the display
_target.paintImmediately(_target.getBounds());
diff --git a/src/java/com/threerings/miso/client/IsoSceneView.java b/src/java/com/threerings/miso/client/IsoSceneView.java
index 4dfd85839..d0ea40cd0 100644
--- a/src/java/com/threerings/miso/client/IsoSceneView.java
+++ b/src/java/com/threerings/miso/client/IsoSceneView.java
@@ -1,5 +1,5 @@
//
-// $Id: IsoSceneView.java,v 1.25 2001/08/04 00:22:19 shaper Exp $
+// $Id: IsoSceneView.java,v 1.26 2001/08/06 18:57:39 shaper Exp $
package com.threerings.miso.scene;
@@ -51,6 +51,8 @@ public class IsoSceneView implements EditableSceneView
*/
public void paint (Graphics g)
{
+ if (_scene == null) return;
+
Graphics2D gfx = (Graphics2D)g;
// clip the drawing region to our desired bounds since we
diff --git a/src/java/com/threerings/miso/client/SceneViewPanel.java b/src/java/com/threerings/miso/client/SceneViewPanel.java
index 2c3db7247..6af9e80c2 100644
--- a/src/java/com/threerings/miso/client/SceneViewPanel.java
+++ b/src/java/com/threerings/miso/client/SceneViewPanel.java
@@ -1,5 +1,5 @@
//
-// $Id: SceneViewPanel.java,v 1.1 2001/08/04 01:41:02 shaper Exp $
+// $Id: SceneViewPanel.java,v 1.2 2001/08/06 18:57:39 shaper Exp $
package com.threerings.miso.scene;
@@ -52,6 +52,15 @@ public class SceneViewPanel extends JPanel
_view.paint(g);
}
+ /**
+ * Return the desired size for the panel based on the requested
+ * and calculated bounds of the scene view.
+ */
+ public Dimension getPreferredSize ()
+ {
+ return (_smodel == null) ? super.getPreferredSize() : _smodel.bounds;
+ }
+
/** Tile width in pixels. */
protected static final int TWIDTH = 64;
diff --git a/tests/src/java/com/threerings/miso/viewer/ViewerFrame.java b/tests/src/java/com/threerings/miso/viewer/ViewerFrame.java
index d87568aa6..f0a5a509c 100644
--- a/tests/src/java/com/threerings/miso/viewer/ViewerFrame.java
+++ b/tests/src/java/com/threerings/miso/viewer/ViewerFrame.java
@@ -1,5 +1,5 @@
//
-// $Id: ViewerFrame.java,v 1.7 2001/08/04 01:41:02 shaper Exp $
+// $Id: ViewerFrame.java,v 1.8 2001/08/06 18:57:39 shaper Exp $
package com.threerings.miso.viewer;
@@ -50,13 +50,15 @@ class ViewerFrame extends JFrame implements WindowListener
gl.setOffAxisPolicy(GroupLayout.STRETCH);
top.setLayout(gl);
+ top.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
// set up the scene view panel with a default scene
ViewerSceneViewPanel svpanel =
new ViewerSceneViewPanel(_ctx, spritemgr, sprite);
- top.add(svpanel, GroupLayout.FIXED);
+ top.add(svpanel);
// add the scene view panel
- getContentPane().add(svpanel, BorderLayout.CENTER);
+ getContentPane().add(top, BorderLayout.CENTER);
}
/** WindowListener interface methods */
diff --git a/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java b/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java
index 4f156c3f9..3d9728357 100644
--- a/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java
+++ b/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java
@@ -1,5 +1,5 @@
//
-// $Id: ViewerSceneViewPanel.java,v 1.1 2001/08/04 01:41:02 shaper Exp $
+// $Id: ViewerSceneViewPanel.java,v 1.2 2001/08/06 18:57:39 shaper Exp $
package com.threerings.miso.viewer;
@@ -31,8 +31,7 @@ public class ViewerSceneViewPanel extends SceneViewPanel
_sprite = sprite;
// create an animation manager for this panel
- AnimationManager animmgr =
- new AnimationManager(spritemgr, this, _view);
+ _animmgr = new AnimationManager(spritemgr, this, _view);
// listen to the desired events
addMouseListener(this);
@@ -40,8 +39,6 @@ public class ViewerSceneViewPanel extends SceneViewPanel
// load up the initial scene
prepareStartingScene();
-
- PerformanceMonitor.register(this, "paint", 1000);
}
/**
@@ -71,6 +68,14 @@ public class ViewerSceneViewPanel extends SceneViewPanel
Log.info(name + " [ticks=" + ticks + "].");
}
+ public void doLayout ()
+ {
+ super.doLayout();
+
+ // now that we've been fully laid out, start animating
+ _animmgr.start();
+ }
+
/** MouseListener interface methods */
public void mousePressed (MouseEvent e)
@@ -104,6 +109,9 @@ public class ViewerSceneViewPanel extends SceneViewPanel
/** The default scene to load and display. */
protected static final String DEF_SCENE = "rsrc/scenes/default.xml";
+ /** The animation manager. */
+ AnimationManager _animmgr;
+
/** The sprite we're manipulating within the view. */
protected Sprite _sprite;