changeset 9:160e9ec945a2

Fix dispatching of mouse motion events.
author Mikhail Kryshen <mikhail@kryshen.net>
date Sun, 13 Jun 2010 02:49:09 +0400
parents c53ec3052ae7
children 9af27ccccfac
files src/indyvon/core.clj
diffstat 1 files changed, 27 insertions(+), 13 deletions(-) [+]
line diff
     1.1 --- a/src/indyvon/core.clj	Sat Jun 12 06:06:41 2010 +0400
     1.2 +++ b/src/indyvon/core.clj	Sun Jun 13 02:49:09 2010 +0400
     1.3 @@ -78,10 +78,6 @@
     1.4    (hovered? [this layer])
     1.5    (picked? [this layer]))
     1.6  
     1.7 -(defn- assoc-conj [vmap key val]
     1.8 -  "Add val to the sequence associated with key in vmap."
     1.9 -  (assoc vmap key (conj (get vmap key) val)))
    1.10 -
    1.11  (defn- registered-parent
    1.12    "Returns first context parent registered for event processing."
    1.13    [context-tree context]
    1.14 @@ -93,8 +89,9 @@
    1.15  
    1.16  (defn- register-context
    1.17    [context-tree context]
    1.18 -  (assoc-conj
    1.19 -   context-tree (registered-parent context-tree context) context))
    1.20 +  (let [parent (registered-parent context-tree context)]
    1.21 +    (assoc context-tree parent (conj (context-tree parent) context)
    1.22 +           context nil)))
    1.23  
    1.24  (defn- inside?
    1.25    ([x y context]
    1.26 @@ -228,15 +225,23 @@
    1.27           (reify-layer
    1.28            (render! [this context g]
    1.29                     (register (:dispatcher context) context)
    1.30 +                   (.setColor g Color/WHITE)
    1.31 +                   (.fillRect g 0 0 (:width context) (:height context)))
    1.32 +          (size [this context] [50 30])))
    1.33 +    (def layer2
    1.34 +         (reify-layer
    1.35 +          (render! [this context g]
    1.36 +                   (register (:dispatcher context) context)
    1.37                     (.setColor g Color/BLUE)
    1.38 -                   (.fillRect g 0 0 50 30))
    1.39 -          (size [this context] [50 30])))
    1.40 +                   (.fillRect g 0 0 (:width context) (:height context))
    1.41 +                   (render-layer! context layer1 g 10 5))
    1.42 +          (size [this context] [70 65])))
    1.43      (def layer
    1.44           (reify-layer
    1.45            (render! [this context g]
    1.46 -                   (register (:dispatcher context) context)
    1.47 +                   ;;(register (:dispatcher context) context)
    1.48                     (.drawLine g 0 0 (:width context) (:height context))
    1.49 -                   (render-layer! context layer1 g 15 20))
    1.50 +                   (render-layer! context layer2 g 15 20))
    1.51            (size [this context] [100 100])))
    1.52      (doto frame
    1.53        (.addWindowListener
    1.54 @@ -248,12 +253,21 @@
    1.55  
    1.56      (defmethod handle-layer-event [layer1 MouseEvent/MOUSE_ENTERED]
    1.57        [layer context event]
    1.58 -      (println "ENTERED"))
    1.59 +      (println "1 ENTERED"))
    1.60      (defmethod handle-layer-event [layer1 MouseEvent/MOUSE_EXITED]
    1.61        [layer context event]
    1.62 -      (println "EXITED"))
    1.63 +      (println "1 EXITED"))
    1.64      (defmethod handle-layer-event [layer1 MouseEvent/MOUSE_MOVED]
    1.65        [layer context event]
    1.66 -      (println "MOVED")) 
    1.67 +      (println "1 MOVED"))
    1.68 +    (defmethod handle-layer-event [layer2 MouseEvent/MOUSE_ENTERED]
    1.69 +      [layer context event]
    1.70 +      (println "2 ENTERED"))
    1.71 +    (defmethod handle-layer-event [layer2 MouseEvent/MOUSE_EXITED]
    1.72 +      [layer context event]
    1.73 +      (println "2 EXITED"))
    1.74 +    (defmethod handle-layer-event [layer2 MouseEvent/MOUSE_MOVED]
    1.75 +      [layer context event]
    1.76 +      (println "2 MOVED")) 
    1.77      )
    1.78    )
    1.79 \ No newline at end of file