changeset 51:a20b1fccc0ef

Beginning of transformations.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 29 Jul 2010 15:59:33 +0400
parents 409b1b16053d
children 7fcc0869ce00
files src/net/kryshen/indyvon/core.clj src/net/kryshen/indyvon/demo.clj
diffstat 2 files changed, 23 insertions(+), 1 deletions(-) [+]
line diff
     1.1 --- a/src/net/kryshen/indyvon/core.clj	Thu Jul 29 01:28:30 2010 +0400
     1.2 +++ b/src/net/kryshen/indyvon/core.clj	Thu Jul 29 15:59:33 2010 +0400
     1.3 @@ -7,6 +7,7 @@
     1.4  (ns net.kryshen.indyvon.core
     1.5    (:import
     1.6     (java.awt Graphics2D Component Color Font AWTEvent)
     1.7 +   (java.awt.geom AffineTransform)
     1.8     (java.awt.event MouseListener MouseMotionListener)
     1.9     (java.awt.font FontRenderContext)))
    1.10  
    1.11 @@ -152,6 +153,26 @@
    1.12         (finally
    1.13          (.setColor *graphics* color#)))))
    1.14  
    1.15 +;; TODO:
    1.16 +;;
    1.17 +;; (with-transform
    1.18 +;;   (rotate ...)
    1.19 +;;   (draw ...)
    1.20 +;;   (scale ...)
    1.21 +;;   (draw ...))
    1.22 +
    1.23 +(defmacro with-transform [transform & body]
    1.24 +  `(let [old-t# (.getTransform *graphics*)]
    1.25 +     (try
    1.26 +       (.transform *graphics* ~transform)
    1.27 +       ~@body
    1.28 +       (finally
    1.29 +        (.setTransform *graphics* old-t#)))))
    1.30 +
    1.31 +(defmacro with-rotate [theta ax ay & body]
    1.32 +  `(let [transform# (AffineTransform/getRotateInstance ~theta ~ax ~ay)]
    1.33 +     (with-transform transform# ~@body)))
    1.34 +
    1.35  (defn- geometry-vec [geometry]
    1.36    (if (vector? geometry)
    1.37      geometry
     2.1 --- a/src/net/kryshen/indyvon/demo.clj	Thu Jul 29 01:28:30 2010 +0400
     2.2 +++ b/src/net/kryshen/indyvon/demo.clj	Thu Jul 29 15:59:33 2010 +0400
     2.3 @@ -37,7 +37,8 @@
     2.4           (doto *graphics*
     2.5             (.setColor Color/YELLOW)
     2.6             (.fillRect 0 0 (:width *bounds*) (:height *bounds*)))
     2.7 -         (draw! layer1b 10 5)
     2.8 +         (with-rotate 0.5 0 0
     2.9 +           (draw! layer1b 10 5))
    2.10           (draw! layer1 55 5))
    2.11        (layer-size [layer] (Size. 70 65))))
    2.12