changeset 166:c5b37c658161

Added ref-view argument to specify a function for converting ref value to View.
author Mikhail Kryshen <mikhail@kryshen.net>
date Fri, 28 Nov 2014 23:16:23 +0300
parents 421dba17b7ed
children a51fcaf00264
files src/indyvon/views.clj
diffstat 1 files changed, 15 insertions(+), 13 deletions(-) [+]
line diff
     1.1 --- a/src/indyvon/views.clj	Wed Nov 26 19:22:52 2014 +0300
     1.2 +++ b/src/indyvon/views.clj	Fri Nov 28 23:16:23 2014 +0300
     1.3 @@ -296,19 +296,21 @@
     1.4  (def ^:dynamic *miniature-thread-priority* 2)
     1.5  
     1.6  (defn ref-view
     1.7 -  [view-ref]
     1.8 -  (let [l (reify
     1.9 -           View
    1.10 -           (render! [l]
    1.11 -             (repaint-on-update l)
    1.12 -             (if-let [view @view-ref]
    1.13 -               (render! view)))
    1.14 -           (geometry [_]
    1.15 -             (if-let [view @view-ref]
    1.16 -               (geometry view)
    1.17 -               (->Size 1 1))))]
    1.18 -    (add-watch view-ref l (fn [_ _ _ _] (update l)))
    1.19 -    l))
    1.20 +  ([view-ref]
    1.21 +   (ref-view view-ref identity))
    1.22 +  ([view-ref view-fn]
    1.23 +   (let [v (reify
    1.24 +             View
    1.25 +             (render! [v]
    1.26 +               (repaint-on-update v)
    1.27 +               (when-let [view (view-fn @view-ref)]
    1.28 +                 (render! view)))
    1.29 +             (geometry [_]
    1.30 +               (if-let [view (view-fn @view-ref)]
    1.31 +                 (geometry view)
    1.32 +                 (->Size 1 1))))]
    1.33 +     (add-watch view-ref v (fn [_ _ _ _] (update v)))
    1.34 +     v)))
    1.35  
    1.36  ;;
    1.37  ;; View context decorators