view src/net/kryshen/indyvon/demo.clj @ 56:87400ec6d433

Update to clojure 1.2.0.
author Mikhail Kryshen <mikhail@kryshen.net>
date Fri, 20 Aug 2010 03:08:02 +0400
parents 1d2dfe5026a8
children b68de6a43f29
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 Color/RED)
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 layer2
34 (reify
35 Layer
36 (render! [layer]
37 (doto *graphics*
38 (.setColor Color/YELLOW)
39 (.fillRect 0 0 *width* *height*))
40 (with-rotate 0.5 0 0
41 (draw! layer1b 10 5))
42 (draw! layer1 55 5))
43 (layer-size [layer] (Size. 70 65))))
45 (def layer3
46 (border (text-layer "Sample\ntext" :right :center)))
48 (defn fps-layer [fps]
49 (border (text-layer (format "%.1f" fps) :right :bottom) 0 5))
51 (def fps
52 (let [update-interval 0.1
53 frames (ref 0)
54 last (ref 0)
55 fl (ref (fps-layer 0.0))]
56 (reify
57 Layer
58 (render! [layer]
59 (draw! @fl)
60 (dosync
61 (alter frames + 1)
62 (let [time (System/currentTimeMillis)
63 elapsed (/ (- time @last) 1000.0)]
64 (when (> elapsed update-interval)
65 (ref-set fl (fps-layer (/ @frames elapsed)))
66 (ref-set frames 0)
67 (ref-set last time)))))
68 (layer-size [layer] (layer-size @fl)))))
70 (def layer
71 (reify
72 Layer
73 (render! [layer]
74 ;;(*update*)
75 (doto *graphics*
76 (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED]))
77 (.drawLine 0 0 *width* *height*))
78 (draw! layer2 15 20)
79 (draw! layer3 100 100 80 50)
80 (draw! fps))
81 (layer-size [layer] (Size. 400 300))))
83 (defn -main []
84 (doto frame
85 (.addWindowListener
86 (proxy [java.awt.event.WindowAdapter] []
87 (windowClosing [event] (.dispose frame))))
88 (.. (getContentPane) (add (make-jpanel (viewport layer))))
89 (.pack)
90 (.setVisible true)))