view src/net/kryshen/indyvon/demo.clj @ 62:44a7acf60c16

Asynchronous scaled display.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 26 Aug 2010 03:42:44 +0400
parents 88bb47e3a401
children fd1bcb67bc32
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! layer1 55 5))
45 (layer-size [layer] (Size. 70 65))))
47 (def layer2m
48 (miniature layer2 30 30))
50 (def layer3
51 (border (text-layer "Sample\ntext" :right :center)))
53 (defn fps-layer [fps]
54 (border (text-layer (format "%.1f" fps) :right :bottom) 0 5))
56 (def fps
57 (let [update-interval 0.1
58 frames (ref 0)
59 last (ref 0)
60 fl (ref (fps-layer 0.0))]
61 (reify
62 Layer
63 (render! [layer]
64 (draw! @fl)
65 (dosync
66 (alter frames + 1)
67 (let [time (System/currentTimeMillis)
68 elapsed (/ (- time @last) 1000.0)]
69 (when (> elapsed update-interval)
70 (ref-set fl (fps-layer (/ @frames elapsed)))
71 (ref-set frames 0)
72 (ref-set last time)))))
73 (layer-size [layer] (layer-size @fl)))))
75 (def layer
76 (reify
77 Layer
78 (render! [layer]
79 ;;(*update*)
80 (doto *graphics*
81 (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED]))
82 (.drawLine 0 0 *width* *height*))
83 (draw! layer2 15 20)
84 (draw! layer2m 120 50)
85 (draw! layer3 100 100 80 50)
86 (draw! fps))
87 (layer-size [layer] (Size. 400 300))))
89 (defn -main []
90 (doto frame
91 (.addWindowListener
92 (proxy [java.awt.event.WindowAdapter] []
93 (windowClosing [event] (.dispose frame))))
94 (.. (getContentPane) (add (make-jpanel (viewport layer))))
95 (.pack)
96 (.setVisible true)))