Mercurial > hg > indyvon
changeset 37:d2fb660ca49f
Remove "opts" argument from Layer methods.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Fri, 09 Jul 2010 01:08:45 +0400 |
parents | 5413b188d112 |
children | af3187fdc44d |
files | src/kryshen/indyvon/component.clj src/kryshen/indyvon/core.clj src/kryshen/indyvon/demo.clj src/kryshen/indyvon/layers.clj |
diffstat | 4 files changed, 65 insertions(+), 59 deletions(-) [+] |
line diff
1.1 --- a/src/kryshen/indyvon/component.clj Thu Jul 08 07:03:24 2010 +0400 1.2 +++ b/src/kryshen/indyvon/component.clj Fri Jul 09 01:08:45 2010 +0400 1.3 @@ -28,13 +28,13 @@ 1.4 *update* #(.repaint component) 1.5 *bounds* bounds 1.6 *clip* bounds] 1.7 - (render! layer nil) 1.8 + (render! layer) 1.9 (commit event-dispatcher))))) 1.10 1.11 (defn preferred-size [component layer] 1.12 (binding [*target* component 1.13 *font-context*' (font-context component)] 1.14 - (let [s (size layer nil)] 1.15 + (let [s (size layer)] 1.16 (Dimension. (:width s) (:height s))))) 1.17 1.18 (defn make-jpanel
2.1 --- a/src/kryshen/indyvon/core.clj Thu Jul 08 07:03:24 2010 +0400 2.2 +++ b/src/kryshen/indyvon/core.clj Fri Jul 09 01:08:45 2010 +0400 2.3 @@ -30,8 +30,8 @@ 2.4 2.5 (defprotocol Layer 2.6 "Basic UI element." 2.7 - (render! [this opts]) 2.8 - (size [this opts])) 2.9 + (render! [this]) 2.10 + (size [this])) 2.11 2.12 ;; TODO: modifiers 2.13 (defrecord MouseEvent [id when x y x-on-screen y-on-screen button]) 2.14 @@ -48,18 +48,18 @@ 2.15 2.16 (defprotocol Anchored 2.17 "Provide anchor point for Layers. Used by viewport." 2.18 - (anchor [this h-align v-align opts] 2.19 + (anchor [this h-align v-align] 2.20 "Anchor point: [x y], h-align could be :left, :center or :right, 2.21 v-align is :top, :center or :bottom")) 2.22 2.23 ;; Default implementation of Anchored for any Layer. 2.24 (extend-protocol Anchored 2.25 kryshen.indyvon.core.Layer 2.26 - (anchor [this h-align v-align opts] 2.27 + (anchor [this h-align v-align] 2.28 (if (and (= h-align :left) 2.29 (= v-align :top)) 2.30 (Location. 0 0) 2.31 - (let [size (size this opts)] 2.32 + (let [size (size this)] 2.33 (Location. 2.34 (case h-align 2.35 :top 0 2.36 @@ -78,23 +78,29 @@ 2.37 (.setColor (:fore-color theme)) 2.38 (.setFont (:font theme)))) 2.39 2.40 -(defn intersect [b1 b2] 2.41 - (let [x11 (:x b1) 2.42 - y11 (:y b1) 2.43 - x12 (+ x11 (:width b1)) 2.44 - y12 (+ y11 (:height b1)) 2.45 - x21 (:x b2) 2.46 - y21 (:y b2) 2.47 - x22 (+ x21 (:width b2)) 2.48 - y22 (+ y21 (:height b2)) 2.49 - x1 (max x11 x21) 2.50 - y1 (max y11 y21) 2.51 - x2 (min x12 x22) 2.52 - y2 (min y12 y22)] 2.53 - (Bounds. x1 y1 (- x2 x1) (- y2 y1)))) 2.54 +(defn intersect 2.55 + ([b1 b2] 2.56 + (let [x1 (:x b1) 2.57 + y1 (:y b1) 2.58 + x2 (:x b2) 2.59 + y2 (:y b2)] 2.60 + (intersect x1 y1 (+ x1 (:width b1)) (+ y1 (:height b1)) 2.61 + x2 y2 (+ x2 (:width b2)) (+ y2 (:height b2))))) 2.62 + ([x11 y11 x12 y12, x21 y21 x22 y22] 2.63 + (let [x1 (max x11 x21) 2.64 + y1 (max y11 y21) 2.65 + x2 (min x12 x22) 2.66 + y2 (min y12 y22)] 2.67 + (Bounds. x1 y1 (- x2 x1) (- y2 y1))))) 2.68 + 2.69 +(defn- create-graphics 2.70 + ([] 2.71 + (create-graphics 0 0 (:width *bounds*) (:height *bounds*))) 2.72 + ([x y w h] 2.73 + (apply-theme (.create *graphics* x y w h) *theme*))) 2.74 2.75 (defn with-translate* [x y w h f & args] 2.76 - (let [graphics (apply-theme (.create *graphics* x y w h) *theme*) 2.77 + (let [graphics (create-graphics x y w h) 2.78 bounds (Bounds. (+ x (:x *bounds*)) 2.79 (+ y (:y *bounds*)) 2.80 w h)] 2.81 @@ -109,8 +115,6 @@ 2.82 (defmacro with-translate [x y w h & body] 2.83 `(with-translate* ~x ~y ~w ~h (fn [] ~@body))) 2.84 2.85 - 2.86 - 2.87 (defn with-handlers* [handle handlers f & args] 2.88 (apply with-bindings* 2.89 {#'*event-dispatcher* 2.90 @@ -136,14 +140,17 @@ 2.91 [(:x geometry) (:y geometry) (:width geometry) (:height geometry)])) 2.92 2.93 (defn draw! 2.94 - "Draw a layer. Geometry is either a map or vector [x y] or 2.95 - [x y width height]." 2.96 - [layer geometry & args] 2.97 - (let [[x y w h] (geometry-vec geometry) 2.98 - size (if-not (and w h) (size layer args)) 2.99 - w (or w (:width size)) 2.100 - h (or h (:height size))] 2.101 - (with-translate* x y w h render! layer args))) 2.102 + ([layer] 2.103 + (let [graphics (create-graphics)] 2.104 + (try 2.105 + (with-bindings* {#'*graphics* graphics} render! layer) 2.106 + (finally 2.107 + (.dispose graphics))))) 2.108 + ([layer x y] 2.109 + (let [size (size layer)] 2.110 + (draw! layer x y (:width size) (:height size)))) 2.111 + ([layer x y width height] 2.112 + (with-translate* x y width height render! layer))) 2.113 2.114 ;; 2.115 ;; EventDispatcher implementation
3.1 --- a/src/kryshen/indyvon/demo.clj Thu Jul 08 07:03:24 2010 +0400 3.2 +++ b/src/kryshen/indyvon/demo.clj Fri Jul 09 01:08:45 2010 +0400 3.3 @@ -18,7 +18,7 @@ 3.4 (def layer1 3.5 (reify 3.6 Layer 3.7 - (render! [layer opts] 3.8 + (render! [layer] 3.9 (with-handlers layer 3.10 (doto *graphics* 3.11 (.setColor Color/RED) 3.12 @@ -26,20 +26,20 @@ 3.13 (:mouse-entered e (println e)) 3.14 (:mouse-exited e (println e)) 3.15 (:mouse-moved e (println e)))) 3.16 - (size [layer opts] (Size. 30 20)))) 3.17 + (size [layer] (Size. 30 20)))) 3.18 3.19 (def layer1b (border-layer layer1 2 3)) 3.20 3.21 (def layer2 3.22 (reify 3.23 Layer 3.24 - (render! [layer opts] 3.25 + (render! [layer] 3.26 (doto *graphics* 3.27 (.setColor Color/YELLOW) 3.28 (.fillRect 0 0 (:width *bounds*) (:height *bounds*))) 3.29 - (draw! layer1b [10 5]) 3.30 - (draw! layer1 [55 5])) 3.31 - (size [layer opts] (Size. 70 65)))) 3.32 + (draw! layer1b 10 5) 3.33 + (draw! layer1 55 5)) 3.34 + (size [layer] (Size. 70 65)))) 3.35 3.36 (def layer3 3.37 (border-layer (text-layer "Sample\ntext" :right :center))) 3.38 @@ -54,8 +54,8 @@ 3.39 fl (ref (fps-layer 0.0))] 3.40 (reify 3.41 Layer 3.42 - (render! [layer opts] 3.43 - (render! @fl nil) 3.44 + (render! [layer] 3.45 + (draw! @fl) 3.46 (dosync 3.47 (alter frames + 1) 3.48 (let [time (System/currentTimeMillis) 3.49 @@ -64,20 +64,20 @@ 3.50 (ref-set fl (fps-layer (/ @frames elapsed))) 3.51 (ref-set frames 0) 3.52 (ref-set last time))))) 3.53 - (size [layer opts] (size @fl nil))))) 3.54 + (size [layer] (size @fl))))) 3.55 3.56 (def layer 3.57 (reify 3.58 Layer 3.59 - (render! [layer opts] 3.60 + (render! [layer] 3.61 (*update*) 3.62 (doto *graphics* 3.63 (.setColor (rand-nth [Color/BLACK Color/BLUE Color/RED])) 3.64 (.drawLine 0 0 (:width *bounds*) (:height *bounds*))) 3.65 - (draw! layer2 [15 20]) 3.66 - (draw! layer3 [100 100 80 50]) 3.67 - (render! fps nil)) 3.68 - (size [layer opts] (Size. 400 300)))) 3.69 + (draw! layer2 15 20) 3.70 + (draw! layer3 100 100 80 50) 3.71 + (draw! fps)) 3.72 + (size [layer] (Size. 400 300)))) 3.73 3.74 (defn -main [] 3.75 (doto frame 3.76 @@ -87,3 +87,4 @@ 3.77 (.. (getContentPane) (add (make-jpanel (viewport layer)))) 3.78 (.pack) 3.79 (.setVisible true))) 3.80 +
4.1 --- a/src/kryshen/indyvon/layers.clj Thu Jul 08 07:03:24 2010 +0400 4.2 +++ b/src/kryshen/indyvon/layers.clj Fri Jul 09 01:08:45 2010 +0400 4.3 @@ -33,17 +33,16 @@ 4.4 ([content width gap] 4.5 (let [offset (+ width gap)] 4.6 (reify Layer 4.7 - (render! [l opts] 4.8 + (render! [l] 4.9 (let [w (:width *bounds*) 4.10 h (:height *bounds*)] 4.11 (.setColor *graphics* (:border-color *theme*)) 4.12 (doseq [i (range 0 width)] 4.13 (.drawRect *graphics* i i (- w 1 i i) (- h 1 i i))) 4.14 - (apply draw! content 4.15 - [offset offset (- w offset offset) (- h offset offset)] 4.16 - opts))) 4.17 - (size [l opts] 4.18 - (let [s (size content opts)] 4.19 + (draw! content 4.20 + offset offset (- w offset offset) (- h offset offset)))) 4.21 + (size [l] 4.22 + (let [s (size content)] 4.23 (Size. (+ (:width s) offset offset) 4.24 (+ (:height s) offset offset)))))))) 4.25 4.26 @@ -69,7 +68,7 @@ 4.27 ([text h-align v-align] 4.28 (let [lines (re-split #"\r\n|\n|\r|\u0085|\u2028|\u2029" text)] 4.29 (reify Layer 4.30 - (render! [layer opts] 4.31 + (render! [layer] 4.32 (let [w (:width *bounds*) 4.33 h (:height *bounds*) 4.34 font (.getFont *graphics*) 4.35 @@ -82,7 +81,7 @@ 4.36 x (align-x (.getAdvance layout) w h-align)] 4.37 (.draw layout *graphics* x (+ y ascent)) 4.38 (recur (next layouts) (+ y lh))))))) 4.39 - (size [layer opts] 4.40 + (size [layer] 4.41 (let [layouts (layout-text lines (:font *theme*) *font-context*) 4.42 width (text-width layouts) 4.43 height (text-height layouts)] 4.44 @@ -100,9 +99,9 @@ 4.45 last-height (ref 0)] 4.46 (reify 4.47 Layer 4.48 - (render! [layer opts] 4.49 + (render! [layer] 4.50 (with-handlers layer 4.51 - (let [anchor (anchor content h-align v-align opts) 4.52 + (let [anchor (anchor content h-align v-align) 4.53 width (:width *bounds*) 4.54 height (:height *bounds*)] 4.55 (dosync 4.56 @@ -110,8 +109,7 @@ 4.57 (alter y + (align-y height @last-height v-align)) 4.58 (ref-set last-width width) 4.59 (ref-set last-height height)) 4.60 - (apply draw! content 4.61 - [(- 0 @x (:x anchor)) (- 0 @y (:y anchor))] opts)) 4.62 + (draw! content (- 0 @x (:x anchor)) (- 0 @y (:y anchor)))) 4.63 (:mouse-pressed e 4.64 (dosync 4.65 (ref-set fix-x (:x-on-screen e)) 4.66 @@ -126,4 +124,4 @@ 4.67 (ref-set fix-x (:x-on-screen e)) 4.68 (ref-set fix-y (:y-on-screen e))) 4.69 (*update*)))) 4.70 - (size [layer opts] (size content opts)))))) 4.71 + (size [layer] (size content))))))