Merge any overlapping dirty rectangles before making them available to

outsiders.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@553 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Walter Korman
2001-10-25 01:40:26 +00:00
parent 1dcad7f6b0
commit 4b1f7af899
@@ -1,5 +1,5 @@
// //
// $Id: SpriteManager.java,v 1.15 2001/10/13 01:08:59 shaper Exp $ // $Id: SpriteManager.java,v 1.16 2001/10/25 01:40:26 shaper Exp $
package com.threerings.media.sprite; package com.threerings.media.sprite;
@@ -98,14 +98,28 @@ public class SpriteManager
*/ */
public DirtyRectList getDirtyRects () public DirtyRectList getDirtyRects ()
{ {
// create a copy of the dirty rectangles DirtyRectList merged = new DirtyRectList();
DirtyRectList dirty = (DirtyRectList)_dirty.clone();
// clear out the list while (_dirty.size() > 0) {
_dirty.clear(); // pop the next rectangle from the dirty list
Rectangle mr = (Rectangle)_dirty.remove(0);
// return the full original list // merge in any overlapping rectangles
return dirty; for (int ii = 0; ii < _dirty.size(); ii++) {
Rectangle r = (Rectangle)_dirty.get(ii);
if (mr.intersects(r)) {
// remove the overlapping rectangle from the list
_dirty.remove(ii--);
// grow the merged dirty rectangle
mr.add(r);
}
}
// add the merged rectangle to the list
merged.add(mr);
}
return merged;
} }
/** /**