Mercurial > hg > indyvon
view src/net/kryshen/indyvon/component.clj @ 56:87400ec6d433
Update to clojure 1.2.0.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Fri, 20 Aug 2010 03:08:02 +0400 |
parents | 6adbc03a52cb |
children | 64b67aa224f4 |
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 paint-component [^Component component layer ^Graphics2D graphics event-dispatcher] (let [size (.getSize component) width (.width size) height (.height size)] (.clearRect graphics 0 0 width height) (binding [*graphics* graphics *font-context* (.getFontRenderContext graphics) *initial-transform* (.getTransform graphics) *inverse-initial-transform* (-> graphics .getTransform .createInverse) *target* component *event-dispatcher* event-dispatcher *update* #(.repaint component) *width* width *height* height *clip* (Rectangle2D$Double. 0 0 width height)] (render! layer) (commit event-dispatcher)))) (defn preferred-size [component layer] (binding [*target* component *font-context*' (font-context component)] (let [s (layer-size layer)] (Dimension. (:width s) (:height s))))) (defn make-jpanel ([layer] (make-jpanel layer (root-event-dispatcher))) ([layer event-dispatcher] (let [panel (proxy [JPanel] [] (paintComponent [g] (paint-component this layer g event-dispatcher)) (getPreferredSize [] (preferred-size this layer)))] (.setBackground panel (:back-color *theme*)) (listen! event-dispatcher panel) panel)))