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 6adbc03a52cb
children b68de6a43f29
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 frame (JFrame. "Test"))

(def layer1
     (reify
      Layer
      (render! [layer]
         (with-handlers layer
           (doto *graphics*
             (.setColor Color/RED)
             (.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 layer2
     (reify
      Layer
      (render! [layer]
         (doto *graphics*
           (.setColor Color/YELLOW)
           (.fillRect 0 0 *width* *height*))
         (with-rotate 0.5 0 0
           (draw! layer1b 10 5))
         (draw! layer1 55 5))
      (layer-size [layer] (Size. 70 65))))

(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]
         ;;(*update*)
         (doto *graphics*
           (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED]))
           (.drawLine 0 0 *width* *height*))
         (draw! layer2 15 20)
         (draw! layer3 100 100 80 50)
         (draw! fps))
      (layer-size [layer] (Size. 400 300))))

(defn -main []
  (doto frame
    (.addWindowListener
     (proxy [java.awt.event.WindowAdapter] []
       (windowClosing [event] (.dispose frame))))
    (.. (getContentPane) (add (make-jpanel (viewport layer))))
    (.pack)
    (.setVisible true)))