Mercurial > projects > doodle
diff dia/icanvas.d @ 22:17c2df87b459
Package refactoring.
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Wed, 15 Jul 2009 23:31:29 +0930 |
parents | icanvas.d@d6e7a5a6f008 |
children | 06c30d250c0a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dia/icanvas.d Wed Jul 15 23:31:29 2009 +0930 @@ -0,0 +1,54 @@ +module dia.icanvas; + +import tk.geometry; +import tk.events; +import cairo.Context; + +interface Viewport { + void zoom_relative(Point pixel_datum, double factor); + void pan_relative(Vector pixel_displacement); + void damage_model(Rectangle area); // FIXME could be an inout parameter of the event handling, or a special scope Damage object that supports growth only + void damage_pixel(Rectangle area); // FIXME as above + + // FIXME not sure about these: + double zoom() const; + Point model_to_pixel(Point model) const; + Point pixel_to_model(Point pixel) const; + Vector model_to_pixel(Vector model) const; + Vector pixel_to_model(Vector pixel) const; + Rectangle model_to_pixel(Rectangle model) const; + Rectangle pixel_to_model(Rectangle model) const; + double model_to_pixel(double model) const; + double pixel_to_model(double pixel) const; +} + +interface EventHandler { + bool handle_button_press(Viewport viewport, in ButtonEvent event); + bool handle_button_release(Viewport viewport, in ButtonEvent event); + bool handle_motion(Viewport viewport, in MotionEvent event); + bool handle_scroll(Viewport viewport, in ScrollEvent event); + //bool handle_enter(Viewport viewport, CrossingEvent event); + //bool handle_leave(Viewport viewport, CrossingEvent event); + //bool handle_focus_in(Viewport viewport, FocusEvent event); + //bool handle_focus_out(Viewport viewport, FocusEvent event); + bool handle_key_press(Viewport viewport, in KeyEvent event); + bool handle_key_release(Viewport viewport, in KeyEvent event); +} + +abstract class Layer { + this(in string name) { + mName = name; + } + + string name() const { return mName; } + + Rectangle bounds() const; + //void zoom_changed + void draw(const Viewport viewport, + in Rectangle pixel_damage, scope Context pixel_cr, + in Rectangle model_damage, scope Context model_cr) const; + + private { + invariant string mName; + } +}