2003/10/28 10:10:17
[org.ibex.core.git] / src / org / xwt / Picture.java
index 88cf65b..da65368 100644 (file)
@@ -22,22 +22,23 @@ public abstract class Picture {
 
     /** Pictures, cached by Res */
     private static Cache cache = new Cache();
+
+    private static GIF gif = new GIF();
     
     /** turns a resource into a Picture.Source */
     public static Picture fromRes(Res r) {
-        // FIXME: put self in background thread if needed
         Picture ret = (Picture)cache.get(r);
         if (ret == null) {
             try {
                 PushbackInputStream pbis = new PushbackInputStream(r.getInputStream());
                 int c = pbis.read();
                 pbis.unread(c);
-                // FEATURE: cache GIF/PNG objects, reuse int[]'s?
-                if (c == 'G') ret = new GIF().fromInputStream(pbis, "FIXME");
-                else if (c == 137) ret = new PNG().fromInputStream(pbis, "FIXME");
-                else if (c == 0xff) ret = Platform.decodeJPEG(pbis, "FIXME");
+                if (c == 'G') ret = gif.fromInputStream(pbis, r.getDescriptiveName());
+                else if (c == 137) ret = new PNG().fromInputStream(pbis, r.getDescriptiveName());
+                else if (c == 0xff) ret = Platform.decodeJPEG(pbis, r.getDescriptiveName());
                 else throw new JS.Exn("couldn't figure out image type from first byte");
                 cache.put(r, ret);
+                ret.res = r;
             } catch (IOException e) {
                 Log.logJS(Picture.class, e);
                 return null;
@@ -46,6 +47,9 @@ public abstract class Picture {
         return ret;
     }
 
+    /** the resource that created this Picture */
+    public Res res = null;
+
     /** the height of the picture */
     public abstract int getHeight();