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