batik入門記その3 〜Squiggle-the SVG Browser解析編2〜

JSVGCanvasへの機能追加は、Interactor なるインタフェースを実装すればいいらしい。デフォルトでは以下のInteractor が組み込まれている。

  /**
     * An interactor to perform a zoom.
     * Binding: BUTTON1 + CTRL Key
     */
    protected Interactor zoomInteractor = new AbstractZoomInteractor() {
        public boolean startInteraction(InputEvent ie) {…}
    };
    /**
     * An interactor to perform a realtime zoom.
     * Binding: BUTTON3 + SHIFT Key
     */
    protected Interactor imageZoomInteractor
        = new AbstractImageZoomInteractor() {
        public boolean startInteraction(InputEvent ie) {…}
    };
    /**
     * An interactor to perform a translation.
     * Binding: BUTTON1 + SHIFT Key
     */
    protected Interactor panInteractor = new AbstractPanInteractor() {
        public boolean startInteraction(InputEvent ie) {…}
    };
    /**
     * An interactor to perform a rotation.
     * Binding: BUTTON3 + CTRL Key
     */
    protected Interactor rotateInteractor = new AbstractRotateInteractor() {
        public boolean startInteraction(InputEvent ie) {…}
    };
    /**
     * An interactor to reset the rendering transform.
     * Binding: CTRL+SHIFT+BUTTON3
     */
    protected Interactor resetTransformInteractor =
        new AbstractResetTransformInteractor() {
        public boolean startInteraction(InputEvent ie) {…}
    };

んで、JSVGanvasのデフォルトコンストラクタを見ると

 JSVGCanvas(SVGUserAgent, boolean, boolean)

を this(null, true, true)で呼び出している。とりあえずSVGUserAgentは置いとくとして、中では、

 List intl = getInteractors();
  intl.add(zoomInteractor);
  intl.add(imageZoomInteractor);
  intl.add(panInteractor);
  intl.add(rotateInteractor);
  intl.add(resetTransformInteractor);

のようにデフォルトInteractor をすべて登録している。ってことはさっき作ったすかすかアプリでも既にこれらの機能が使用可能ってことですかい?

う〜ん、確かにいろいろとイベントにくっ付いているみたいだけど、何だか上の宣言のとおりに動いていないのがあるような…とりあえずこの辺の基本的なのは用意してある、と。後でちゃんと動作検証しないといけませんな。