diff --git a/src/java/com/threerings/media/animation/AnimatedPanel.java b/src/java/com/threerings/media/animation/AnimatedPanel.java index 3a11e25bf..b6e64ef77 100644 --- a/src/java/com/threerings/media/animation/AnimatedPanel.java +++ b/src/java/com/threerings/media/animation/AnimatedPanel.java @@ -1,5 +1,5 @@ // -// $Id: AnimatedPanel.java,v 1.12 2002/02/19 04:45:13 mdb Exp $ +// $Id: AnimatedPanel.java,v 1.13 2002/02/19 05:03:17 mdb Exp $ package com.threerings.media.animation; @@ -159,6 +159,8 @@ public class AnimatedPanel extends Canvas implements AnimatedView // } // _last = now; + int width = getWidth(), height = getHeight(); + // if scrolling is enabled, determine the scrolling delta to be // used and do the business int dx = 0, dy = 0; @@ -180,6 +182,18 @@ public class AnimatedPanel extends Canvas implements AnimatedView _lasty = ydist; } + // and add invalid rectangles for the exposed areas + if (dx > 0) { + invalidRects.add(new Rectangle(width - dx, 0, dx, height)); + } else if (dx < 0) { + invalidRects.add(new Rectangle(0, 0, -dx, height)); + } + if (dy > 0) { + invalidRects.add(new Rectangle(0, height - dy, width, dy)); + } else if (dy < 0) { + invalidRects.add(new Rectangle(0, 0, width, -dy)); + } + // let our derived classes do whatever they need to do to // prepare to be scrolled viewWillScroll(dx, dy); @@ -208,7 +222,6 @@ public class AnimatedPanel extends Canvas implements AnimatedView createBackBuffer(gc); } - int width = getWidth(), height = getHeight(); Graphics g = null; try { g = _backimg.getGraphics(); @@ -236,20 +249,6 @@ public class AnimatedPanel extends Canvas implements AnimatedView if (_stime != 0) { // if it was OK, we may need to do some scrolling g.copyArea(0, 0, width, height, -dx, -dy); - - // and add invalid rectangles for the exposed areas - if (dx > 0) { - invalidRects.add( - new Rectangle(width - dx, 0, dx, height)); - } else if (dx < 0) { - invalidRects.add(new Rectangle(0, 0, -dx, height)); - } - if (dy > 0) { - invalidRects.add( - new Rectangle(0, height - dy, width, dy)); - } else if (dy < 0) { - invalidRects.add(new Rectangle(0, 0, width, -dy)); - } } // iterate through the invalid rectangles, copying those diff --git a/src/java/com/threerings/miso/client/IsoSceneView.java b/src/java/com/threerings/miso/client/IsoSceneView.java index d32d0fe5a..75086ff96 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.99 2002/02/19 04:45:14 mdb Exp $ +// $Id: IsoSceneView.java,v 1.100 2002/02/19 05:03:17 mdb Exp $ package com.threerings.miso.scene; @@ -121,14 +121,8 @@ public class IsoSceneView implements SceneView invalidate(); } - /** - * Scrolls the view by the requested number of pixels. As the view is - * not responsible for maintaining the back buffer, this will simply - * dirty the regions exposed by scrolling and update the view's - * internal offsets. It also instructs the sprite manager to dirty the - * scrolled bounds of all sprites in the view. - */ - public void scrollView (int dx, int dy) + // documentation inherited from interface + public void viewWillScroll (int dx, int dy) { // adjust our offsets _xoff += dx; @@ -157,28 +151,9 @@ public class IsoSceneView implements SceneView _tiledy -= 1; _yoff += _model.tilehei; } - - // now dirty the exposed regions - if (dx > 0) { - invalidateRect( - new Rectangle(_model.bounds.x + _model.bounds.width - dx, - _model.bounds.y, dx, _model.bounds.height)); - } else if (dx < 0) { - invalidateRect(new Rectangle(_model.bounds.x, _model.bounds.y, - -dx, _model.bounds.height)); - } - - if (dy > 0) { - invalidateRect(new Rectangle(_model.bounds.x, _model.bounds.y + - _model.bounds.height - dy, - _model.bounds.width, dy)); - } else if (dy < 0) { - invalidateRect(new Rectangle(_model.bounds.x, _model.bounds.y, - _model.bounds.width, -dy)); - } } - // documentation inherited + // documentation inherited from interface public void paint (Graphics2D gfx, List invalidRects) { if (_scene == null) { diff --git a/src/java/com/threerings/miso/client/SceneView.java b/src/java/com/threerings/miso/client/SceneView.java index 36895913a..4a20e8cb2 100644 --- a/src/java/com/threerings/miso/client/SceneView.java +++ b/src/java/com/threerings/miso/client/SceneView.java @@ -1,5 +1,5 @@ // -// $Id: SceneView.java,v 1.25 2002/02/19 01:24:59 mdb Exp $ +// $Id: SceneView.java,v 1.26 2002/02/19 05:03:17 mdb Exp $ package com.threerings.miso.scene; @@ -19,13 +19,13 @@ import com.threerings.media.sprite.Path; public interface SceneView { /** - * Scrolls the view by the requested number of pixels. As the view is - * not responsible for maintaining the back buffer, this will simply - * dirty the regions exposed by scrolling and update the view's - * internal offsets. It also instructs the sprite manager to dirty the - * scrolled bounds of all sprites in the view. + * Lets the view know that it will be scrolled by the specified number + * of pixels in each direction the next time that {@link #paint} is + * called. This is called automatically by the {@link SceneViewPanel} + * which takes care of dirtying the regions exposed by the scrolling + * and copying the scrollable pixels. */ - public void scrollView (int dx, int dy); + public void viewWillScroll (int dx, int dy); /** * Renders 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 d99d903e1..6ee8b6345 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.30 2002/02/19 01:24:59 mdb Exp $ +// $Id: SceneViewPanel.java,v 1.31 2002/02/19 05:03:17 mdb Exp $ package com.threerings.miso.scene; @@ -121,7 +121,7 @@ public class SceneViewPanel extends AnimatedPanel */ protected void viewWillScroll (int dx, int dy) { - _view.scrollView(dx, dy); + _view.viewWillScroll(dx, dy); } /**