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]