Mercurial > hg > indyvon
view src/net/kryshen/indyvon/demo.clj @ 67:a19cf5007d14
Asynchronous drawing.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Sat, 28 Aug 2010 02:37:30 +0400 |
parents | a1999c1f7289 |
children | b2f6c78413d3 |
line wrap: on
line source
;; ;; Copyright (C) 2010 Mikhail Kryshen <mikhail@kryshen.net> ;; ;; This file is part of Indyvon. ;; (ns net.kryshen.indyvon.demo (:gen-class) (:use (net.kryshen.indyvon core layers component)) (:import (net.kryshen.indyvon.core Size Bounds) (java.awt Color) (javax.swing JFrame))) (def layer1 (reify Layer (render! [layer] (with-handlers layer (doto *graphics* (.setColor (rand-nth [Color/RED Color/ORANGE])) (.fillRect 0 0 *width* *height*)) (:mouse-entered e (println e)) (:mouse-exited e (println e)) (:mouse-moved e (println e)))) (layer-size [layer] (Size. 30 20)))) (def layer1b (border layer1 2 3)) ;;(def layer1c (async-layer layer1 20 30)) (def layer2 (reify Layer (render! [layer] (doto *graphics* (.setColor Color/YELLOW) (.fillRect 0 0 *width* *height*)) (with-rotate 0.5 0 0 (draw! layer1b 30 25)) (draw! layer1 55 5)) (layer-size [layer] (Size. 70 65)))) (def layer2m (miniature layer2 30 30)) (def layer3 (border (text-layer "Sample\ntext" :right :center))) (defn fps-layer [fps] (border (text-layer (format "%.1f" fps) :right :bottom) 0 5)) (def fps (let [update-interval 0.1 frames (ref 0) last (ref 0) fl (ref (fps-layer 0.0))] (reify Layer (render! [layer] (draw! @fl) (dosync (alter frames + 1) (let [time (System/currentTimeMillis) elapsed (/ (- time @last) 1000.0)] (when (> elapsed update-interval) (ref-set fl (fps-layer (/ @frames elapsed))) (ref-set frames 0) (ref-set last time))))) (layer-size [layer] (layer-size @fl))))) (def layer (reify Layer (render! [layer] ;;(repaint) (doto *graphics* (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED])) (.drawLine 0 0 *width* *height*)) (draw! layer2 15 20) (draw! layer2m 120 50) (draw! layer3 100 100 80 50) (draw! fps)) (layer-size [layer] (Size. 400 300)))) (def root (viewport layer)) (defn show-frame [layer] (doto (JFrame. "Test") (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE) (.. (getContentPane) (add (make-jpanel layer))) (.pack) (.setVisible true))) (defn -main [] (show-frame root) (show-frame (miniature root 80 60)))