views:

137

answers:

0

Hi.

I am new to LWUIT and j2me, and I am building a j2me application for showing Japanese text vertically. The phonetic symbol part of the text should be shown in relatively small font size (about half the size of the text), small Kanas need to be shown as normal ones, and some 'vertical only' characters need to be put into the Private Use Area, etc.

I tried to build this font into a bitmap font using the FontTask ant task LWUIT provided, but found that it does support the customizations mentioned above. So I decided to write my own task and add those.

Below is what I have achieved:

1 An ant task extending the LWUITTask task to support a new nested element <verticalfont>.

    public class VerticalFontBuildTask extends LWUITTask {

    public void addVerticalfont(VerticalFontTask anVerticalFont) {
        super.addFont(anVerticalFont);
   }
}

2 The VerticalFontTask task, which extends the original FontTask. Instead of inserting a EditorFont object, it inserts a VerticalEditorFont object(derived from EditorFont) into the resource.

public class VerticalFontTask extends FontTask {
// some constants are omitted
public VerticalFontTask() {
    StringBuilder sb = new StringBuilder();
    sb.append(UPPER_ALPHABET);
    sb.append(UPPER_ALPHABET.toLowerCase());
    sb.append(HALFWIDTH);
    sb.append(HIRAGANA);
    sb.append(HIRAGANA_SMALL);
    sb.append(KATAKANA);
    sb.append(KATAKANA_SMALL);
    sb.append(WIDE);
    this.setCharset(sb.toString());
}

@Override
public void addToResources(EditableResources e) {

    log("Putting rigged font into resource...");
    super.addToResources(e);
    //antialias settings
    Object aa = this.isAntiAliasing()
            ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON
            :RenderingHints.VALUE_TEXT_ANTIALIAS_OFF;

    VerticalEditorFont ft = new VerticalEditorFont(
            Font.createSystemFont(
                this.systemFace,
                this.systemStyle,
                this.systemSize),
            null,
            getLogicalName(),
            isCreateBitmap(),
            aa,
            getCharset());
    e.setFont(getName(), ft);
}

VerticalEditorFont is just a bunch of methods logging to output and call the super. I am still trying to figure out how to extend it.

But things are not going well: none of the methods on the VerticalEditorFont object get called when executing this task.

My questions are:

1 where did I do wrong?

2 I want to embed a truetype font to support larger screens. I only need a small part of the font inside my application and I don't want it to carry a font resource weighing 1~2MB. Is there a way to extract only the characters needed and pack them into LWUIT?