changeset 47:180d7690d09a

Fix image layer performance issues. Handler macro captures layer in let.
author Mikhail Kryshen <mikhail@kryshen.net>
date Wed, 28 Jul 2010 04:46:34 +0400
parents d77518a417ba
children a948ac563f6f
files src/kryshen/indyvon/layers.clj
diffstat 1 files changed, 16 insertions(+), 15 deletions(-) [+]
line diff
     1.1 --- a/src/kryshen/indyvon/layers.clj	Mon Jul 19 16:04:28 2010 +0400
     1.2 +++ b/src/kryshen/indyvon/layers.clj	Wed Jul 28 04:46:34 2010 +0400
     1.3 @@ -27,13 +27,12 @@
     1.4    `(align-xy ~inner ~outer ~align :top :center :bottom))
     1.5  
     1.6  (defmacro decorate-layer [layer & render-tail]
     1.7 -  `(let [layer# ~layer]
     1.8 -     (reify
     1.9 -      Layer
    1.10 -      (render! ~@render-tail)
    1.11 -      (layer-size [t#] (layer-size layer#))
    1.12 -      Anchored
    1.13 -      (anchor [t# xa# ya#] (anchor layer# xa# ya#)))))
    1.14 +  `(reify
    1.15 +    Layer
    1.16 +    (render! ~@render-tail)
    1.17 +    (layer-size [t#] (layer-size ~layer))
    1.18 +    Anchored
    1.19 +    (anchor [t# xa# ya#] (anchor ~layer xa# ya#))))
    1.20  
    1.21  (defn padding
    1.22    ([content pad]
    1.23 @@ -89,7 +88,7 @@
    1.24  (defn- get-text-layout
    1.25    [^String line ^Font font ^FontRenderContext font-context]
    1.26    (let [key [line font font-context]]
    1.27 -    (or (if-let [softref (@text-layout-cache key)]
    1.28 +    (or (if-let [^SoftReference softref (@text-layout-cache key)]
    1.29            (.get softref)
    1.30            (do (swap! text-layout-cache dissoc key)
    1.31                false))
    1.32 @@ -151,13 +150,14 @@
    1.33    [image-or-uri]
    1.34    (let [^Image image (if (isa? image-or-uri Image)
    1.35                         image-or-uri
    1.36 -                       (.createImage (Toolkit/getDefaultToolkit)
    1.37 -                                     ^java.net.URL image-or-uri))]
    1.38 +                       (.getImage (Toolkit/getDefaultToolkit)
    1.39 +                                  ^java.net.URL image-or-uri))]
    1.40      (.prepareImage (Toolkit/getDefaultToolkit) image -1 -1 nil)
    1.41      (reify
    1.42       Layer
    1.43       (render! [layer]
    1.44 -        (.drawImage *graphics* image 0 0 (image-observer *update*)))
    1.45 +        (.drawImage *graphics* image 0 0
    1.46 +                    ^ImageObserver (image-observer *update*)))
    1.47       (layer-size [layer]
    1.48          (let [observer (image-observer *update*)
    1.49                width (.getWidth image observer)
    1.50 @@ -210,10 +210,11 @@
    1.51  ;;
    1.52  
    1.53  (defmacro handler [layer & handlers]
    1.54 -  `(decorate-layer ~layer [t#]
    1.55 -      (with-handlers t#
    1.56 -        (render! ~layer)
    1.57 -        ~@handlers)))
    1.58 +  `(let [layer# ~layer]
    1.59 +     (decorate-layer layer# [t#]
    1.60 +        (with-handlers t#
    1.61 +          (render! layer#)
    1.62 +          ~@handlers))))
    1.63  
    1.64  (defn theme [layer & map-or-keyvals]
    1.65    (let [theme (if (== (count map-or-keyvals) 1)