X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fxwt%2FBox.java;h=d3d51a2efae3867301eeb94e37bdfb496a6a5699;hb=b32cea3f3e272ab00899d134d75a8bd7bcf6c8c0;hp=cba4f14131e1977549e939d38a6138a0f9283884;hpb=e6a665b309c7103a3a29c2cd96b1073409c13606;p=org.ibex.core.git
diff --git a/src/org/xwt/Box.java b/src/org/xwt/Box.java
index cba4f14..d3d51a2 100644
--- a/src/org/xwt/Box.java
+++ b/src/org/xwt/Box.java
@@ -263,13 +263,13 @@ public final class Box extends JS.Scope {
// Instance Data: IndexOf ////////////////////////////////////////////////////////////
/** The indexof() Function; created lazily */
- public JS.Function indexof = null;
- public JS.Function indexof() { if (indexof == null) indexof = new IndexOf(); return indexof; }
+ public JS.Callable indexof = null;
+ public JS.Callable indexof() { if (indexof == null) indexof = new IndexOf(); return indexof; }
/** a trivial private class to serve as the box.indexof function object */
- private class IndexOf extends JS.Function {
- public IndexOf() { super(-1, "java", null, null); this.setSeal(true); }
- public Object _call(JS.Array args) throws JS.Exn {
+ private class IndexOf extends JS.Callable {
+ public IndexOf() { this.setSeal(true); }
+ public Object call(JS.Array args) throws JS.Exn {
if (args.length() != 1 || args.elementAt(0) == null || !(args.elementAt(0) instanceof Box)) return new Integer(-1);
Box b = (Box)args.elementAt(0);
if (b.getParent() != Box.this) {
@@ -374,20 +374,20 @@ public final class Box extends JS.Scope {
/** returns the actual font that should be used to render this box */
private String font() {
- if (font != null) return font;
- if (font == null && cachedFont != null) return cachedFont;
- if (getParent() != null) return cachedFont = getParent().font();
- return cachedFont = Platform.getDefaultFont();
+ if (font != null) return font;
+ if (font == null && cachedFont != null) return cachedFont;
+ if (getParent() != null) return cachedFont = getParent().font();
+ return cachedFont = Platform.getDefaultFont();
}
/** this must be called when a box's font changes */
void fontChanged() {
- textupdate();
- for(Box b = getChild(0); b != null; b = b.nextSibling())
- if (b.font == null) {
- b.cachedFont = font();
- b.fontChanged();
- }
+ textupdate();
+ for(Box b = getChild(0); b != null; b = b.nextSibling())
+ if (b.font == null) {
+ b.cachedFont = font();
+ b.fontChanged();
+ }
}
/** This must be called when font or text is changed */
@@ -424,15 +424,15 @@ public final class Box extends JS.Scope {
}
/** loads the image described by string str, possibly blocking for a network load */
- static ImageDecoder getImage(String str, final Function callback) {
+ static ImageDecoder getImage(String str, final JS.Callable callback) {
if (str.indexOf(':') == -1) {
String s = str;
byte[] b = Resources.getResource(Resources.resolve(s + ".png", null));
- if (b != null) return PNG.decode(new ByteArrayInputStream(b), str);
+ if (b != null) return PNG.decode(new ByteArrayInputStream(b), str);
b = Resources.getResource(Resources.resolve(s + ".jpeg", null));
- if (b != null) return Platform.decodeJPEG(new ByteArrayInputStream(b), str);
- return null;
+ if (b != null) return Platform.decodeJPEG(new ByteArrayInputStream(b), str);
+ return null;
} else {
Thread thread = Thread.currentThread();
@@ -460,13 +460,13 @@ public final class Box extends JS.Scope {
if (ret != -1) bytesDownloaded += ret;
if (clear && callback != null) {
clear = false;
- ThreadMessage.newthread(new JS.Function(-1, "java", null, null) {
- public Object _call(JS.Array args_) throws JS.Exn {
+ ThreadMessage.newthread(new JS.Callable() {
+ public Object call(JS.Array args_) throws JS.Exn {
try {
- JS.Array args = new JS.Array();
- args.addElement(new Double(bytesDownloaded));
- args.addElement(new Double(contentLength));
- callback.call(args);
+ JS.Array args = new JS.Array();
+ args.addElement(new Double(bytesDownloaded));
+ args.addElement(new Double(contentLength));
+ callback.call(args);
} finally {
clear = true;
}
@@ -480,7 +480,7 @@ public final class Box extends JS.Scope {
if (str.endsWith(".gif")) return GIF.decode(is, str);
else if (str.endsWith(".jpeg") || str.endsWith(".jpg")) return Platform.decodeJPEG(is, str);
- else return PNG.decode(is, str);
+ else return PNG.decode(is, str);
} catch (IOException e) {
if (Log.on) Log.log(Box.class, "error while trying to load an image from " + str);
@@ -518,9 +518,9 @@ public final class Box extends JS.Scope {
} else {
image = getPicture(s);
if (image == null) {
- if (Log.on) Log.log(Box.class, "unable to load image " + s + " at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(Box.class, "unable to load image " + s + " at " + Context.getCurrentSourceNameAndLine());
return;
- }
+ }
if (sizetoimage) syncSizeToImage();
dirty();
}
@@ -539,7 +539,7 @@ public final class Box extends JS.Scope {
if (border == null) {
ImageDecoder id = getImage(s, null);
if (id == null) {
- if (Log.on) Log.log(this, "unable to load border image " + s + " at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(this, "unable to load border image " + s + " at " + Context.getCurrentSourceNameAndLine());
return;
}
int[] data = id.getData();
@@ -634,7 +634,7 @@ public final class Box extends JS.Scope {
}
/** creates a new box from an anonymous template; ids is passed through to Template.apply() */
- Box(Template anonymous, Vec pboxes, Vec ptemplates, Function callback, int numerator, int denominator) {
+ Box(Template anonymous, Vec pboxes, Vec ptemplates, JS.Callable callback, int numerator, int denominator) {
super(null);
set(dmax, 0, Integer.MAX_VALUE);
set(dmax, 1, Integer.MAX_VALUE);
@@ -646,7 +646,7 @@ public final class Box extends JS.Scope {
/** creates a new box from an unresolved templatename and an importlist; use "box" for an untemplatized box */
public Box(String templatename, String[] importlist) { this(templatename, importlist, null); }
- public Box(String templatename, String[] importlist, Function callback) {
+ public Box(String templatename, String[] importlist, JS.Callable callback) {
super(null);
set(dmax, 0, Integer.MAX_VALUE);
set(dmax, 1, Integer.MAX_VALUE);
@@ -711,12 +711,12 @@ public final class Box extends JS.Scope {
for(Box cur = this; cur != null && (cur == this || cur == this.getParent()); cur = cur.getParent()) {
cur.dirty(pos(0) + min(oldsize(0) - bw, size(0) - bw),
pos(1),
- Math.abs(oldsize(0) - size(0)) + bw,
+ java.lang.Math.abs(oldsize(0) - size(0)) + bw,
max(oldsize(1), size(1)));
cur.dirty(pos(0),
pos(1) + min(oldsize(1) - bh, size(1) - bh),
max(oldsize(0), size(0)),
- Math.abs(oldsize(1) - size(1)) + bh);
+ java.lang.Math.abs(oldsize(1) - size(1)) + bh);
}
// SLOWPATH: dirty ourselves, as well as our former position on our parent
@@ -741,14 +741,14 @@ public final class Box extends JS.Scope {
if (++surface.sizePosChangesSinceLastRender >= 500) {
if (surface.sizePosChangesSinceLastRender == 500) {
if (Log.on) Log.log(this, "Warning, more than 500 SizeChange/PosChange traps triggered since last complete render");
- if (Log.on) Log.log(this, " interpreter is at " + JS.getCurrentFunctionSourceName());
- /*
+ if (Log.on) Log.log(this, " interpreter is at " + Context.getCurrentSourceNameAndLine());
+ /*
try {
Trap t = sizechange ? Trap.getTrap(this, "SizeChange") : Trap.getTrap(this, "PosChange");
- InterpretedFunction f = (InterpretedFunction)t.f;
+ InterpretedJS.Callable f = (InterpretedJS.Callable)t.f;
if (Log.on) Log.log(this, "Current trap is at " + f.getSourceName() + ":" + f.getLineNumbers()[0]);
} catch (Throwable t) { }
- */
+ */
}
} else {
if (sizechange) put("SizeChange", Boolean.TRUE);
@@ -1062,7 +1062,7 @@ public final class Box extends JS.Scope {
public Object get(int i) {
if (redirect == null) return null;
if (redirect != this) return redirect.get(i);
- return i >= numChildren() ? null : getChild(i);
+ return i >= numChildren() || i < 0 ? null : getChild(i);
}
/**
@@ -1072,12 +1072,13 @@ public final class Box extends JS.Scope {
* WARNING: O(n) runtime, unless i == numChildren()
*/
public void put(int i, Object value) {
+ if (i < 0) return;
if (value != null && !(value instanceof Box)) {
- if (Log.on) Log.log(this, "attempt to set a numerical property on a box to anything other than a box at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(this, "attempt to set a numerical property on a box to anything other than a box at " + Context.getCurrentSourceNameAndLine());
} else if (redirect == null) {
- if (Log.on) Log.log(this, "attempt to add/remove children to/from a node with a null redirect at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(this, "attempt to add/remove children to/from a node with a null redirect at " + Context.getCurrentSourceNameAndLine());
} else if (redirect != this) {
Box b = value == null ? (Box)redirect.get(i) : (Box)value;
redirect.put(i, value);
@@ -1091,7 +1092,7 @@ public final class Box extends JS.Scope {
}
} else if (value instanceof RootProxy) {
- if (Log.on) Log.log(this, "attempt to reparent a box via its proxy object at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(this, "attempt to reparent a box via its proxy object at " + Context.getCurrentSourceNameAndLine());
} else {
Box newnode = (Box)value;
@@ -1100,7 +1101,7 @@ public final class Box extends JS.Scope {
for(Box cur = newnode.getParent(); cur != null; cur = cur.getParent())
if (cur.redirect == newnode) {
if (Log.on) Log.log(this, "attempt to move a box that is the target of a redirect at "+
- JS.getCurrentFunctionSourceName());
+ Context.getCurrentSourceNameAndLine());
return;
}
@@ -1108,7 +1109,7 @@ public final class Box extends JS.Scope {
for(Box cur = this; cur != null; cur = cur.getParent())
if (cur == newnode) {
if (Log.on) Log.log(this, "attempt to make a node a parent of its own ancestor at " +
- JS.getCurrentFunctionSourceName());
+ Context.getCurrentSourceNameAndLine());
if (Log.on) Log.log(this, "box == " + this + " ancestor == " + newnode);
return;
}
@@ -1164,9 +1165,9 @@ public final class Box extends JS.Scope {
public Object get(Object name) { return get(name, false); }
public Object get(Object name_, boolean ignoretraps) {
- if (name_ instanceof Number) return get(((Number)name_).intValue());
+ if (name_ instanceof Number) return get(((Number)name_).intValue());
- String name = (String)name_;
+ String name = (String)name_;
if (name.equals("")) return null;
// See if we're reading back the function value of a trap
@@ -1188,13 +1189,13 @@ public final class Box extends JS.Scope {
Object ret = super.get(name);
if (name.startsWith("$") && ret == null)
if (Log.on) Log.log(this, "WARNING: attempt to access " + name + ", but no child with id=\"" + name.substring(1) + "\" found; " +
- JS.getFileAndLine());
+ Context.getCurrentSourceNameAndLine());
return ret;
}
public Object[] keys() {
Object[] ret = new Object[numChildren()];
- for(int i=0; i