case 3:
//#switch(name)
case "ui.font.height": return N(Font.getFont((Stream)a, JS.toInt(b)).textheight((String)c));
- case "ui.font.wait":
- try {
- JS.UnpauseCallback callback = JS.pause();
- Font font = Font.getFont((Stream)a, JS.toInt(b));
- if (font.rasterizeGlyphs((String)c, null, 0,0,0,0,0,0,0, callback) != -1) Scheduler.add(callback);
- } catch (JS.NotPauseableException npe) {
- JS.error("can't wait for a font in a foreground thread");
- }
- return null;
+ case "ui.font.wait": throw new Error("FIXME: ibex.ui.font.wait not implemented");
case "ui.font.width": return N(Font.getFont((Stream)a, JS.toInt(b)).textwidth((String)c));
//#end
break;
private Template t = null;
public Object parentkey = null;
public Blessing parent = null;
+ private Hash cache = new Hash();
public Blessing(JS.Cloneable clonee, Ibex ibex, Blessing parent, Object parentkey) {
super(clonee); this.ibex = ibex; this.parentkey = parentkey; this.parent = parent; }
public Object get(Object key) throws JSExn {
- return key.equals("") ? ((Object)getStatic()) : (new Blessing((JS.Cloneable)clonee.get(key), ibex, this, key));
+ if (key.equals("")) return ((Object)getStatic());
+ if (cache.get(key) != null) return cache.get(key);
+ Object ret = new Blessing((JS.Cloneable)clonee.get(key), ibex, this, key);
+ cache.put(key, ret);
+ return ret;
}
public static Blessing getBlessing(Object o) {
if (!(o instanceof JS)) return null;
}
public JSScope getStatic() {
try {
- // FIXME background?
- if (t == null)
- t = Template.buildTemplate(parentkey + ".t", parent.get(parentkey + ".t"), ibex);
+ if (t == null) t = Template.buildTemplate(parentkey + ".t", parent.get(parentkey + ".t"), ibex);
return t.staticScope;
} catch (Exception e) {
Log.error(this, e);