view standard_tools.d @ 7:936feb16eed4

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 21:29:03 +0930
parents 7d57cae10805
children bf7903435f58
line wrap: on
line source

module standard_tools;

import tool;
import icanvas;
import tk.types;
import tk.events;
import tk.geometry;

final class PanTool : Tool {
    bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
        if (event.button_name == ButtonName.MIDDLE) {
            return true;
        }
        else {
            return false;
        }
    }

    bool handle_button_release(ICanvas canvas, in ButtonEvent event) {
        return false;
    }

    bool handle_motion(ICanvas canvas, in MotionEvent event) {
        return false;
    }

    bool handle_scroll(ICanvas canvas, in ScrollEvent event) {
        const double AMOUNT = 30.0;
        Vector v;

        if (event.mask.is_set(Modifier.SHIFT)) {
            // left to right
            v = Vector(AMOUNT, 0.0);
        }
        else {
            // down to up
            v = Vector(0.0, AMOUNT);
        }

        if (event.scroll_direction == ScrollDirection.UP) {
            v = -v;
        }

        canvas.rel_pan(v);

        return true;
    }

    bool handle_key_press(ICanvas canvas, in KeyEvent event) {
        return false;
    }

    bool handle_key_release(ICanvas canvas, in KeyEvent event) {
        return false;
    }
}

final class ZoomTool : Tool {
    static invariant double ZOOM = 1.44;

    bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
        return false;
    }

    bool handle_button_release(ICanvas canvas, in ButtonEvent event) {
        return false;
    }

    bool handle_motion(ICanvas canvas, in MotionEvent event) {
        return false;
    }

    bool handle_scroll(ICanvas canvas, in ScrollEvent event) {
        if (event.mask.is_set(Modifier.CONTROL)) {
            // Zoom about the pointer
            double zoom = 1.44;

            if (event.scroll_direction == ScrollDirection.DOWN) {
                zoom = 1.0 / zoom;
            }

            canvas.rel_zoom(event.screen_point(), zoom);

            return true;
        }
        else {
            return false;
        }
    }

    bool handle_key_press(ICanvas canvas, in KeyEvent event) {
        return false;
    }

    bool handle_key_release(ICanvas canvas, in KeyEvent event) {
        return false;
    }
}