You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by vh...@apache.org on 2002/11/14 17:35:18 UTC

cvs commit: xml-batik/sources/org/apache/batik/bridge CursorManager.java

vhardy      2002/11/14 08:35:18

  Modified:    sources/org/apache/batik/bridge CursorManager.java
  Log:
  Added caching of cursors (per document)
  
  Revision  Changes    Path
  1.3       +56 -18    xml-batik/sources/org/apache/batik/bridge/CursorManager.java
  
  Index: CursorManager.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/CursorManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CursorManager.java	14 Nov 2002 14:57:14 -0000	1.2
  +++ CursorManager.java	14 Nov 2002 16:35:18 -0000	1.3
  @@ -24,6 +24,7 @@
   import java.awt.image.SampleModel;
   import java.util.Map;
   import java.util.Hashtable;
  +import java.lang.ref.SoftReference;
   
   import org.apache.batik.ext.awt.image.spi.ImageTagRegistry;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -32,6 +33,7 @@
   import org.apache.batik.dom.svg.XMLBaseSupport;
   import org.apache.batik.util.SVGConstants;
   import org.apache.batik.util.ParsedURL;
  +import org.apache.batik.util.SoftReferenceCache;
   
   import org.w3c.dom.Element;
   
  @@ -110,6 +112,11 @@
       protected BridgeContext ctx;
   
       /**
  +     * Cache used to hold references to cursors
  +     */
  +    protected CursorCache cursorCache = new CursorCache();
  +
  +    /**
        * Constructor
        *
        * @param BridgeContext ctx, the BridgeContext associated to this CursorManager
  @@ -165,7 +172,7 @@
           CursorDescriptor desc = new CursorDescriptor(purl, x, y);
   
           // Check if there is a cursor in the cache for this url
  -        Cursor cachedCursor = getCachedCursor(desc);
  +        Cursor cachedCursor = cursorCache.getCursor(desc);
   
           if (cachedCursor != null) {
               return cachedCursor;
  @@ -252,7 +259,7 @@
                                             (int)Math.round(y)),
                                   purl.toString());
   
  -        addCursorToCache(desc, c);
  +        cursorCache.putCursor(desc, c);
           return c;        
       }
   
  @@ -274,23 +281,15 @@
       }
   
       /**
  -     * Checks if the cursor referencing the input image and
  -     * with the given hot spot is in the cache
  -     */
  -    protected Cursor getCachedCursor(CursorDescriptor desc) {
  -        return null;
  -    }
  -
  -    /**
  -     * Puts the input Cursor in the cache
  +     * Simple inner class which holds the information describing
  +     * a cursor, i.e., the image it points to and the hot spot point
  +     * coordinates.
        */
  -    protected void addCursorToCache(CursorDescriptor desc, Cursor c) {
  -    }
  -
       static class CursorDescriptor {
           ParsedURL purl;
           float x;
           float y;
  +        String desc;
   
           public CursorDescriptor(ParsedURL purl,
                                   float x, float y) {
  @@ -298,8 +297,13 @@
                   throw new IllegalArgumentException();
               }
   
  +            this.purl = purl;
               this.x = x;
               this.y = y;
  +
  +            // Desc is used for hascode as well as for toString()
  +            this.desc = this.getClass().getName() + 
  +                "\n\t:[" + this.purl + "]\n\t:[" + x + "]:[" + y + "]";
           }
   
           public boolean equals(Object obj) {
  @@ -310,12 +314,46 @@
               }
   
               CursorDescriptor desc = (CursorDescriptor)obj;
  -            return 
  -                (this.purl.equals(desc.purl)
  +            boolean isEqual =  
  +                this.purl.equals(desc.purl)
                    &&
                    this.x == desc.x
                    &&
  -                 this.y == desc.y);
  +                 this.y == desc.y;
  +                 
  +            // System.out.println("isEqual : " + isEqual);
  +            // (new Exception()).printStackTrace();
  +            return isEqual;
  +        }
  +
  +        public String toString() {
  +            return this.desc;
  +        }
  +
  +        public int hashCode() {
  +            return desc.hashCode();
           }
       }
  +
  +    /**
  +     * Simple extension of the SoftReferenceCache that 
  +     * offers typed interface (Kind of needed as SoftReferenceCache
  +     * mostly has protected methods).
  +     */
  +    static class CursorCache extends SoftReferenceCache {
  +        public CursorCache() {
  +        }
  +
  +        public Cursor getCursor(CursorDescriptor desc) {
  +            return (Cursor)requestImpl(desc);
  +        }
  +
  +        public void putCursor(CursorDescriptor desc, 
  +                              Cursor cursor) {
  +            putImpl(desc, cursor);
  +        }
  +    }
  +
  +
  +
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org