From 4b1f7af899f910c824bcbe6bffcd1d1d7b39d047 Mon Sep 17 00:00:00 2001 From: Walter Korman Date: Thu, 25 Oct 2001 01:40:26 +0000 Subject: [PATCH] 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 --- .../media/sprite/SpriteManager.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/java/com/threerings/media/sprite/SpriteManager.java b/src/java/com/threerings/media/sprite/SpriteManager.java index 105ee0d26..e1cd1b511 100644 --- a/src/java/com/threerings/media/sprite/SpriteManager.java +++ b/src/java/com/threerings/media/sprite/SpriteManager.java @@ -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; @@ -98,14 +98,28 @@ public class SpriteManager */ public DirtyRectList getDirtyRects () { - // create a copy of the dirty rectangles - DirtyRectList dirty = (DirtyRectList)_dirty.clone(); + DirtyRectList merged = new DirtyRectList(); - // clear out the list - _dirty.clear(); + while (_dirty.size() > 0) { + // pop the next rectangle from the dirty list + Rectangle mr = (Rectangle)_dirty.remove(0); - // return the full original list - return dirty; + // merge in any overlapping rectangles + 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; } /**