- // FIXME: clipping
- char c = text.charAt(i);
- Glyph g = Glyph.getGlyph(font, fontsize, c);
- if (g.p != null)
- buf.drawPictureAlphaOnly(g.p,
- x,
- y + g.max_ascent - g.baseline + g.max_descent,
- x,
- y + g.max_ascent - g.baseline + g.max_descent,
- x + g.p.getWidth(),
- y + g.max_ascent - g.baseline + g.max_descent + g.p.getHeight(),
- textcolor);
- x += g.advance;
+ final char c = text.charAt(i);
+ Glyph g = Glyph.getCachedGlyph(font, fontsize, c);
+ if (g != null) {
+ int top = y + g.max_ascent - g.baseline + g.max_descent;
+ if (g.p != null)
+ buf.drawPictureAlphaOnly(g.p, x, top,
+ clipx, clipy, clipx + clipw, clipy + cliph, textcolor);
+ x += g.advance;
+ } else {
+ final int fontsize_final = fontsize;
+ final Res font_final = font;
+ ThreadMessage.newthread(new JS.Callable() {
+ public Object call(JS.Array args) {
+ Glyph.renderGlyph(font_final, fontsize_final, c);
+ recompute_font();
+ Box b = Box.this; MARK_FOR_REFLOW_b;
+ dirty();
+ return null;
+ } });
+ return;
+ }