Mercurial > hg > indyvon
changeset 0:43e3358ca4d9
Initial.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Sun, 06 Jun 2010 06:03:38 +0400 |
parents | |
children | a93cfcf60f27 |
files | .hgignore README project.clj src/indyvon/component.clj src/indyvon/core.clj src/indyvon/layer.clj test/indyvon/core_test.clj |
diffstat | 7 files changed, 115 insertions(+), 0 deletions(-) [+] |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/.hgignore Sun Jun 06 06:03:38 2010 +0400 1.3 @@ -0,0 +1,7 @@ 1.4 +syntax: glob 1.5 + 1.6 +pom.xml 1.7 +lib 1.8 +classes 1.9 +*.jar 1.10 +*~
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/README Sun Jun 06 06:03:38 2010 +0400 2.3 @@ -0,0 +1,15 @@ 2.4 +# indyvon 2.5 + 2.6 +FIXME: write description 2.7 + 2.8 +## Usage 2.9 + 2.10 +FIXME: write 2.11 + 2.12 +## Installation 2.13 + 2.14 +FIXME: write 2.15 + 2.16 +## License 2.17 + 2.18 +FIXME: write
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/project.clj Sun Jun 06 06:03:38 2010 +0400 3.3 @@ -0,0 +1,5 @@ 3.4 +(defproject indyvon "1.0.0-SNAPSHOT" 3.5 + :description "FIXME: write" 3.6 + :dependencies [[org.clojure/clojure "1.2.0-master-SNAPSHOT"] 3.7 + [org.clojure/clojure-contrib "1.2.0-SNAPSHOT"]] 3.8 + :dev-dependencies [[leiningen/lein-swank "1.2.0-SNAPSHOT"]])
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/src/indyvon/component.clj Sun Jun 06 06:03:38 2010 +0400 4.3 @@ -0,0 +1,17 @@ 4.4 +;; (ns indyvon.component 4.5 +;; (:use indyvon.layer) 4.6 +;; (:import (java.awt Graphics Graphics2D)) 4.7 +;; (:gen-class 4.8 +;; :name indyvon.Component 4.9 +;; :extends java.awt.Component 4.10 +;; :constructor {[Layer] []} 4.11 +;; :state layer 4.12 +;; :init init-state)) 4.13 + 4.14 +;; (defn- init-state [layer] 4.15 +;; [[] layer]) 4.16 + 4.17 +;; (defn -paint [this graphics]) 4.18 + 4.19 +;; (defn -update [this graphics] 4.20 +;; (-paint this graphics))
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/src/indyvon/core.clj Sun Jun 06 06:03:38 2010 +0400 5.3 @@ -0,0 +1,1 @@ 5.4 +(ns indyvon.core)
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/src/indyvon/layer.clj Sun Jun 06 06:03:38 2010 +0400 6.3 @@ -0,0 +1,64 @@ 6.4 +(ns indyvon.layer 6.5 + (:import (java.awt Component Graphics2D))) 6.6 + 6.7 +(def ^{:private true} *graphics*) 6.8 +(def ^{:private true} *rx* 0) 6.9 +(def ^{:private true} *ry* 0) 6.10 + 6.11 +(def *width*) 6.12 +(def *height*) 6.13 + 6.14 +(def *lag*) 6.15 + 6.16 +(def *update-fn*) 6.17 + 6.18 +(defprotocol Layer 6.19 + (render! [this]) 6.20 + (size [this]) 6.21 + (anchor [this])) 6.22 + 6.23 +(defn- translate [g x y w h clip] 6.24 + (if clip 6.25 + (.create g x y w h) 6.26 + (doto (.create g) 6.27 + (.translate x y)))) 6.28 + 6.29 +(defn render-layer! 6.30 + "Render layer in a new graphics context." 6.31 + ([layer] 6.32 + (render-layer! layer 0 0 *width* *height*)) 6.33 + ([layer x y] 6.34 + (render-layer! layer x y true)) 6.35 + ([layer x y clip] 6.36 + (let [s (size layer)] 6.37 + (render-layer! layer x y (.width s) (.height s) clip))) 6.38 + ([layer x y w h] 6.39 + (render-layer! layer x y w h true)) 6.40 + ([layer x y w h clip] 6.41 + (binding [*graphics* (translate *graphics* x y w h clip) 6.42 + *rx* (+ *rx* x) 6.43 + *ry* (+ *ry* y) 6.44 + *width* w 6.45 + *height* h] 6.46 + (render! layer)))) 6.47 + 6.48 +(defn- make-update-fn [component] 6.49 + (fn [] (.repaint component))) 6.50 + 6.51 +(defn make-component [layer] 6.52 + (proxy [Component] [] 6.53 + (update [g] (.paint this g)) 6.54 + (paint [g] 6.55 + (let [insets (.getInsets this) 6.56 + top (.top insets) 6.57 + left (.left insets) 6.58 + bottom (.bottom insets) 6.59 + right (.right insets) 6.60 + size (.getSize this) 6.61 + width (- (.width size) left right) 6.62 + height (- (.height size) top bottom)] 6.63 + (binding [*graphics* g 6.64 + *update-fn* (make-update-fn this)] 6.65 + (render-layer! layer top left width height false)))) 6.66 + (getPreferredSize [] 6.67 + (size layer))))