view src/net/kryshen/indyvon/component.clj @ 67:a19cf5007d14

Asynchronous drawing.
author Mikhail Kryshen <mikhail@kryshen.net>
date Sat, 28 Aug 2010 02:37:30 +0400
parents fd1bcb67bc32
children 59e1810c0278
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 make-jpanel
21 ([layer]
22 (make-jpanel layer (root-event-dispatcher)))
23 ([layer event-dispatcher]
24 (let [panel
25 (proxy [JPanel] []
26 (paintComponent [g]
27 (let [size (.getSize ^Component this)]
28 (draw-root! layer g (.width size) (.height size)
29 event-dispatcher this)))
30 (getPreferredSize []
31 (let [s (root-size layer (font-context this) this)]
32 (Dimension. (:width s) (:height s)))))]
33 (.setBackground panel (:back-color *theme*))
34 (add-observer panel layer (fn [_] (.repaint panel)))
35 (listen! event-dispatcher panel)
36 panel)))