view src/kryshen/indyvon/component.clj @ 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 930c088e1367
line source
1 ;;
2 ;; Copyright (C) 2010 Mikhail Kryshen <mikhail@kryshen.net>
3 ;;
4 ;; This file is part of Indyvon.
5 ;;
7 (ns kryshen.indyvon.component
8 (:use kryshen.indyvon.core
9 kryshen.indyvon.layers)
10 (:import (kryshen.indyvon.core Size Bounds)
11 (java.awt Graphics2D Component Dimension Color)
12 (javax.swing JFrame JPanel)))
14 (defn- font-context [^Component component]
15 (.getFontRenderContext (.getFontMetrics component (.getFont component))))
17 (defn paint-component
18 [^Component component layer ^Graphics2D graphics event-dispatcher]
19 (let [size (.getSize component)
20 width (.width size)
21 height (.height size)]
22 (.clearRect graphics 0 0 width height)
23 (let [bounds (Bounds. 0 0 width height)]
24 (binding [*graphics* graphics
25 *font-context* (.getFontRenderContext graphics)
26 *target* component
27 *event-dispatcher* event-dispatcher
28 *update* #(.repaint component)
29 *bounds* bounds
30 *clip* bounds]
31 (render! layer)
32 (commit event-dispatcher)))))
34 (defn preferred-size [component layer]
35 (binding [*target* component
36 *font-context*' (font-context component)]
37 (let [s (size layer)]
38 (Dimension. (:width s) (:height s)))))
40 (defn make-jpanel
41 ([layer]
42 (make-jpanel layer (root-event-dispatcher)))
43 ([layer event-dispatcher]
44 (let [panel
45 (proxy [JPanel] []
46 (paintComponent [g]
47 (paint-component this layer g event-dispatcher))
48 (getPreferredSize []
49 (preferred-size this layer)))]
50 (.setBackground panel (:back-color *theme*))
51 (listen! event-dispatcher panel)
52 panel)))