view src/net/kryshen/indyvon/demo.clj @ 61:88bb47e3a401

Asynchronous drawing (first working version).
author Mikhail Kryshen <mikhail@kryshen.net>
date Wed, 25 Aug 2010 22:03:01 +0400
parents b68de6a43f29
children 44a7acf60c16
line source
1 ;;
2 ;; Copyright (C) 2010 Mikhail Kryshen <mikhail@kryshen.net>
3 ;;
4 ;; This file is part of Indyvon.
5 ;;
7 (ns net.kryshen.indyvon.demo
8 (:gen-class)
9 (:use
10 (net.kryshen.indyvon core layers component))
11 (:import
12 (net.kryshen.indyvon.core Size Bounds)
13 (java.awt Color)
14 (javax.swing JFrame)))
16 (def frame (JFrame. "Test"))
18 (def layer1
19 (reify
20 Layer
21 (render! [layer]
22 (with-handlers layer
23 (doto *graphics*
24 (.setColor (rand-nth [Color/RED Color/ORANGE]))
25 (.fillRect 0 0 *width* *height*))
26 (:mouse-entered e (println e))
27 (:mouse-exited e (println e))
28 (:mouse-moved e (println e))))
29 (layer-size [layer] (Size. 30 20))))
31 (def layer1b (border layer1 2 3))
33 (def layer1c (async-layer layer1 20 30))
35 (def layer2
36 (reify
37 Layer
38 (render! [layer]
39 (doto *graphics*
40 (.setColor Color/YELLOW)
41 (.fillRect 0 0 *width* *height*))
42 (with-rotate 0.5 0 0
43 (draw! layer1b 30 25))
44 (draw! layer1c 55 5))
45 (layer-size [layer] (Size. 70 65))))
47 (def layer3
48 (border (text-layer "Sample\ntext" :right :center)))
50 (defn fps-layer [fps]
51 (border (text-layer (format "%.1f" fps) :right :bottom) 0 5))
53 (def fps
54 (let [update-interval 0.1
55 frames (ref 0)
56 last (ref 0)
57 fl (ref (fps-layer 0.0))]
58 (reify
59 Layer
60 (render! [layer]
61 (draw! @fl)
62 (dosync
63 (alter frames + 1)
64 (let [time (System/currentTimeMillis)
65 elapsed (/ (- time @last) 1000.0)]
66 (when (> elapsed update-interval)
67 (ref-set fl (fps-layer (/ @frames elapsed)))
68 (ref-set frames 0)
69 (ref-set last time)))))
70 (layer-size [layer] (layer-size @fl)))))
72 (def layer
73 (reify
74 Layer
75 (render! [layer]
76 ;;(*update*)
77 (doto *graphics*
78 (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED]))
79 (.drawLine 0 0 *width* *height*))
80 (draw! layer2 15 20)
81 (draw! layer3 100 100 80 50)
82 (draw! fps))
83 (layer-size [layer] (Size. 400 300))))
85 (defn -main []
86 (doto frame
87 (.addWindowListener
88 (proxy [java.awt.event.WindowAdapter] []
89 (windowClosing [event] (.dispose frame))))
90 (.. (getContentPane) (add (make-jpanel (viewport layer))))
91 (.pack)
92 (.setVisible true)))