Check if a block was the last visible one we were waiting on even if it was abandoned before it was resolved. The view location can change before resolution completes.
git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@506 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
@@ -370,7 +370,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
"->" + (usage[2] / 1024) + "k" + "].");
|
"->" + (usage[2] / 1024) + "k" + "].");
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
public void addNotify ()
|
public void addNotify ()
|
||||||
{
|
{
|
||||||
super.addNotify();
|
super.addNotify();
|
||||||
@@ -384,7 +384,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
public void removeNotify ()
|
public void removeNotify ()
|
||||||
{
|
{
|
||||||
super.removeNotify();
|
super.removeNotify();
|
||||||
@@ -669,13 +669,13 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited from interface
|
@Override
|
||||||
public Rectangle getViewBounds ()
|
public Rectangle getViewBounds ()
|
||||||
{
|
{
|
||||||
return _vbounds;
|
return _vbounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited from interface
|
@Override
|
||||||
public Component getComponent ()
|
public Component getComponent ()
|
||||||
{
|
{
|
||||||
return this;
|
return this;
|
||||||
@@ -696,7 +696,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
_activeMenu = null;
|
_activeMenu = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
public void setBounds (int x, int y, int width, int height)
|
public void setBounds (int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
super.setBounds(x, y, width, height);
|
super.setBounds(x, y, width, height);
|
||||||
@@ -719,7 +719,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
protected void viewLocationDidChange (int dx, int dy)
|
protected void viewLocationDidChange (int dx, int dy)
|
||||||
{
|
{
|
||||||
super.viewLocationDidChange(dx, dy);
|
super.viewLocationDidChange(dx, dy);
|
||||||
@@ -739,10 +739,11 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
_ulpos.setLocation(_tcoords);
|
_ulpos.setLocation(_tcoords);
|
||||||
if (rethink() > 0) {
|
if (rethink() > 0) {
|
||||||
_delayRepaint = mightDelayPaint;
|
_delayRepaint = mightDelayPaint;
|
||||||
Log.info("Delaying repaint... " +
|
Log.info("Got new pending blocks " +
|
||||||
"[need=" + _visiBlocks.size() +
|
"[need=" + _visiBlocks.size() +
|
||||||
", of=" + _pendingBlocks +
|
", of=" + _pendingBlocks +
|
||||||
", view=" + StringUtil.toString(_vbounds) + "].");
|
", view=" + StringUtil.toString(_vbounds) +
|
||||||
|
", delay=" + _delayRepaint + "].");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -807,8 +808,8 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
|
|
||||||
// prune any blocks that are no longer influential
|
// prune any blocks that are no longer influential
|
||||||
Point key = new Point();
|
Point key = new Point();
|
||||||
for (Iterator iter = _blocks.values().iterator(); iter.hasNext(); ) {
|
for (Iterator<SceneBlock> iter = _blocks.values().iterator(); iter.hasNext(); ) {
|
||||||
SceneBlock block = (SceneBlock)iter.next();
|
SceneBlock block = iter.next();
|
||||||
key.x = block.getBounds().x;
|
key.x = block.getBounds().x;
|
||||||
key.y = block.getBounds().y;
|
key.y = block.getBounds().y;
|
||||||
if (!_rethinkOp.blocks.contains(key)) {
|
if (!_rethinkOp.blocks.contains(key)) {
|
||||||
@@ -820,8 +821,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Iterator iter = _rethinkOp.blocks.iterator(); iter.hasNext(); ) {
|
for (Point origin : _rethinkOp.blocks) {
|
||||||
Point origin = (Point)iter.next();
|
|
||||||
int bx = MathUtil.floorDiv(origin.x, _metrics.blockwid);
|
int bx = MathUtil.floorDiv(origin.x, _metrics.blockwid);
|
||||||
int by = MathUtil.floorDiv(origin.y, _metrics.blockhei);
|
int by = MathUtil.floorDiv(origin.y, _metrics.blockhei);
|
||||||
int bkey = compose(bx, by);
|
int bkey = compose(bx, by);
|
||||||
@@ -909,10 +909,8 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
if (_dpanel != null) {
|
if (_dpanel != null) {
|
||||||
_dpanel.blockCleared(block);
|
_dpanel.blockCleared(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear out waiting for the block since it is no longer resolving.
|
blockFinished(block);
|
||||||
_pendingBlocks--;
|
|
||||||
_visiBlocks.remove(block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -936,12 +934,17 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
_remgr.invalidateRegion(sbounds);
|
_remgr.invalidateRegion(sbounds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockFinished(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called whenever a block is done resolving, whether it was successfully resolved or if it
|
||||||
|
* was abandoned.
|
||||||
|
*/
|
||||||
|
protected void blockFinished (SceneBlock block)
|
||||||
|
{
|
||||||
--_pendingBlocks;
|
--_pendingBlocks;
|
||||||
// if (_pendingBlocks == 0) {
|
|
||||||
// Log.info("Finished resolving pending blocks " +
|
|
||||||
// "[view=" + StringUtil.toString(_vbounds) + "].");
|
|
||||||
// reportMemoryUsage();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// once all the visible pending blocks have completed their
|
// once all the visible pending blocks have completed their
|
||||||
// resolution, recompute our visible object set and show ourselves
|
// resolution, recompute our visible object set and show ourselves
|
||||||
@@ -1202,7 +1205,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
public void paint (Graphics g)
|
public void paint (Graphics g)
|
||||||
{
|
{
|
||||||
if (_delayRepaint) {
|
if (_delayRepaint) {
|
||||||
@@ -1210,8 +1213,8 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
super.paint(g);
|
super.paint(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
protected void paintInFront (Graphics2D gfx, Rectangle dirty)
|
protected void paintInFront (Graphics2D gfx, Rectangle dirty)
|
||||||
{
|
{
|
||||||
super.paintInFront(gfx, dirty);
|
super.paintInFront(gfx, dirty);
|
||||||
@@ -1223,7 +1226,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
@Override
|
||||||
protected void paintBetween (Graphics2D gfx, Rectangle dirty)
|
protected void paintBetween (Graphics2D gfx, Rectangle dirty)
|
||||||
{
|
{
|
||||||
// render any intersecting tiles
|
// render any intersecting tiles
|
||||||
@@ -1249,6 +1252,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
* we intersperse them with objects in our scene and need to manage
|
* we intersperse them with objects in our scene and need to manage
|
||||||
* their z-order.
|
* their z-order.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void paintBits (Graphics2D gfx, int layer, Rectangle dirty)
|
protected void paintBits (Graphics2D gfx, int layer, Rectangle dirty)
|
||||||
{
|
{
|
||||||
_animmgr.paint(gfx, layer, dirty);
|
_animmgr.paint(gfx, layer, dirty);
|
||||||
@@ -1595,7 +1599,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
|||||||
/** Used by {@link #rethink}. */
|
/** Used by {@link #rethink}. */
|
||||||
protected class RethinkOp implements TileOp
|
protected class RethinkOp implements TileOp
|
||||||
{
|
{
|
||||||
public Set blocks = Sets.newHashSet();
|
public Set<Point> blocks = Sets.newHashSet();
|
||||||
|
|
||||||
public void apply (int tx, int ty, Rectangle tbounds) {
|
public void apply (int tx, int ty, Rectangle tbounds) {
|
||||||
_key.x = MathUtil.floorDiv(tx, _metrics.blockwid) *
|
_key.x = MathUtil.floorDiv(tx, _metrics.blockwid) *
|
||||||
|
|||||||
Reference in New Issue
Block a user