X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FBox.java.pp;h=473d049d3999c4cc836f181c3e974b105603b069;hb=b205a30ca1e66d49676d807969dd73da999c26f0;hp=04a0ee28baad1a8815a579aeb40ac8679955a805;hpb=4963611978625d087561f5a669a0ba93a04bd1ba;p=org.ibex.core.git diff --git a/src/org/xwt/Box.java.pp b/src/org/xwt/Box.java.pp index 04a0ee2..473d049 100644 --- a/src/org/xwt/Box.java.pp +++ b/src/org/xwt/Box.java.pp @@ -89,7 +89,6 @@ public final class Box extends JS.Scope { static final int NOTPACKED_FLAG = 0x00000004; static final int HSHRINK_FLAG = 0x00000008; static final int VSHRINK_FLAG = 0x00000010; - static final int TILE_FLAG = 0x00000020; static final int FONT_CHANGED_FLAG = 0x00000040; // set when font changes, cleared during repack static final int ISROOT_FLAG = 0x00000080; static final int NOCLIP_FLAG = 0x00000100; @@ -113,8 +112,7 @@ public final class Box extends JS.Scope { public LENGTH maxwidth = MAX_LENGTH; public LENGTH maxheight = MAX_LENGTH; private String text = null; - private Res font = null; - private int fontsize = 10; + private Font font = null; private LENGTH textwidth = 0; private LENGTH textheight = 0; @@ -436,6 +434,7 @@ public final class Box extends JS.Scope { int globaly = parenty + (parent == null ? 0 : y); // intersect the x,y,w,h rendering window with ourselves; quit if it's empty + if ((flags & NOCLIP_FLAG) == 0) { clipw = min(max(clipx, parent == null ? 0 : globalx) + clipw, (parent == null ? 0 : globalx) + width) - globalx; cliph = min(max(clipy, parent == null ? 0 : globaly) + cliph, (parent == null ? 0 : globaly) + height) - globaly; @@ -450,11 +449,19 @@ public final class Box extends JS.Scope { } if (image != null) - if ((flags & TILE_FLAG) != 0) renderTiledImage(globalx, globaly, clipx, clipy, clipw, cliph, buf); - else renderStretchedImage(globalx, globaly, clipx, clipy, clipw, cliph, buf); - - if (text != null && !text.equals("")) - renderText(globalx, globaly, clipx, clipy, clipw, cliph, buf); + for(int x = globalx; x < clipx + clipw; x += image.getWidth()) + for(int y = globaly; y < clipy + cliph; y += image.getHeight()) + buf.drawPicture(image, x, y, clipx, clipy, clipx + clipw, clipy + cliph); + + if (text != null && !text.equals("") && font != null) // FIXME + font.rasterizeGlyphs(text, buf, textcolor, + globalx, globaly, clipx, clipy, clipw + clipx, clipy + cliph, + new Scheduler.Task() { public void perform() { + Box.this.dirty(); + Box b = Box.this; + MARK_FOR_REFLOW_b; + b.dirty(); + }}); if (path != null) { if (rtransform == null) rpath = null; @@ -480,51 +487,6 @@ public final class Box extends JS.Scope { } } - void renderStretchedImage(int globalx, int globaly, int clipx, int clipy, int clipw, int cliph, PixelBuffer buf) { - // 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) { - int iw = image.getWidth(); - int ih = image.getHeight(); - for(int i=(x - x)/iw; i <= (x + w - x)/iw; i++) { - for(int j=(y - y)/ih; j<= (y + h - y)/ih; j++) { - - int dx1 = max(i * iw + x, x); - int dy1 = max(j * ih + y, y); - int dx2 = min((i+1) * iw + x, x + w); - int dy2 = min((j+1) * ih + y, y + h); - - int sx1 = dx1 - (i*iw) - x; - int sy1 = dy1 - (j*ih) - y; - int sx2 = dx2 - (i*iw) - x; - int sy2 = dy2 - (j*ih) - y; - - if (dx2 - dx1 > 0 && dy2 - dy1 > 0 && sx2 - sx1 > 0 && sy2 - sy1 > 0) - buf.drawPicture(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2); - } - } - } - - void renderText(int x, int y, int clipx, int clipy, int clipw, int cliph, PixelBuffer buf) { - for(int i=0; i= 0 && i < numChildren()) { Box b = getChild(i); b.remove(); - if (t != null) t.perform(b); + if (t != null) return t.perform(b); } } else { Box newnode = (Box)value; @@ -584,7 +547,7 @@ public final class Box extends JS.Scope { for(Box cur = newnode.parent; cur != null; cur = cur.parent) if (cur.redirect == newnode) { if (Log.on) Log.logJS(this, "attempt to move a box that is the target of a redirect"); - return; + return null; } // check for recursive ancestor violation @@ -592,7 +555,7 @@ public final class Box extends JS.Scope { if (cur == newnode) { if (Log.on) Log.logJS(this, "attempt to make a node a parent of its own ancestor"); if (Log.on) Log.log(this, "box == " + this + " ancestor == " + newnode); - return; + return null; } if (numKids > 15 && children == null) convert_to_array(); @@ -637,12 +600,13 @@ public final class Box extends JS.Scope { MARK_FOR_REFLOW_this; newnode.dirty(); - if (t != null) t.perform(b); + if (t != null) return t.perform(b); } + return null; } 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 void put2(Object key, Object key2, Object val) { super.put2(key, key2, val); } public Object get_(Object name) { return super.get(name); } public Object get(Object name) { return get(name, false); } @@ -655,7 +619,7 @@ public final class Box extends JS.Scope { // See if we're triggering a trap Trap t = ignoretraps ? (Trap)null : (Trap)get(name, Trap.class); - if (t != null) return t.perform(); + if (t != null) { t.perform(); return null; } // Check for a special handler SpecialBoxProperty gph = (SpecialBoxProperty)SpecialBoxProperty.specialBoxProperties.get(name); @@ -684,23 +648,20 @@ 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); } - 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; } + public Object put(Object name, Object value) { return put(name, value, false); } + public Object put(Object name_, Object value, boolean ignoretraps) { + if (name_ instanceof Number) { return put(((Number)name_).intValue(), value); } + if (!(name_ instanceof String)) { return super.put(name_,value); } String name = name_.toString(); if (!ignoretraps) { Trap t = (Trap)get(name, Trap.class); - if (t != null) { - t.perform(value); - return; - } + if (t != null) return t.perform(value); } SpecialBoxProperty gph = (SpecialBoxProperty)SpecialBoxProperty.specialBoxProperties.get(name); - if (gph != null) { gph.put(name, this, value); return; } + if (gph != null) { gph.put(name, this, value); return null; } - super.put(name, value); + return super.put(name, value); } @@ -766,7 +727,9 @@ public final class Box extends JS.Scope { // note that JavaScript box[0] will invoke put(int i), not put(String s) if (oldparent != null) { Trap t = (Trap)oldparent.get("childremoved", Trap.class); - if (t != null) t.perform(this); + + // FIXME!! + //if (t != null) t.perform(this, tail); } } @@ -844,23 +807,22 @@ public final class Box extends JS.Scope { } public void recompute_font() { - try { - MARK_FOR_REFLOW_this; - textwidth = 0; - textheight = 0; - if (text == null) return; - for(int i=0; i> 16); + textheight = (int)(widthheight & 0x0000ffff); + MARK_FOR_REFLOW_this; } - // Trivial Helper Methods (should be inlined) ///////////////////////////////////////// + // Trivial Helper Method s(should be inlined) ///////////////////////////////////////// static final int min(int a, int b) { if (a