Mercurial > hg > indyvon
changeset 131:24d4c9f3be90
Added transform and component to MouseEvent.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Fri, 13 Apr 2012 20:26:21 +0400 |
parents | 43f78efe0903 |
children | 77a3a609b2fe |
files | src/net/kryshen/indyvon/core.clj |
diffstat | 1 files changed, 15 insertions(+), 8 deletions(-) [+] |
line diff
1.1 --- a/src/net/kryshen/indyvon/core.clj Fri Apr 13 20:24:19 2012 +0400 1.2 +++ b/src/net/kryshen/indyvon/core.clj Fri Apr 13 20:26:21 2012 +0400 1.3 @@ -196,7 +196,7 @@ 1.4 1.5 ;; TODO: modifiers 1.6 (defrecord MouseEvent [id when x y x-on-screen y-on-screen button 1.7 - wheel-rotation]) 1.8 + wheel-rotation transform component]) 1.9 1.10 ;; TODO: KeyEvent 1.11 1.12 @@ -326,11 +326,16 @@ 1.13 (.concatenate tr *initial-transform*) ; component -> absolute 1.14 tr)) 1.15 1.16 -(defn transform-point [^AffineTransform tr x y] 1.17 +(defn transform-point [^AffineTransform tr ^double x ^double y] 1.18 (let [p (Point2D$Double. x y)] 1.19 (.transform tr p p) 1.20 [(.x p) (.y p)])) 1.21 1.22 +(defn inverse-transform-point [^AffineTransform tr ^double x ^double y] 1.23 + (let [p (Point2D$Double. x y)] 1.24 + (.inverseTransform tr p p) 1.25 + [(.x p) (.y p)])) 1.26 + 1.27 ;; (defn- clip 1.28 ;; "Intersect clipping area with the specified shape or bounds. 1.29 ;; Returns new clip (Shape or nil if empty)." 1.30 @@ -599,7 +604,7 @@ 1.31 (dissoc (var *graphics*)) 1.32 (assoc (var *font-context*) (font-context)))] 1.33 (DispatcherNode. handle handlers *event-dispatcher* clip 1.34 - (inverse-relative-transform) 1.35 + (relative-transform) 1.36 bindings))) 1.37 1.38 (defn- add-node [tree node] 1.39 @@ -621,14 +626,16 @@ 1.40 1.41 (defn- translate-mouse-event [^java.awt.event.MouseEvent event 1.42 ^AffineTransform tr id] 1.43 - (let [[x y] (transform-point tr (.getX event) (.getY event)) 1.44 + (let [[x y] (inverse-transform-point tr (.getX event) (.getY event)) 1.45 rotation (if (instance? MouseWheelEvent event) 1.46 (.getWheelRotation ^MouseWheelEvent event) 1.47 nil)] 1.48 - (MouseEvent. id (.getWhen event) x y 1.49 - (.getXOnScreen event) (.getYOnScreen event) 1.50 - (.getButton event) 1.51 - rotation))) 1.52 + (->MouseEvent id (.getWhen event) x y 1.53 + (.getXOnScreen event) (.getYOnScreen event) 1.54 + (.getButton event) 1.55 + rotation 1.56 + tr 1.57 + (.getComponent event)))) 1.58 1.59 (defn- translate-and-dispatch 1.60 ([nodes first-only ^java.awt.event.MouseEvent event]