view src/net/kryshen/indyvon/component.clj @ 58:64b67aa224f4

Code cleanup, docstrings.
author Mikhail Kryshen <mikhail@kryshen.net>
date Fri, 20 Aug 2010 21:44:03 +0400
parents 6adbc03a52cb
children 7e456697924d
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 (java.awt.geom Rectangle2D$Double)
15 (javax.swing JFrame JPanel)))
17 (defn- font-context [^Component component]
18 (.getFontRenderContext (.getFontMetrics component (.getFont component))))
20 (defn paint-component
21 [^Component component layer ^Graphics2D graphics event-dispatcher]
22 (let [size (.getSize component)
23 width (.width size)
24 height (.height size)]
25 (.clearRect graphics 0 0 width height)
26 ;; Setup the root layer context (move to core?).
27 (binding [*graphics* graphics
28 *font-context* (.getFontRenderContext graphics)
29 *initial-transform* (.getTransform graphics)
30 *inverse-initial-transform*
31 (-> graphics .getTransform .createInverse)
32 *target* component
33 *event-dispatcher* event-dispatcher
34 *update* #(.repaint component)
35 *width* width
36 *height* height
37 *clip* (Rectangle2D$Double. 0 0 width height)]
38 (render! layer)
39 (commit event-dispatcher))))
41 (defn preferred-size [component layer]
42 (binding [*target* component
43 *font-context*' (font-context component)]
44 (let [s (layer-size layer)]
45 (Dimension. (:width s) (:height s)))))
47 (defn make-jpanel
48 ([layer]
49 (make-jpanel layer (root-event-dispatcher)))
50 ([layer event-dispatcher]
51 (let [panel
52 (proxy [JPanel] []
53 (paintComponent [g]
54 (paint-component this layer g event-dispatcher))
55 (getPreferredSize []
56 (preferred-size this layer)))]
57 (.setBackground panel (:back-color *theme*))
58 (listen! event-dispatcher panel)
59 panel)))