changeset 12:cd8a378414d1

Support mouse button events.
author Mikhail Kryshen <mikhail@kryshen.net>
date Mon, 14 Jun 2010 05:04:03 +0400
parents ea6fc44f19c8
children c6009a144727
files src/indyvon/component.clj src/indyvon/event.clj
diffstat 2 files changed, 27 insertions(+), 6 deletions(-) [+]
line diff
     1.1 --- a/src/indyvon/component.clj	Mon Jun 14 04:38:00 2010 +0400
     1.2 +++ b/src/indyvon/component.clj	Mon Jun 14 05:04:03 2010 +0400
     1.3 @@ -88,5 +88,8 @@
     1.4      (defmethod handle-layer-event [layer2 MouseEvent/MOUSE_MOVED]
     1.5        [layer context event]
     1.6        (println "2 MOVED"))
     1.7 +    (defmethod handle-layer-event [layer2 MouseEvent/MOUSE_DRAGGED]
     1.8 +      [layer context event]
     1.9 +      (println "2 DRAGGED"))
    1.10      )
    1.11    )
     2.1 --- a/src/indyvon/event.clj	Mon Jun 14 04:38:00 2010 +0400
     2.2 +++ b/src/indyvon/event.clj	Mon Jun 14 05:04:03 2010 +0400
     2.3 @@ -62,7 +62,7 @@
     2.4    (filter #(not (some (partial pred %) coll2)) coll1))
     2.5  
     2.6  (defn- translate-mouse-event
     2.7 -  [#^MouseEvent event x y id]
     2.8 +  [event x y id]
     2.9    (proxy [MouseEvent] [(.getComponent event)
    2.10                         id
    2.11                         (.getWhen event)
    2.12 @@ -89,7 +89,7 @@
    2.13  (defn- dispatch-mouse-motion*
    2.14    "Dispatches mouse motion events. Returns a new set of contexts which
    2.15    currently are under cursor."
    2.16 -  [hovered context-tree #^MouseEvent event]
    2.17 +  [hovered context-tree event]
    2.18    (let [x (.getX event)
    2.19          y (.getY event)
    2.20          hovered2 (under-cursor context-tree x y)
    2.21 @@ -103,10 +103,25 @@
    2.22      hovered2))
    2.23  
    2.24  (defn- dispatch-mouse-motion
    2.25 -  [hovered-ref context-tree #^MouseEvent event]
    2.26 +  [hovered-ref context-tree event]
    2.27    (dosync
    2.28     (alter hovered-ref dispatch-mouse-motion* context-tree event)))
    2.29  
    2.30 +(defn- dispatch-mouse-button*
    2.31 +  "Dispatches mouse button events. Returns a new set of contexts which
    2.32 +  currently are picked with a pressed button."
    2.33 +  [picked hovered context-tree event]
    2.34 +  (translate-and-dispatch hovered event)
    2.35 +  (if (= (.getID event) MouseEvent/MOUSE_PRESSED)
    2.36 +    hovered
    2.37 +    nil))
    2.38 +  
    2.39 +(defn- dispatch-mouse-button
    2.40 +  [picked-ref hovered-ref context-tree event]
    2.41 +  (dosync
    2.42 +   (alter picked-ref dispatch-mouse-button*
    2.43 +          @hovered-ref context-tree event)))
    2.44 +
    2.45  (defn make-event-dispatcher []
    2.46    (let [context-tree-r (ref {}) ; register
    2.47          context-tree (ref {})   ; dispatch
    2.48 @@ -126,13 +141,16 @@
    2.49       (picked? [this layer] false)
    2.50       (hovered? [this layer] false)
    2.51       MouseListener
    2.52 -     (mouseClicked [this event])
    2.53       (mouseEntered [this event]
    2.54                     (dispatch-mouse-motion hovered context-tree event))
    2.55       (mouseExited [this event]
    2.56                    (dispatch-mouse-motion hovered context-tree event))
    2.57 -     (mousePressed [this event])
    2.58 -     (mouseReleased [this event])
    2.59 +     (mouseClicked [this event]
    2.60 +                   (dispatch-mouse-button picked hovered context-tree event))
    2.61 +     (mousePressed [this event]
    2.62 +                   (dispatch-mouse-button picked hovered context-tree event))
    2.63 +     (mouseReleased [this event]
    2.64 +                    (dispatch-mouse-button picked hovered context-tree event))
    2.65       MouseMotionListener
    2.66       (mouseDragged [this event]
    2.67                     (translate-and-dispatch @picked event))