view doodle/tk/events.d @ 64:eb5436b47d13

Implemented crossing events
author "David Bryant <bagnose@gmail.com>"
date Thu, 12 Aug 2010 22:21:12 +0930
parents 20d6327c4a75
children 31d10176415d
line wrap: on
line source

module doodle.tk.events;

public {
    import doodle.tk.types;
    import doodle.tk.geometry;
}

// FIXME
// Do we need FocusEvent. Note, it has no mask.
// Hence would need to refactor hierarchy slightly, eg InputEvent

abstract class Event {
    this(in Mask mask) {
        _mask = mask;
    }

    Mask mask() const { return _mask; }

    private {
        Mask _mask;
    }
}

final class KeyEvent : Event {
    this(in string str, in uint value, in Mask mask) {
        super(mask);
        _str = str;
        _value = value;
    }

    string str() const { return _str; }
    uint value() const { return _value; }

    override string toString() const {
        return std.string.format("Key event: %s, %d, %s", _str, _value, _mask);
    }

    private {
        string _str;
        uint _value;
    }
}

abstract class PointerEvent : Event {
    this(in Point pixelPoint, in Point modelPoint, in Mask mask) {
        super(mask);
        _pixelPoint = pixelPoint;
        _modelPoint = modelPoint;
    }

    Point pixelPoint() const { return _pixelPoint; }
    Point modelPoint() const { return _modelPoint; }

    private {
        Point _pixelPoint;
        Point _modelPoint;
    }
}

final class CrossingEvent : PointerEvent {
    this(in CrossingMode crossingMode,
         in Point pixelPoint,
         in Point modelPoint,
         in Mask mask) {
        super(pixelPoint, modelPoint, mask);
        _crossingMode = crossingMode;
    }

    CrossingMode crossingMode() const { return _crossingMode; }

    override string toString() const {
        return std.string.format("Crossing event: %s, %s, %s, %s", enumToString(_crossingMode), pixelPoint, modelPoint, mask);
    }

    private {
        CrossingMode _crossingMode;
    }
}

final class ButtonEvent : PointerEvent {
    this(in ButtonAction buttonAction,
         in ButtonName buttonName,
         in Point pixelPoint,
         in Point modelPoint,
         in Mask mask) {   
        super(pixelPoint, modelPoint, mask);
        _buttonAction = buttonAction;
        _buttonName = buttonName;
    }

    override string toString() const {
        return std.string.format("Button event: %s, %s, %s, %s, %s",
                                 enumToString(_buttonAction), enumToString(_buttonName),
                                 _pixelPoint, _modelPoint, _mask);
    }

    ButtonAction buttonAction() const { return _buttonAction; }
    ButtonName buttonName() const { return _buttonName; }

    private {
        ButtonAction _buttonAction;
        ButtonName _buttonName;
    }
}

final class MotionEvent : PointerEvent {
    this(in Point pixelPoint,
         in Point modelPoint,
         in Mask mask) {
        super(pixelPoint, modelPoint, mask);
    }

    override string toString() const {
        return std.string.format("Motion event: %s, %s, %s",
                                 _pixelPoint, _modelPoint, _mask);
    }
}

final class ScrollEvent : PointerEvent {
    this(in ScrollDirection scrollDirection,
         in Point pixelPoint,
         in Point modelPoint,
         in Mask mask) {
        super(pixelPoint, modelPoint, mask);
        _scrollDirection = scrollDirection;
    }

    override string toString() const {
        return std.string.format("Scroll event: %s, %s, %s, %s",
                                 enumToString(_scrollDirection), _pixelPoint, _modelPoint, _mask);
    }

    ScrollDirection scrollDirection() const { return _scrollDirection; }

    private {
        ScrollDirection _scrollDirection;
    }
}