Mercurial > hg > indyvon
changeset 42:d3e3c43df1cd
Rename size to layer-size in Layer protocol to avoid name conflict when using defrecord.
Implement graph layer in defrecord.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Sun, 11 Jul 2010 06:34:36 +0400 |
parents | 2475c99fbb8c |
children | 7d67064f0880 |
files | src/kryshen/indyvon/component.clj src/kryshen/indyvon/core.clj src/kryshen/indyvon/demo.clj src/kryshen/indyvon/graph.clj src/kryshen/indyvon/layers.clj |
diffstat | 5 files changed, 51 insertions(+), 38 deletions(-) [+] |
line diff
1.1 --- a/src/kryshen/indyvon/component.clj Sat Jul 10 07:28:19 2010 +0400 1.2 +++ b/src/kryshen/indyvon/component.clj Sun Jul 11 06:34:36 2010 +0400 1.3 @@ -35,7 +35,7 @@ 1.4 (defn preferred-size [component layer] 1.5 (binding [*target* component 1.6 *font-context*' (font-context component)] 1.7 - (let [s (size layer)] 1.8 + (let [s (layer-size layer)] 1.9 (Dimension. (:width s) (:height s))))) 1.10 1.11 (defn make-jpanel
2.1 --- a/src/kryshen/indyvon/core.clj Sat Jul 10 07:28:19 2010 +0400 2.2 +++ b/src/kryshen/indyvon/core.clj Sun Jul 11 06:34:36 2010 +0400 2.3 @@ -32,7 +32,7 @@ 2.4 (defprotocol Layer 2.5 "Basic UI element." 2.6 (render! [this]) 2.7 - (size [this])) 2.8 + (layer-size [this])) 2.9 2.10 ;; TODO: modifiers 2.11 (defrecord MouseEvent [id when x y x-on-screen y-on-screen button]) 2.12 @@ -60,7 +60,7 @@ 2.13 (if (and (= h-align :left) 2.14 (= v-align :top)) 2.15 (Location. 0 0) 2.16 - (let [size (size this)] 2.17 + (let [size (layer-size this)] 2.18 (Location. 2.19 (case h-align 2.20 :top 0 2.21 @@ -148,7 +148,7 @@ 2.22 (finally 2.23 (.dispose graphics))))) 2.24 ([layer x y] 2.25 - (let [size (size layer)] 2.26 + (let [size (layer-size layer)] 2.27 (draw! layer x y (:width size) (:height size)))) 2.28 ([layer x y width height] 2.29 (with-bounds* x y width height render! layer)))
3.1 --- a/src/kryshen/indyvon/demo.clj Sat Jul 10 07:28:19 2010 +0400 3.2 +++ b/src/kryshen/indyvon/demo.clj Sun Jul 11 06:34:36 2010 +0400 3.3 @@ -26,7 +26,7 @@ 3.4 (:mouse-entered e (println e)) 3.5 (:mouse-exited e (println e)) 3.6 (:mouse-moved e (println e)))) 3.7 - (size [layer] (Size. 30 20)))) 3.8 + (layer-size [layer] (Size. 30 20)))) 3.9 3.10 (def layer1b (border layer1 2 3)) 3.11 3.12 @@ -39,7 +39,7 @@ 3.13 (.fillRect 0 0 (:width *bounds*) (:height *bounds*))) 3.14 (draw! layer1b 10 5) 3.15 (draw! layer1 55 5)) 3.16 - (size [layer] (Size. 70 65)))) 3.17 + (layer-size [layer] (Size. 70 65)))) 3.18 3.19 (def layer3 3.20 (border (text-layer "Sample\ntext" :right :center))) 3.21 @@ -64,7 +64,7 @@ 3.22 (ref-set fl (fps-layer (/ @frames elapsed))) 3.23 (ref-set frames 0) 3.24 (ref-set last time))))) 3.25 - (size [layer] (size @fl))))) 3.26 + (layer-size [layer] (layer-size @fl))))) 3.27 3.28 (def layer 3.29 (reify 3.30 @@ -77,7 +77,7 @@ 3.31 (draw! layer2 15 20) 3.32 (draw! layer3 100 100 80 50) 3.33 (draw! fps)) 3.34 - (size [layer] (Size. 400 300)))) 3.35 + (layer-size [layer] (Size. 400 300)))) 3.36 3.37 (defn -main [] 3.38 (doto frame
4.1 --- a/src/kryshen/indyvon/graph.clj Sat Jul 10 07:28:19 2010 +0400 4.2 +++ b/src/kryshen/indyvon/graph.clj Sun Jul 11 06:34:36 2010 +0400 4.3 @@ -19,7 +19,7 @@ 4.4 Layer 4.5 (render! [v] 4.6 (.drawOval *graphics* 0 0 (:width *bounds*) (:height *bounds*))) 4.7 - (size [v] 4.8 + (layer-size [v] 4.9 (Size. 4.10 (+ (.getLeftBound v) (.getRightBound v)) 4.11 (+ (.getTopBound v) (.getBottomBound v)))) 4.12 @@ -39,7 +39,7 @@ 4.13 (let [x (+ x (.getX v)) 4.14 y (+ y (.getY v)) 4.15 anchor (anchor v :center :center) 4.16 - size (size v) 4.17 + size (layer-size v) 4.18 x (- x (:x anchor)) 4.19 y (- y (:y anchor))] 4.20 (with-bounds x y (:width size) (:height size) 4.21 @@ -76,31 +76,30 @@ 4.22 (.draw *graphics* path))) 4.23 (.translate *graphics* (- x) (- y))) 4.24 4.25 +(defrecord GraphLayer [graph-layout movable dragged fix-x fix-y] 4.26 + Layer 4.27 + (render! [layer] 4.28 + (let [bounds (.getBounds graph-layout) 4.29 + x (- (.getX bounds)) 4.30 + y (- (.getY bounds))] 4.31 + (draw-edges! graph-layout x y) 4.32 + (if movable 4.33 + (draw-movable-vertices! graph-layout x y dragged fix-x fix-y) 4.34 + (draw-vertices! graph-layout x y)))) 4.35 + (layer-size [layer] 4.36 + (let [bounds (.getBounds graph-layout)] 4.37 + (Size. (.getWidth bounds) (.getHeight bounds)))) 4.38 + Anchored 4.39 + (anchor [layer x-align y-align] 4.40 + (let [bounds (.getBounds graph-layout)] 4.41 + (Location. (- (.getX bounds)) 4.42 + (- (.getY bounds)))))) 4.43 + 4.44 (defn graph-layer 4.45 - ([layout] 4.46 - (graph-layer layout false)) 4.47 - ([^GraphLayout layout movable] 4.48 - (let [dragged (ref nil) 4.49 - fix-x (ref 0) 4.50 - fix-y (ref 0)] 4.51 - (reify 4.52 - Layer 4.53 - (render! [layer] 4.54 - (let [bounds (.getBounds layout) 4.55 - x (- (.getX bounds)) 4.56 - y (- (.getY bounds))] 4.57 - (draw-edges! layout x y) 4.58 - (if movable 4.59 - (draw-movable-vertices! layout x y dragged fix-x fix-y) 4.60 - (draw-vertices! layout x y)))) 4.61 - (size [layer] 4.62 - (let [bounds (.getBounds layout)] 4.63 - (Size. (.getWidth bounds) (.getHeight bounds)))) 4.64 - Anchored 4.65 - (anchor [layer x-align y-align] 4.66 - (let [bounds (.getBounds layout)] 4.67 - (Location. (- (.getX bounds)) 4.68 - (- (.getY bounds))))))))) 4.69 + ([graph-layout] 4.70 + (graph-layer graph-layout false)) 4.71 + ([^GraphGraph-Layout graph-layout movable] 4.72 + (GraphLayer. graph-layout movable (ref nil) (ref 0) (ref 0)))) 4.73 4.74 (defn build-graph 4.75 "Returns Graph defined by a sequence of pairs of vertex ids,
5.1 --- a/src/kryshen/indyvon/layers.clj Sat Jul 10 07:28:19 2010 +0400 5.2 +++ b/src/kryshen/indyvon/layers.clj Sun Jul 11 06:34:36 2010 +0400 5.3 @@ -41,8 +41,8 @@ 5.4 (.drawRect *graphics* i i (- w 1 i i) (- h 1 i i))) 5.5 (draw! content 5.6 offset offset (- w offset offset) (- h offset offset)))) 5.7 - (size [l] 5.8 - (let [s (size content)] 5.9 + (layer-size [l] 5.10 + (let [s (layer-size content)] 5.11 (Size. (+ (:width s) offset offset) 5.12 (+ (:height s) offset offset)))))))) 5.13 5.14 @@ -81,7 +81,7 @@ 5.15 x (align-x (.getAdvance layout) w h-align)] 5.16 (.draw layout *graphics* x (+ y ascent)) 5.17 (recur (next layouts) (+ y lh))))))) 5.18 - (size [layer] 5.19 + (layer-size [layer] 5.20 (let [layouts (layout-text lines (:font *theme*) *font-context*) 5.21 width (text-width layouts) 5.22 height (text-height layouts)] 5.23 @@ -124,4 +124,18 @@ 5.24 (ref-set fix-x (:x-on-screen e)) 5.25 (ref-set fix-y (:y-on-screen e))) 5.26 (*update*)))) 5.27 - (size [layer] (size content)))))) 5.28 + (layer-size [layer] (layer-size content)))))) 5.29 + 5.30 +(defmacro decorate-layer [layer & render-tail] 5.31 + `(reify 5.32 + Layer 5.33 + (render! ~@render-tail) 5.34 + (layer-size [t#] (layer-size ~layer)) 5.35 + Anchored 5.36 + (anchor [t# xa# ya#] (anchor ~layer xa# ya#)))) 5.37 + 5.38 +(defmacro handler [layer & handlers] 5.39 + `(decorate-layer ~layer [t#] 5.40 + (with-handlers t# 5.41 + (render! ~layer) 5.42 + ~@handlers)))