diff --git a/src/java/com/threerings/media/sprite/AnimatedView.java b/src/java/com/threerings/media/sprite/AnimatedView.java index 6147797e3..18a9fe2bf 100644 --- a/src/java/com/threerings/media/sprite/AnimatedView.java +++ b/src/java/com/threerings/media/sprite/AnimatedView.java @@ -1,8 +1,9 @@ // -// $Id: AnimatedView.java,v 1.1 2001/08/14 23:35:22 mdb Exp $ +// $Id: AnimatedView.java,v 1.2 2001/08/21 20:02:39 mdb Exp $ package com.threerings.media.sprite; +import java.awt.Graphics; import java.util.List; /** @@ -20,4 +21,12 @@ public interface AnimatedView * @param rects the list of {@link java.awt.Rectangle} objects. */ public void invalidateRects (List rects); + + /** + * Requests that the animated view paint itself immediately (that it + * complete the painting process before returning from this function). + * This will only be called on the AWT thread and when it is safe to + * paint. + */ + public void paintImmediately (); } diff --git a/src/java/com/threerings/media/sprite/AnimationManager.java b/src/java/com/threerings/media/sprite/AnimationManager.java index 3dcdd0403..8657fe5af 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.12 2001/08/14 23:35:22 mdb Exp $ +// $Id: AnimationManager.java,v 1.13 2001/08/21 20:02:39 mdb Exp $ package com.threerings.media.sprite; @@ -24,14 +24,12 @@ public class AnimationManager implements Interval, PerformanceObserver { /** * Construct and initialize the animation manager with a sprite - * manager and the panel that animations will take place within. + * manager and the view in which the animations will take place. */ - public AnimationManager (SpriteManager spritemgr, JComponent target, - AnimatedView view) + public AnimationManager (SpriteManager spritemgr, AnimatedView view) { // save off references to the objects we care about _spritemgr = spritemgr; - _target = target; _view = view; // create a ticker for queueing up tick requests on the AWT thread @@ -111,33 +109,12 @@ public class AnimationManager implements Interval, PerformanceObserver // invalidate screen-rects dirtied by sprites ArrayList rects = _spritemgr.getDirtyRects(); - if (rects.size() > 0) { - // pass the dirty-rects on to the scene view _view.invalidateRects(rects); - // refresh the display. - - // since we know the target panel is always opaque and not - // dependent on swing's double-buffering, we bypass the - // antics that paintImmediately() performs in - // the interest of better performance and grab the - // target's graphics object straightaway. - - Graphics g = null; - try { - Graphics pcg = _target.getGraphics(); - g = pcg.create(); - pcg.dispose(); - } catch(NullPointerException e) { - g = null; - e.printStackTrace(); - } - - if (g != null) { - _target.paint(g); - } + // refresh the display + _view.paintImmediately(); } // update refresh-rate information @@ -172,9 +149,6 @@ public class AnimationManager implements Interval, PerformanceObserver /** The sprite manager. */ protected SpriteManager _spritemgr; - /** The component to refresh. */ - protected JComponent _target; - /** The view on which we are animating. */ protected AnimatedView _view; } diff --git a/src/java/com/threerings/miso/client/SceneView.java b/src/java/com/threerings/miso/client/SceneView.java index fd0dd2c45..fa980bb3b 100644 --- a/src/java/com/threerings/miso/client/SceneView.java +++ b/src/java/com/threerings/miso/client/SceneView.java @@ -1,21 +1,29 @@ // -// $Id: SceneView.java,v 1.13 2001/08/16 23:14:21 mdb Exp $ +// $Id: SceneView.java,v 1.14 2001/08/21 20:02:39 mdb Exp $ package com.threerings.miso.scene; -import java.awt.Component; import java.awt.Graphics; +import java.util.List; -import com.threerings.media.sprite.*; +import com.threerings.media.sprite.Path; import com.threerings.media.tile.Tile; /** - * The SceneView interface provides an interface to be implemented by + * The scene view interface provides an interface to be implemented by * classes that provide a view of a given scene by drawing the scene * contents onto a particular GUI component. */ -public interface SceneView extends AnimatedView +public interface SceneView { + /** + * Invalidate a list of rectangles in screen pixel coordinates in the + * scene view for later repainting. + * + * @param rects the list of {@link java.awt.Rectangle} objects. + */ + public void invalidateRects (List rects); + /** * Render the scene to the given graphics context. * diff --git a/src/java/com/threerings/miso/client/SceneViewPanel.java b/src/java/com/threerings/miso/client/SceneViewPanel.java index 16c740e94..6a1cbe240 100644 --- a/src/java/com/threerings/miso/client/SceneViewPanel.java +++ b/src/java/com/threerings/miso/client/SceneViewPanel.java @@ -1,11 +1,13 @@ // -// $Id: SceneViewPanel.java,v 1.8 2001/08/16 23:14:21 mdb Exp $ +// $Id: SceneViewPanel.java,v 1.9 2001/08/21 20:02:39 mdb Exp $ package com.threerings.miso.scene; import java.awt.*; +import java.util.List; import javax.swing.JPanel; +import com.threerings.media.sprite.AnimatedView; import com.threerings.media.sprite.SpriteManager; import com.threerings.media.tile.TileManager; @@ -14,7 +16,8 @@ import com.threerings.media.tile.TileManager; * SceneView, rendering it to the screen, and handling * view-related UI events. */ -public class SceneViewPanel extends JPanel +public class SceneViewPanel + extends JPanel implements AnimatedView { /** * Construct the panel and initialize it with a context. @@ -64,6 +67,35 @@ public class SceneViewPanel extends JPanel g.drawImage(_offimg, 0, 0, null); } + // documentation inherited + public void invalidateRects (List rects) + { + // pass the invalid rects on to our scene view + _view.invalidateRects(rects); + } + + /** + * Paints this panel immediately. Since we know that we are always + * opaque and not dependent on Swing's double-buffering, we bypass the + * antics that JComponent.paintImmediately() performs in + * the interest of better performance. + */ + public void paintImmediately () + { + Graphics g = null; + + try { + Graphics pcg = getGraphics(); + g = pcg.create(); + pcg.dispose(); + paint(g); + + } catch (NullPointerException e) { + g = null; + e.printStackTrace(); + } + } + public void paintComponent (Graphics g) { render(g); diff --git a/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java b/tests/src/java/com/threerings/miso/viewer/ViewerSceneViewPanel.java index ad85d3b8b..f525c9b80 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.11 2001/08/15 22:06:21 shaper Exp $ +// $Id: ViewerSceneViewPanel.java,v 1.12 2001/08/21 20:02:39 mdb Exp $ package com.threerings.miso.viewer; @@ -32,7 +32,7 @@ public class ViewerSceneViewPanel extends SceneViewPanel _sprite = sprite; // create an animation manager for this panel - _animmgr = new AnimationManager(spritemgr, this, _view); + _animmgr = new AnimationManager(spritemgr, this); // listen to the desired events addMouseListener(this);