view src/net/kryshen/indyvon/demo.clj @ 70:b2f6c78413d3

Viewport miniature. With-color macro accepts keyword identifying color in theme.
author Mikhail Kryshen <mikhail@kryshen.net>
date Sun, 29 Aug 2010 18:33:41 +0400
parents a19cf5007d14
children 59e1810c0278
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 layer1
17 (reify
18 Layer
19 (render! [layer]
20 (with-handlers layer
21 (doto *graphics*
22 (.setColor (rand-nth [Color/RED Color/ORANGE]))
23 (.fillRect 0 0 *width* *height*))
24 (:mouse-entered e (println e))
25 (:mouse-exited e (println e))
26 (:mouse-moved e (println e))))
27 (layer-size [layer] (Size. 30 20))))
29 (def layer1b (border layer1 2 3))
31 ;;(def layer1c (async-layer layer1 20 30))
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 30 25))
42 (draw! layer1 55 5))
43 (layer-size [layer] (Size. 70 65))))
45 (def layer2m
46 (miniature layer2 30 30))
48 (def layer3
49 (border (text-layer "Sample\ntext" :right :center)))
51 (defn fps-layer [fps]
52 (border (text-layer (format "%.1f" fps) :right :bottom) 0 5))
54 (def fps
55 (let [update-interval 0.1
56 frames (ref 0)
57 last (ref 0)
58 fl (ref (fps-layer 0.0))]
59 (reify
60 Layer
61 (render! [layer]
62 (draw! @fl)
63 (dosync
64 (alter frames + 1)
65 (let [time (System/currentTimeMillis)
66 elapsed (/ (- time @last) 1000.0)]
67 (when (> elapsed update-interval)
68 (ref-set fl (fps-layer (/ @frames elapsed)))
69 (ref-set frames 0)
70 (ref-set last time)))))
71 (layer-size [layer] (layer-size @fl)))))
73 (def layer
74 (reify
75 Layer
76 (render! [layer]
77 ;;(repaint)
78 (doto *graphics*
79 (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED]))
80 (.drawLine 0 0 *width* *height*))
81 (draw! layer2 15 20)
82 (draw! layer2m 120 50)
83 (draw! layer3 100 100 80 50)
84 (draw! fps))
85 (layer-size [layer] (Size. 400 300))))
87 (def root (viewport layer))
89 (defn show-frame [layer]
90 (doto (JFrame. "Test")
91 (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
92 (.. (getContentPane) (add (make-jpanel layer)))
93 (.pack)
94 (.setVisible true)))
96 (defn -main []
97 (show-frame root)
98 (show-frame (viewport-miniature root 80 60)))