/** 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;
return ret;
}
+ /** the resource that created this Picture */
+ public Res res = null;
+
/** the height of the picture */
public abstract int getHeight();