Mercurial > hg > indyvon
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 | a1999c1f7289 |
children | 59e1810c0278 |
line wrap: on
line source
;; ;; Copyright (C) 2010 Mikhail Kryshen <mikhail@kryshen.net> ;; ;; This file is part of Indyvon. ;; (ns net.kryshen.indyvon.component "Integrating Indyvon into AWT and Swing components." (:use net.kryshen.indyvon.core) (:import (net.kryshen.indyvon.core Size Bounds) (java.awt Graphics2D Component Dimension Color) (java.awt.geom Rectangle2D$Double) (javax.swing JFrame JPanel))) (defn- font-context [^Component component] (.getFontRenderContext (.getFontMetrics component (.getFont component)))) (defn make-jpanel ([layer] (make-jpanel layer (root-event-dispatcher))) ([layer event-dispatcher] (let [panel (proxy [JPanel] [] (paintComponent [g] (let [size (.getSize ^Component this)] (draw-root! layer g (.width size) (.height size) event-dispatcher this))) (getPreferredSize [] (let [s (root-size layer (font-context this) this)] (Dimension. (:width s) (:height s)))))] (.setBackground panel (:back-color *theme*)) (add-observer panel layer (fn [_] (.repaint panel))) (listen! event-dispatcher panel) panel)))