Mercurial > hg > indyvon
changeset 84:b04bdeec5700
English README.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Wed, 08 Sep 2010 04:40:05 +0400 |
parents | b5bb0e16507d |
children | e718a69f7d99 |
files | README.rst |
diffstat | 1 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.rst Wed Sep 08 04:40:05 2010 +0400 @@ -0,0 +1,34 @@ +========= + Indyvon +========= + +Indyvon [INteractive DYnamic VisualizatiON] is an experimental GUI +library for Clojure. + +It is based around the idea of basically stateless UI elements defined +by the following simple protocol:: + + (defprotocol Layer + (render! [layer] + "Draws the layer.") + (layer-size [layer] + "Returns preferred size for the layer.")) + +Layer functions are called in the Layer context which is defined by +bindings to vars including: + +- ``*graphics*`` — an instance of java.awt.Graphics2D used for drawing; +- ``*width*`` and ``*height*`` — size of the drawing bounds; +- ``*clip*`` — clipping area (instance of java.awt.geom.Shape). + +In the ``render!`` function layer could draw using the provided +Graphics2D instance, display another layers at the specified locations +relative to it's own context, and register event handlers. + +Event dispatching is done by remembering the clipping areas and affine +transforms of visible layer contexts after every repaint for the time +until the rendering of the next frame is complete. + +It is possible to draw layers asynchronously in a separate thread by +wrapping them in ``async-layer`` which uses two off-screen buffers +(triple buffering) to avoid locking.