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