view tool_stack.d @ 2:d6f44347373d

* Switched over to geometry done with structs instead of classes. * Removed direct access to gtk structs * Refactoring
author David Bryant <daveb@acres.com.au>
date Fri, 10 Jul 2009 15:15:27 +0930
parents
children 7d57cae10805
line wrap: on
line source

module tool_stack;

import std.stdio;

private import icanvas;
private import tk.types;
private import tk.geometry2;
private import tk.events;

//IToolStack

class ToolStack : ICanvasEventHandler {
    override bool handle_button_press(ICanvas canvas, ButtonEvent event) {
        writefln("%s", event);
        return true;
    }

    override bool handle_button_release(ICanvas canvas, ButtonEvent event) {
        writefln("%s", event);
        return true;
    }

    override bool handle_key_press(ICanvas canvas, KeyEvent event) {
        writefln("%s", event);
        return true;
    }

    override bool handle_key_release(ICanvas canvas, KeyEvent event) {
        writefln("%s", event);
        return true;
    }

    override bool handle_motion(ICanvas canvas, MotionEvent event) {
        writefln("%s", event);
        return true;
    }

    override bool handle_scroll(ICanvas canvas, ScrollEvent event) {
        writefln("%s", event);

        if (event.mask.query(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);
        }
        else {
            // Scroll

            const double AMOUNT = 30.0;
            Vector2 v;

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

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

            canvas.rel_pan(v);
        }

        return true;
    }

    /*
    override void push(Tool tool) {
    }

    override void pop() {
    }

    override void replace(Tool tool) {
    }

    private {
        Tool[] mTools;
        int mGrabbedToolIndex;  // -1 for none
    }
    */
}