Mercurial > hg > indyvon
changeset 72:76f4126aba84
Added annotation in Russian.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Mon, 30 Aug 2010 05:47:57 +0400 |
parents | 59e1810c0278 |
children | 0465aaf01664 |
files | README.ru |
diffstat | 1 files changed, 57 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.ru Mon Aug 30 05:47:57 2010 +0400 @@ -0,0 +1,57 @@ +Indyvon — экспериментальная многопоточная библиотека пользовательского +интерфейса, написанная на языке Clojure. + +Особенности: + - базовый элемент интерфейса (сцены) не имеет состояния; + - параллельная отрисовка; + - нет статической сцены: расположение элементов фиксируется для + обработки событий при каждой перерисовке и используется до + завершения отрисовки следующего кадра; + - преобразования элементов с помощью AffineTransform; + - произвольная область отсечения (форма элементов), которая + учитывается при обработке событий. + +Базовый элемент пользовательского интерфейса описан протоколом Layer +(слой), который содержит всего две функции: + + render! — отрисовка, + layer-size — получение предпочтительного размера элемента. + +Слой, в отличии от обычных компонентов интерфейса или элементов графов +сцены в системах визуализации, не имеет состояния (координаты, размер, +элемент-родитель, дочерние элементы) и может быть изображен по-разному +на каждой итерации цикла отрисовки. + +Функции слоя выполняются в контексте слоя (layer context), который +представлен набором связанных переменных, в том числе: + + *graphics* — экземпляр java.awt.Graphics2D для рисования, + *width* и *height* — размеры области рисования, + *clip* — область отсечения (произвольная, java.awt.geom.Shape), + *event-dispatcher* — диспетчер событий. + +Во время отрисовки можно устанавливать обработчики событий ввода +(сейчас поддерживаются только события мыши) для текущего +контекста. При установке обработчика контекст сохраняется для +обработки событий до завершения следующей перерисовки сцены. + +Слои могут инициировать перерисовку с помощью механизма +уведомлений. Обработчики уведомлений, как и обработчики событий, +устанавливаются на время до следующей перерисовки. + +Таким образом, получать события ввода и вызывать перерисовку могут +только те слои, который в данный момент видны на экране, т. е. +участвовали в последней перерисовке. + +Сцена может строиться во время выполнения отрисовки (как в IMGUI: +"сейчас нарисовать здесь кнопку") или описываться путем композиции +слоев (предполагая, что реализованы функции border, vbox, text и +button, которые создают слои): + (border (hbox (text "Comment:") (button (text "Button")))) + +Отрисовку можно распараллелить с помощью функции async-layer, которая +возвращает слой, показывающий результат отрисовки слоя-аргумента. При +этом отрисовка слоя-аргумента выполняется в параллельной нити в буфер +в памяти. Для избежания блокировок используется тройная +буферизация. Слои, помещенные в async-layer, не будут ограничивать +частоту кадров и могут обновляться медленнее, чем основная сцена.