view src/net/kryshen/indyvon/component.clj @ 49:ca728127d605

Use conventional namespace/package name.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 29 Jul 2010 01:08:34 +0400
parents
children 409b1b16053d
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 (:use
9 net.kryshen.indyvon.core)
10 (:import
11 (net.kryshen.indyvon.core Size Bounds)
12 (java.awt Graphics2D Component Dimension Color)
13 (javax.swing JFrame JPanel)))
15 (defn- font-context [^Component component]
16 (.getFontRenderContext (.getFontMetrics component (.getFont component))))
18 (defn paint-component
19 [^Component component layer ^Graphics2D graphics event-dispatcher]
20 (let [size (.getSize component)
21 width (.width size)
22 height (.height size)]
23 (.clearRect graphics 0 0 width height)
24 (let [bounds (Bounds. 0 0 width height)]
25 (binding [*graphics* graphics
26 *font-context* (.getFontRenderContext graphics)
27 *target* component
28 *event-dispatcher* event-dispatcher
29 *update* #(.repaint component)
30 *bounds* bounds
31 *clip* bounds]
32 (render! layer)
33 (commit event-dispatcher)))))
35 (defn preferred-size [component layer]
36 (binding [*target* component
37 *font-context*' (font-context component)]
38 (let [s (layer-size layer)]
39 (Dimension. (:width s) (:height s)))))
41 (defn make-jpanel
42 ([layer]
43 (make-jpanel layer (root-event-dispatcher)))
44 ([layer event-dispatcher]
45 (let [panel
46 (proxy [JPanel] []
47 (paintComponent [g]
48 (paint-component this layer g event-dispatcher))
49 (getPreferredSize []
50 (preferred-size this layer)))]
51 (.setBackground panel (:back-color *theme*))
52 (listen! event-dispatcher panel)
53 panel)))