changeset 3:6bc931b1b755

Event processing.
author Mikhail Kryshen <mikhail@kryshen.net>
date Tue, 08 Jun 2010 15:24:45 +0400
parents 0f2a98f71a9c
children 0771180bf7c2
files src/indyvon/core.clj
diffstat 1 files changed, 25 insertions(+), 13 deletions(-) [+]
line diff
     1.1 --- a/src/indyvon/core.clj	Mon Jun 07 21:13:05 2010 +0400
     1.2 +++ b/src/indyvon/core.clj	Tue Jun 08 15:24:45 2010 +0400
     1.3 @@ -60,6 +60,12 @@
     1.4  ;; Event handling
     1.5  ;;
     1.6  
     1.7 +(defmulti handle-layer-event 
     1.8 +  (fn [layer event]
     1.9 +    [layer (.getID event)]))
    1.10 +
    1.11 +(defmethod handle-layer-event :default [layer event])
    1.12 +
    1.13  (defprotocol EventDispatcher
    1.14    (register [this layer])
    1.15    (commit [this])
    1.16 @@ -82,6 +88,7 @@
    1.17        (dosync (ref-set contexts-d @contexts-r)
    1.18                (ref-set contexts-r [])))
    1.19       (dispatch [this event]
    1.20 +               (println "dispatch" this event)
    1.21                 ;; TODO
    1.22                 ))))
    1.23  
    1.24 @@ -110,19 +117,24 @@
    1.25  ;;     (getPreferredSize []
    1.26  ;;                       (size layer))))
    1.27  
    1.28 -(defn make-component [layer]
    1.29 -  (proxy [Component] []
    1.30 -    (update [g] (.paint this g))
    1.31 -    (paint [g]
    1.32 -           (let [size (.getSize this)
    1.33 -                 width (.width size)
    1.34 -                 height (.height size)]
    1.35 -             (binding [*graphics* g
    1.36 -                       *update-fn* (make-update-fn this)]
    1.37 -               (render-layer! layer 0 0 width height false))))
    1.38 -    (getPreferredSize []
    1.39 -                      (let [s (size layer)]
    1.40 -                        (Dimension. (s 0) (s 1))))))
    1.41 +(defn make-component
    1.42 +  ([layer]
    1.43 +     (make-component layer (make-event-dispatcher)))
    1.44 +  ([layer event-dispatcher]
    1.45 +     (proxy [Component] []
    1.46 +       (update [g] (.paint this g))
    1.47 +       (paint [g]
    1.48 +              (let [size (.getSize this)
    1.49 +                    width (.width size)
    1.50 +                    height (.height size)]
    1.51 +                (binding [*graphics* g
    1.52 +                          *update-fn* (make-update-fn this)]
    1.53 +                  (render-layer! layer 0 0 width height false))))
    1.54 +       (getPreferredSize []
    1.55 +                         (let [s (size layer)]
    1.56 +                           (Dimension. (s 0) (s 1))))
    1.57 +       (processEvent [event]
    1.58 +                     (dispatch event-dispatcher event)))))
    1.59  
    1.60  (comment
    1.61    (do