view src/net/kryshen/indyvon/component.clj @ 50:409b1b16053d

Code cleanup and docstrings.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 29 Jul 2010 01:28:30 +0400
parents ca728127d605
children 1d2dfe5026a8
line source
1 ;;
2 ;; Copyright (C) 2010 Mikhail Kryshen <mikhail@kryshen.net>
3 ;;
4 ;; This file is part of Indyvon.
5 ;;
7 (ns net.kryshen.indyvon.component
8 "Integrating Indyvon into AWT and Swing components."
9 (:use
10 net.kryshen.indyvon.core)
11 (:import
12 (net.kryshen.indyvon.core Size Bounds)
13 (java.awt Graphics2D Component Dimension Color)
14 (javax.swing JFrame JPanel)))
16 (defn- font-context [^Component component]
17 (.getFontRenderContext (.getFontMetrics component (.getFont component))))
19 (defn paint-component
20 [^Component component layer ^Graphics2D graphics event-dispatcher]
21 (let [size (.getSize component)
22 width (.width size)
23 height (.height size)]
24 (.clearRect graphics 0 0 width height)
25 (let [bounds (Bounds. 0 0 width height)]
26 (binding [*graphics* graphics
27 *font-context* (.getFontRenderContext graphics)
28 *target* component
29 *event-dispatcher* event-dispatcher
30 *update* #(.repaint component)
31 *bounds* bounds
32 *clip* bounds]
33 (render! layer)
34 (commit event-dispatcher)))))
36 (defn preferred-size [component layer]
37 (binding [*target* component
38 *font-context*' (font-context component)]
39 (let [s (layer-size layer)]
40 (Dimension. (:width s) (:height s)))))
42 (defn make-jpanel
43 ([layer]
44 (make-jpanel layer (root-event-dispatcher)))
45 ([layer event-dispatcher]
46 (let [panel
47 (proxy [JPanel] []
48 (paintComponent [g]
49 (paint-component this layer g event-dispatcher))
50 (getPreferredSize []
51 (preferred-size this layer)))]
52 (.setBackground panel (:back-color *theme*))
53 (listen! event-dispatcher panel)
54 panel)))