X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FBox.java.pp;h=2c25b443ab68d9fee78ca540daa8183da32bd7d7;hb=a81a151e639664cb340cf3726f9e8b9c77d125fb;hp=eb8c0c011ccbc643891282b3618d6e9bb0bcee88;hpb=8ea2f2734a60f0c4fa9c82083469165283a8b810;p=org.ibex.core.git diff --git a/src/org/xwt/Box.java.pp b/src/org/xwt/Box.java.pp index eb8c0c0..2c25b44 100644 --- a/src/org/xwt/Box.java.pp +++ b/src/org/xwt/Box.java.pp @@ -6,9 +6,6 @@ package org.xwt; // RULE: coordinates on non-static methods are ALWAYS relative to the // upper-left hand corner of this -// FIXME: font color, italicization, bolding, and underlining -// FIXME: align -// FIXME: fixed aspect // FEATURE: reflow before allowing js to read from width/height // FEATURE: fastpath for rows=1/cols=1 // FEATURE: reflow starting with a certain child @@ -72,7 +69,7 @@ public final class Box extends JS.Scope { // Misc instance data //////////////////////////////////////////////////////////////// - private static int sizePosChangesSinceLastRender = 0; + static int sizePosChangesSinceLastRender = 0; // Misc instance data //////////////////////////////////////////////////////////////// @@ -85,31 +82,16 @@ public final class Box extends JS.Scope { Box redirect = this; Surface surface = null; // null on all non-root boxen - // FEATURE: combine this with the JSObject Hash - Hash traps = null; - - // Flags /////////////////////////////////////////////////////////////////////////////// + short flags = 0; static int MOUSEINSIDE_FLAG = 0x00000001; static int INVISIBLE_FLAG = 0x00000002; static int ABSOLUTE_FLAG = 0x00000004; - static int HSHRINK_FLAG = 0x00000010; - static int VSHRINK_FLAG = 0x00000020; - static int TILE_FLAG = 0x00000040; - - /** - * Set when the font changes, cleared during repack. If set - * during repack, all font==null children are marked for reflow - * and given the font_changed_flag. We use this flag to avoid - * having to iterate over all descendents of a box when its font - * changes. - */ - static int FONT_CHANGED_FLAG = 0x00000100; - static int ISROOT_FLAG = 0x00000200; - - static int ALIGN_FLAG = 0x00000000; - static int FIXEDASPECT_FLAG = 0x00000000; - int flags = 0; + static int HSHRINK_FLAG = 0x00000008; + static int VSHRINK_FLAG = 0x00000010; + static int TILE_FLAG = 0x00000020; + static int FONT_CHANGED_FLAG = 0x00000040; // set when font changes, cleared during repack + static int ISROOT_FLAG = 0x00000080; // Geometry //////////////////////////////////////////////////////////////////////////// @@ -139,8 +121,8 @@ public final class Box extends JS.Scope { private int colspan = 1; // computed during reflow - LENGTH x = 0; - LENGTH y = 0; + public LENGTH x = 0; + public LENGTH y = 0; public LENGTH width = 0; public LENGTH height = 0; private int row = 0; // FEATURE use a short @@ -167,7 +149,6 @@ public final class Box extends JS.Scope { /** Adds the intersection of (x,y,w,h) and the node's current actual geometry to the Surface's dirty list */ public final void dirty() { dirty(0, 0, width, height); } public final void dirty(int x, int y, int w, int h) { - /* for(Box cur = this; cur != null; cur = cur.parent) { w = min(x + w, cur.width) - max(x, 0); h = min(y + h, cur.height) - max(y, 0); @@ -178,10 +159,6 @@ public final class Box extends JS.Scope { x += cur.x; y += cur.y; } - */ - Box cur; - for(cur = this; cur.parent != null; cur = cur.parent); - if (cur.surface != null) cur.surface.dirty(0, 0, cur.width, cur.height); } /** @@ -200,10 +177,10 @@ public final class Box extends JS.Scope { if (!wasinside && !isinside) return; - if (traps == null) { } - else if (!wasinside && isinside && traps.get("Enter") != null) put("Enter", Boolean.TRUE); - else if (wasinside && !isinside && traps.get("Leave") != null) put("Leave", Boolean.TRUE); - else if (wasinside && isinside && (mousex != oldmousex || mousey != oldmousey) && traps.get("Move") != null) put("Move", Boolean.TRUE); + if (!wasinside && isinside && get("Enter", Trap.class) != null) put("Enter", Boolean.TRUE); + else if (wasinside && !isinside && get("Leave", Trap.class) != null) put("Leave", Boolean.TRUE); + else if (wasinside && isinside && (mousex != oldmousex || mousey != oldmousey) && get("Move", Trap.class) != null) + put("Move", Boolean.TRUE); if (isinside && cursor != null) getRoot().cursor = cursor; @@ -300,8 +277,8 @@ public final class Box extends JS.Scope { if (x != this.x || y != this.y || width != this.width || height != this.height) { (parent == null ? this : parent).dirty(this.x, this.y, this.width, this.height); boolean sizechange = false, poschange = false; - if (traps != null && (this.width != width || this.height != height) && traps.get("SizeChange") != null) sizechange = true; - if (traps != null && (this.x != x || this.y != y) && traps.get("PosChange") != null) poschange = true; + if ((this.width != width || this.height != height) && get("SizeChange", Trap.class) != null) sizechange = true; + if ((this.x != x || this.y != y) && get("PosChange", Trap.class) != null) poschange = true; this.width = width; this.height = height; this.x = x; this.y = y; dirty(); if (sizechange || poschange) @@ -443,12 +420,8 @@ public final class Box extends JS.Scope { } void renderStretchedImage(int globalx, int globaly, int clipx, int clipy, int clipw, int cliph, PixelBuffer buf) { - //buf.setClip(x, y, w + x, h + y); - System.out.println("draw " + clipx + " " + clipy + " " + (clipx + clipw) + " " + (clipy + cliph)); - buf.drawPicture(image, - clipx, clipy, clipx + clipw, clipy + cliph, - 0, 0, image.getWidth(), image.getHeight()); - //buf.setClip(0, 0, buf.getWidth(), buf.getHeight()); + // FIXME: wrong + buf.drawPicture(image, clipx, clipy, clipx + clipw, clipy + cliph, 0, 0, image.getWidth(), image.getHeight()); } void renderTiledImage(int globalx, int globaly, int x, int y, int w, int h, PixelBuffer buf) { @@ -506,31 +479,28 @@ public final class Box extends JS.Scope { } else if ("apply".equals(method)) { if (checkOnly) return Boolean.TRUE; if (args.elementAt(0) instanceof Res) { - try { Res res = (Res)args.elementAt(0); // res = res.addExtension(".xwt"); - Template t = Template.buildTemplate(res.getInputStream(), "fromResource"); + Template t = Template.getTemplate(res); if (ThreadMessage.suspendThread()) try { JS.Callable callback = args.length() < 2 ? null : (Callable)args.elementAt(1); - + // FIXME!!! needs to be xwt.apply(template, box) - t.apply(this, null, null, callback, 0, t.numUnits(), null); + t.apply(this, callback, 0, t.numUnits(), null); } finally { ThreadMessage.resumeThread(); } - } catch (IOException e) { - Log.log(this, e); - } } else if (args.elementAt(0) instanceof String) { String templatename = (String)args.elementAt(0); - Template t = Template.getTemplate(templatename, null); + // FIXME + Template t = Template.getTemplate(null); if (t == null) { if (Log.on) Log.logJS(this, "template " + templatename + " not found"); } else { if (ThreadMessage.suspendThread()) try { JS.Callable callback = args.length() < 2 ? null : (Callable)args.elementAt(1); // FIXME!!! needs to be xwt.apply(template, box) - t.apply(this, null, null, callback, 0, t.numUnits(), null); + t.apply(this, callback, 0, t.numUnits(), null); } finally { ThreadMessage.resumeThread(); } @@ -575,8 +545,6 @@ public final class Box extends JS.Scope { b.remove(); put("0", b); } - } else if (value instanceof RootProxy) { - if (Log.on) Log.logJS(this, "attempt to reparent a box via its proxy object"); } else { Box newnode = (Box)value; @@ -643,6 +611,9 @@ public final class Box extends JS.Scope { } } + public Object get(Object key, Object key2) { return super.get(key, key2); } + public void put(Object key, Object key2, Object val) { super.put(key, key2, val); } + public Object get_(Object name) { return super.get(name); } public Object get(Object name) { return get(name, false); } public Object get(Object name_, boolean ignoretraps) { @@ -653,7 +624,7 @@ public final class Box extends JS.Scope { if (name.equals("")) return null; // See if we're triggering a trap - Trap t = traps == null || ignoretraps ? null : (Trap)traps.get(name); + Trap t = ignoretraps ? (Trap)null : (Trap)get(name, Trap.class); if (t != null) return t.perform(); // Check for a special handler @@ -662,7 +633,8 @@ public final class Box extends JS.Scope { Object ret = super.get(name); if (name.startsWith("$") && ret == null) - if (Log.on) Log.logJS(this, "WARNING: attempt to access " + name + ", but no child with id=\"" + name.substring(1) + "\" found"); + if (Log.on) Log.logJS(this, "WARNING: attempt to access " + name + ", but no child with id=\"" + + name.substring(1) + "\" found"); return ret; } @@ -682,14 +654,13 @@ public final class Box extends JS.Scope { * @param rp if this put is being performed via a root proxy, rp is the root proxy. */ public void put_(Object name, Object value) { super.put(name, value); } - public void put(Object name, Object value) { put(name, value, false, null); } - public void put(Object name, Object value, boolean ignoretraps) { put(name, value, ignoretraps, null); } - public void put(Object name_, Object value, boolean ignoretraps, RootProxy rp) { + public void put(Object name, Object value) { put(name, value, false); } + public void put(Object name_, Object value, boolean ignoretraps) { if (name_ instanceof Number) { put(((Number)name_).intValue(), value); return; } if (!(name_ instanceof String)) { super.put(name_,value); return; } String name = name_.toString(); - if (!ignoretraps && traps != null) { - Trap t = (Trap)traps.get(name); + if (!ignoretraps) { + Trap t = (Trap)get(name, Trap.class); if (t != null) { t.perform(value); return; @@ -843,27 +814,6 @@ public final class Box extends JS.Scope { } - // Root Proxy /////////////////////////////////////////////////////////////////////////////// - - // FEATURE: use xwt.graft() here - RootProxy myproxy = null; - public JS getRootProxy() { - if (myproxy == null) myproxy = new RootProxy(this); - return myproxy; - } - - private static class RootProxy extends JS { - Box box; - RootProxy(Box b) { this.box = b; } - public Object get(Object name) { return box.get(name); } - public void put(Object name, Object value) { box.put(name, value, false, this); } - public Object[] keys() { return box.keys(); } - public Object callMethod(Object method, JS.Array args, boolean justChecking) { - return ((Box)box).callMethod(method,args,justChecking); - } - } - - // Trivial Helper Methods (should be inlined) ///////////////////////////////////////// static final int min(int a, int b) { if (a