Mercurial > projects > doodle
view doodle/dia/icanvas.d @ 74:c03ed75c0f8e
Icky
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 15 Aug 2010 01:11:58 +0930 |
parents | 31d10176415d |
children | 15ca7d5cd1ed |
line wrap: on
line source
module doodle.dia.icanvas; public { import doodle.tk.geometry; import doodle.tk.events; import cairo.Context; } private { import std.typecons; } mixin(defineEnum!("Cursor", "DEFAULT", "HAND", "CROSSHAIR", "PENCIL")); interface IViewport { void zoomRelative(in Point pixelDatum, in double factor); void panRelative(in Vector pixelDisplacement); void setCursor(in Cursor cursor); // FIXME get rid of these and accumulate damage during event handling void damageModel(in Rectangle area); // FIXME could be an inout parameter of the event handling, or a special scope Damage object that supports growth only void damagePixel(in Rectangle area); // FIXME as above } 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, CrossingEvent event); bool handleLeave(scope IViewport viewport, 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(double zoom); // TODO inout? bool snap(in Point a, out Point b) const; } interface IPage { // TODO } abstract class Layer { this(in string name) { _name = name; } string name() const { return _name; } Rectangle bounds() const; void draw(in Rectangle pixelDamage, scope Context pixelCr, in Rectangle modelDamage, scope Context modelCr) const; private { immutable string _name; } }