Mercurial > hg > indyvon
changeset 71:59e1810c0278
Moved fps code from demo to layers.
Moved frame creation code from demo to component.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Sun, 29 Aug 2010 20:38:22 +0400 |
parents | b2f6c78413d3 |
children | 76f4126aba84 |
files | src/net/kryshen/indyvon/component.clj src/net/kryshen/indyvon/demo.clj src/net/kryshen/indyvon/layers.clj |
diffstat | 3 files changed, 76 insertions(+), 69 deletions(-) [+] |
line diff
1.1 --- a/src/net/kryshen/indyvon/component.clj Sun Aug 29 18:33:41 2010 +0400 1.2 +++ b/src/net/kryshen/indyvon/component.clj Sun Aug 29 20:38:22 2010 +0400 1.3 @@ -34,3 +34,8 @@ 1.4 (add-observer panel layer (fn [_] (.repaint panel))) 1.5 (listen! event-dispatcher panel) 1.6 panel))) 1.7 + 1.8 +(defn make-jframe [title layer] 1.9 + (doto (JFrame. title) 1.10 + (.. (getContentPane) (add (make-jpanel layer))) 1.11 + (.pack)))
2.1 --- a/src/net/kryshen/indyvon/demo.clj Sun Aug 29 18:33:41 2010 +0400 2.2 +++ b/src/net/kryshen/indyvon/demo.clj Sun Aug 29 20:38:22 2010 +0400 2.3 @@ -9,90 +9,69 @@ 2.4 (:use 2.5 (net.kryshen.indyvon core layers component)) 2.6 (:import 2.7 - (net.kryshen.indyvon.core Size Bounds) 2.8 + (net.kryshen.indyvon.core Size) 2.9 (java.awt Color) 2.10 (javax.swing JFrame))) 2.11 2.12 (def layer1 2.13 - (reify 2.14 - Layer 2.15 - (render! [layer] 2.16 - (with-handlers layer 2.17 - (doto *graphics* 2.18 - (.setColor (rand-nth [Color/RED Color/ORANGE])) 2.19 - (.fillRect 0 0 *width* *height*)) 2.20 - (:mouse-entered e (println e)) 2.21 - (:mouse-exited e (println e)) 2.22 - (:mouse-moved e (println e)))) 2.23 - (layer-size [layer] (Size. 30 20)))) 2.24 + (reify 2.25 + Layer 2.26 + (render! [layer] 2.27 + (with-handlers layer 2.28 + (doto *graphics* 2.29 + (.setColor (rand-nth [Color/RED Color/ORANGE])) 2.30 + (.fillRect 0 0 *width* *height*)) 2.31 + (:mouse-entered e (println e)) 2.32 + (:mouse-exited e (println e)) 2.33 + (:mouse-moved e (println e)))) 2.34 + (layer-size [layer] 2.35 + (Size. 30 20)))) 2.36 2.37 (def layer1b (border layer1 2 3)) 2.38 2.39 -;;(def layer1c (async-layer layer1 20 30)) 2.40 +(def layer2 2.41 + (reify 2.42 + Layer 2.43 + (render! [layer] 2.44 + (doto *graphics* 2.45 + (.setColor Color/YELLOW) 2.46 + (.fillRect 0 0 *width* *height*)) 2.47 + (with-rotate 0.5 0 0 2.48 + (draw! layer1b 30 25)) 2.49 + (draw! layer1 55 5)) 2.50 + (layer-size [layer] 2.51 + (Size. 70 65)))) 2.52 2.53 -(def layer2 2.54 - (reify 2.55 - Layer 2.56 - (render! [layer] 2.57 - (doto *graphics* 2.58 - (.setColor Color/YELLOW) 2.59 - (.fillRect 0 0 *width* *height*)) 2.60 - (with-rotate 0.5 0 0 2.61 - (draw! layer1b 30 25)) 2.62 - (draw! layer1 55 5)) 2.63 - (layer-size [layer] (Size. 70 65)))) 2.64 +(def layer2m (miniature layer2 30 30)) 2.65 2.66 -(def layer2m 2.67 - (miniature layer2 30 30)) 2.68 - 2.69 -(def layer3 2.70 - (border (text-layer "Sample\ntext" :right :center))) 2.71 - 2.72 -(defn fps-layer [fps] 2.73 - (border (text-layer (format "%.1f" fps) :right :bottom) 0 5)) 2.74 - 2.75 -(def fps 2.76 - (let [update-interval 0.1 2.77 - frames (ref 0) 2.78 - last (ref 0) 2.79 - fl (ref (fps-layer 0.0))] 2.80 - (reify 2.81 - Layer 2.82 - (render! [layer] 2.83 - (draw! @fl) 2.84 - (dosync 2.85 - (alter frames + 1) 2.86 - (let [time (System/currentTimeMillis) 2.87 - elapsed (/ (- time @last) 1000.0)] 2.88 - (when (> elapsed update-interval) 2.89 - (ref-set fl (fps-layer (/ @frames elapsed))) 2.90 - (ref-set frames 0) 2.91 - (ref-set last time))))) 2.92 - (layer-size [layer] (layer-size @fl))))) 2.93 +(def layer3 (border (text-layer "Sample\ntext" :right :center))) 2.94 2.95 (def layer 2.96 - (reify 2.97 - Layer 2.98 - (render! [layer] 2.99 - ;;(repaint) 2.100 - (doto *graphics* 2.101 - (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED])) 2.102 - (.drawLine 0 0 *width* *height*)) 2.103 - (draw! layer2 15 20) 2.104 - (draw! layer2m 120 50) 2.105 - (draw! layer3 100 100 80 50) 2.106 - (draw! fps)) 2.107 - (layer-size [layer] (Size. 400 300)))) 2.108 + (reify 2.109 + Layer 2.110 + (render! [layer] 2.111 + ;;(repaint) 2.112 + (doto *graphics* 2.113 + ;; Random color to see when repaint happens. 2.114 + (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED])) 2.115 + (.drawLine 0 0 *width* *height*) 2.116 + (.drawLine *width* 0 0 *height*)) 2.117 + (draw! layer2 15 20) 2.118 + (draw! layer2m 120 50) 2.119 + (draw! layer3 100 100 80 50)) 2.120 + (layer-size [layer] 2.121 + (Size. 400 300)))) 2.122 2.123 -(def root (viewport layer)) 2.124 +(def vp (viewport layer)) 2.125 + 2.126 +(def root (fps-layer vp)) 2.127 2.128 (defn show-frame [layer] 2.129 - (doto (JFrame. "Test") 2.130 + (doto (make-jframe "Test" layer) 2.131 (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE) 2.132 - (.. (getContentPane) (add (make-jpanel layer))) 2.133 - (.pack) 2.134 (.setVisible true))) 2.135 2.136 (defn -main [] 2.137 + (println "Try to drag the viewport.") 2.138 (show-frame root) 2.139 - (show-frame (viewport-miniature root 80 60))) 2.140 + (show-frame (fps-layer (viewport-miniature vp 80 60))))
3.1 --- a/src/net/kryshen/indyvon/layers.clj Sun Aug 29 18:33:41 2010 +0400 3.2 +++ b/src/net/kryshen/indyvon/layers.clj Sun Aug 29 20:38:22 2010 +0400 3.3 @@ -171,7 +171,7 @@ 3.4 width (if (pos? width) width 1) 3.5 height (if (pos? height) height 1)] 3.6 (Size. width height)))))) 3.7 - 3.8 + 3.9 (defn miniature 3.10 "Creates layer that asynchronously renders view of the content 3.11 scaled to the specified size." 3.12 @@ -254,6 +254,29 @@ 3.13 (.drawRect *graphics* x y w h)))) 3.14 width height)) 3.15 3.16 +(defn fps-layer 3.17 + "Creates layer that draws content and displays 3.18 + the frames per seconds rate." 3.19 + [content] 3.20 + (let [update-interval 0.1 3.21 + frames (ref 0) 3.22 + prev-time (ref 0) 3.23 + display (ref nil)] 3.24 + (decorate-layer content [_] 3.25 + (draw! content) 3.26 + (draw! 3.27 + (dosync 3.28 + (alter frames + 1) 3.29 + (let [time (System/nanoTime) 3.30 + elapsed (/ (- time @prev-time) 1E9) 3.31 + fps (/ @frames elapsed)] 3.32 + (when (or (> elapsed update-interval) (not @display)) 3.33 + (ref-set display 3.34 + (border (text-layer (format "%.1f" fps) :right :bottom) 0 5)) 3.35 + (ref-set frames 0) 3.36 + (ref-set prev-time time))) 3.37 + @display))))) 3.38 + 3.39 ;; 3.40 ;; Layer context decorators. 3.41 ;;