GWTCanvasでテキスト描画

Canvasでテキスト描画したいと思ったら、GWTCanvasはテキスト描画に対応してなくて困った。
ということで、GWTCanvasでテキスト描画するためにCanvasのネイティブメソッドを呼び出すJSNIメソッドを作ってみた。

    private static native void canvasFillText(GWTCanvas c, String str, double x, double y)/*-{
      var impl = c.@com.google.gwt.widgetideas.graphics.client.GWTCanvas::impl;
      (impl.@com.google.gwt.widgetideas.graphics.client.impl.GWTCanvasImplDefault::canvasContext).fillText(str, x, y);
     }-*/;

    private static native void canvasSetFont(GWTCanvas c, String f)/*-{
      var impl = c.@com.google.gwt.widgetideas.graphics.client.GWTCanvas::impl;
      (impl.@com.google.gwt.widgetideas.graphics.client.impl.GWTCanvasImplDefault::canvasContext).font = f;
     }-*/;

ほかのメソッドやフィールドを使いたいときは、同じ要領で作ってみればいいと思う。


IEには対応していないので、判定して振り分ける必要はあります。
今回作ったものはIEで使わない前提なのですが、hostedで動かすときはIEコンポーネントなので、 GWT#isScript() で判定して呼び出しを切り替えました。