diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-19 19:54:39 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-19 19:54:39 +0000 |
| commit | 509516ee0bc69746dfe948f0fffeb786816d7db2 (patch) | |
| tree | 904af78e7c2b08b109cc574a36927a487d9db2f5 /libjava/gnu/gcj/xlib/Drawable.java | |
| parent | ece594685232a960ae2dc73b1cbdc8d1d59d09a3 (diff) | |
| download | ppe42-gcc-509516ee0bc69746dfe948f0fffeb786816d7db2.tar.gz ppe42-gcc-509516ee0bc69746dfe948f0fffeb786816d7db2.zip | |
2003-04-19 Scott Gilbertson <scottg@mantatest.com>
* gnu/awt/xlib/XGraphics.java (XGraphics): Use new GC.create.
(dispose): Null metrics.
* gnu/awt/xlib/XToolkit.java (sync): Implement.
* gnu/gcj/xlib/Clip.java (dispose): Change name of native from
finalize.
(finalize): Call dispose.
* gnu/gcj/xlib/Drawable.java (gcCache): New field.
(gcCachedCount): New field.
(finalize): New method.
(putGCInCache): New method.
(getGCFromCache): New method.
* gnu/gcj/xlib/GC.java (GC): Make protected.
(clone): Get new GC from cache if possible.
(create): New static method.
(dispose): Save old GC in cache.
* gnu/gcj/xlib/natClip.cc (dispose): Check for null before
deleting.
* gnu/gcj/xlib/natGC.cc (initStructure): Call XCreateGC only if gc
is null.
* gnu/gcj/xlib/Pixmap.java (Pixmap): Use new GC.create.
* java/awt/Container.java (visitChild): Dispose gfx2 when
finished.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65827 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/gcj/xlib/Drawable.java')
| -rw-r--r-- | libjava/gnu/gcj/xlib/Drawable.java | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/libjava/gnu/gcj/xlib/Drawable.java b/libjava/gnu/gcj/xlib/Drawable.java index 56527927b1b..551aca84c18 100644 --- a/libjava/gnu/gcj/xlib/Drawable.java +++ b/libjava/gnu/gcj/xlib/Drawable.java @@ -16,6 +16,9 @@ import java.awt.Rectangle; */ public class Drawable extends XID { + private GC[] gcCache = new GC[10]; + private int gcCachedCount = 0; + public Drawable(Display display, int xid) { super(display, xid); @@ -78,5 +81,36 @@ public class Drawable extends XID private static final String MSG_XGETSUBIMAGE_FAILED = "XGetSubImage() failed."; - + + protected void finalize() throws Throwable + { + // Dispose all the cached GCs, to reduce X server resource usage + for (int i=0; i<gcCachedCount; i++) + gcCache[i].disposeImpl (); + gcCachedCount = 0; + super.finalize(); + } + + /** Put a GC in the cache for this drawable, so it can be retrieved later. + * @param gc The GC to put + */ + void putGCInCache (GC gc) + { + if (gcCachedCount >= gcCache.length) + { + // List full - extend it to double its present size + GC[] oldList = gcCache; + gcCache = new GC[oldList.length*2]; + System.arraycopy (oldList,0,gcCache,0,oldList.length); + } + gcCache[gcCachedCount++] = gc; + } + + /** Get a GC from the cache, if available + * @return A GC from the cache, or null if the cache is empty + */ + GC getGCFromCache () + { + return (gcCachedCount>0) ? gcCache[--gcCachedCount] : null; + } } |

