changeset 94:649d12b6c9ec

Async layer: create-image does not depend on graphics context.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 03 Mar 2011 03:13:14 +0300
parents 017f5f14b876
children df9dedc80485
files src/net/kryshen/indyvon/async.clj
diffstat 1 files changed, 12 insertions(+), 9 deletions(-) [+]
line diff
     1.1 --- a/src/net/kryshen/indyvon/async.clj	Thu Dec 23 09:00:24 2010 +0300
     1.2 +++ b/src/net/kryshen/indyvon/async.clj	Thu Mar 03 03:13:14 2011 +0300
     1.3 @@ -1,5 +1,5 @@
     1.4  ;;
     1.5 -;; Copyright 2010 Mikhail Kryshen <mikhail@kryshen.net>
     1.6 +;; Copyright 2010, 2011 Mikhail Kryshen <mikhail@kryshen.net>
     1.7  ;;
     1.8  ;; This file is part of Indyvon.
     1.9  ;;
    1.10 @@ -23,6 +23,7 @@
    1.11     net.kryshen.indyvon.core)
    1.12    (:import
    1.13     (net.kryshen.indyvon.core Size Location)
    1.14 +   java.awt.GraphicsConfiguration
    1.15     (java.awt Image AlphaComposite Transparency)
    1.16     (java.awt.image BufferedImage)
    1.17     (java.util.concurrent ThreadFactory ThreadPoolExecutor
    1.18 @@ -40,14 +41,15 @@
    1.19  ;;   :free
    1.20  ;;      not in use
    1.21  
    1.22 -(defn- create-image [async-layer]
    1.23 +(defn- create-image [async-layer ^GraphicsConfiguration device-conf]
    1.24    ;; TODO: support different image types.
    1.25 -  (.. *graphics* (getDeviceConfiguration)
    1.26 -      (createCompatibleImage (:width async-layer) (:height async-layer)
    1.27 -                             Transparency/TRANSLUCENT)))
    1.28 +  (.createCompatibleImage device-conf
    1.29 +                          (:width async-layer)
    1.30 +                          (:height async-layer)
    1.31 +                          Transparency/TRANSLUCENT))
    1.32  
    1.33 -(defn- create-buffer [async-layer]
    1.34 -  (Buffer. (Object.) (create-image async-layer) 0 :free))
    1.35 +(defn- create-buffer [async-layer device-conf]
    1.36 +  (Buffer. (Object.) (create-image async-layer device-conf) 0 :free))
    1.37  
    1.38  (defn- find-buffer
    1.39    "Find a buffer with the one of the specified states given
    1.40 @@ -136,8 +138,9 @@
    1.41      (add-context-observer content (fn [_ _] (draw-offscreen-async layer)))
    1.42      (when-not @buffers
    1.43        ;; TODO: dynamic size, recreate buffers when size increases.
    1.44 -      (let [cb (bound-fn [] (create-buffer layer))
    1.45 -            new-buffers (repeatedly 2 cb)]
    1.46 +      (let [device-conf (.getDeviceConfiguration *graphics*)
    1.47 +            new-buffers (repeatedly 2
    1.48 +                          (partial create-buffer layer device-conf))]
    1.49          (dosync
    1.50           (ref-set buffers new-buffers)))
    1.51        (draw-offscreen-async layer))