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;
+    }
+}