view doodle/dia/icanvas.d @ 105:7abaf5c3959f

Merge
author David Bryant <bagnose@gmail.com>
date Sun, 20 Feb 2011 22:27:06 +1030
parents ab745d8b10e5 523269b36711
children bc5baa585b32
line wrap: on
line source

module doodle.dia.icanvas;

public {
    import doodle.tk.geometry;
    import doodle.tk.events;
    import doodle.tk.renderer;
    import doodle.tk.screen_model;
}

private {
    import std.typecons;
}

enum Cursor {
    DEFAULT,
    HAND,
    CROSSHAIR,
    PENCIL
}

interface IViewport2 {
    void damageModel(in Rectangle area);
    void damageScreen(in Rectangle area);
}

interface IViewport : IViewport2 {
    void zoomRelative(in double factor, in Point screenDatum);
    void panRelative(in Vector screenDisplacement);
    void setCursor(in Cursor cursor);
}

/*
final class Damage {
    void increase(in Rectangle additional) { _rectangle = _rectangle | additional; }
    Rectangle rectangle() const { return _rectangle; }
    private Rectangle _rectangle;
}
*/

interface IEventHandler {
    bool handleButtonPress(scope IViewport viewport, in ButtonEvent event);
    bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event);
    bool handleMotion(scope IViewport viewport, in MotionEvent event);
    bool handleScroll(scope IViewport viewport, in ScrollEvent event);
    bool handleEnter(scope IViewport viewport, in CrossingEvent event);
    bool handleLeave(scope IViewport viewport, in CrossingEvent event);
    bool handleKeyPress(scope IViewport viewport, in KeyEvent event);
    bool handleKeyRelease(scope IViewport viewport, in KeyEvent event);

    // XXX Still not sure about these:
    //bool handleFocusIn(scope IViewport viewport, FocusEvent event);
    //bool handleFocusOut(scope IViewport viewport, FocusEvent event);
}

interface IGrid {
    void zoomChanged(in double zoom);

}

interface IPage {
}

abstract class Layer {
    this(in string name) {
        _name = name;
    }

    string name() const { return _name; }

    Rectangle bounds() const;

    //bool snap(in Point a, out Point b) const;

    void draw(in Rectangle screenDamage, scope Renderer screenRenderer,
              in Rectangle modelDamage, scope Renderer modelRenderer,
              in ScreenModel screenModel) const;

    private {
        immutable string _name;
    }
}