Mercurial > hg > indyvon
changeset 127:911228da1bc8
Revised handling of FontRenderContexts.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Thu, 12 Apr 2012 23:13:20 +0400 |
parents | 24c7935a8f06 |
children | d37d6c5b3b08 |
files | src/net/kryshen/indyvon/core.clj |
diffstat | 1 files changed, 25 insertions(+), 13 deletions(-) [+] |
line diff
1.1 --- a/src/net/kryshen/indyvon/core.clj Thu Apr 12 19:55:52 2012 +0400 1.2 +++ b/src/net/kryshen/indyvon/core.clj Thu Apr 12 23:13:20 2012 +0400 1.3 @@ -34,6 +34,9 @@ 1.4 1.5 (def ^:dynamic ^Graphics2D *graphics*) 1.6 1.7 +(def ^:dynamic ^:private ^FontRenderContext *font-context* 1.8 + "FontRenderContext to use when Graphics2D is not available.") 1.9 + 1.10 (def ^:dynamic *width* 1.11 "Width of the rendering area.") 1.12 1.13 @@ -302,10 +305,7 @@ 1.14 [] 1.15 (if (bound? (var *graphics*)) 1.16 (.getFontRenderContext *graphics*) 1.17 - (let [scene *scene*] 1.18 - (if-let [^Component c (:component scene)] 1.19 - (.getFontRenderContext (.getFontMetrics c (.getFont c))) 1.20 - (:font-context scene))))) 1.21 + *font-context*)) 1.22 1.23 (defn ^AffineTransform relative-transform 1.24 "Returns AffineTransform: layer context -> AWT component." 1.25 @@ -590,10 +590,13 @@ 1.26 (defn- make-node [handle handlers] 1.27 (let [clip (if *input-clip* 1.28 (clip *input-clip*) 1.29 - *clip*)] 1.30 + *clip*) 1.31 + bindings (-> (get-thread-bindings) 1.32 + (dissoc (var *graphics*)) 1.33 + (assoc (var *font-context*) (font-context)))] 1.34 (DispatcherNode. handle handlers *event-dispatcher* clip 1.35 (inverse-relative-transform) 1.36 - (get-thread-bindings)))) 1.37 + bindings))) 1.38 1.39 (defn- add-node [tree node] 1.40 (assoc-cons tree (:parent node) node)) 1.41 @@ -723,7 +726,6 @@ 1.42 event-dispatcher 1.43 component 1.44 rendering-hints 1.45 - font-context 1.46 next-state]) 1.47 1.48 ;; Define rendering hints that affect font metrics to make sure that 1.49 @@ -747,10 +749,6 @@ 1.50 event-dispatcher 1.51 component 1.52 hints 1.53 - (FontRenderContext. 1.54 - nil 1.55 - (get hints RenderingHints/KEY_TEXT_ANTIALIASING) 1.56 - (get hints RenderingHints/KEY_FRACTIONALMETRICS)) 1.57 (atom nil))))) 1.58 1.59 (defn- get-and-set! 1.60 @@ -789,9 +787,23 @@ 1.61 (finally 1.62 (remove-observers tmp-watcher) 1.63 (commit (:event-dispatcher scene))))))) 1.64 - 1.65 + 1.66 +(defn- scene-font-context [scene] 1.67 + (let [hints (:rendering-hints scene) 1.68 + ^Component c (:component scene) 1.69 + t (if c (->> c 1.70 + .getFont 1.71 + (.getFontMetrics c) 1.72 + .getFontRenderContext 1.73 + .getTransform))] 1.74 + (FontRenderContext. 1.75 + t 1.76 + (get hints RenderingHints/KEY_TEXT_ANTIALIASING) 1.77 + (get hints RenderingHints/KEY_FRACTIONALMETRICS)))) 1.78 + 1.79 (defn scene-geometry [scene] 1.80 - (binding [*scene* scene] 1.81 + (binding [*scene* scene 1.82 + *font-context* (scene-font-context scene)] 1.83 (geometry (:layer scene)))) 1.84 1.85 (defn set-cursor! [^Cursor cursor]