Mercurial > hg > indyvon
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))