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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/README.ru Mon Aug 30 05:47:57 2010 +0400 1.3 @@ -0,0 +1,57 @@ 1.4 +Indyvon — экспериментальная многопоточная библиотека пользовательского 1.5 +интерфейса, написанная на языке Clojure. 1.6 + 1.7 +Особенности: 1.8 + - базовый элемент интерфейса (сцены) не имеет состояния; 1.9 + - параллельная отрисовка; 1.10 + - нет статической сцены: расположение элементов фиксируется для 1.11 + обработки событий при каждой перерисовке и используется до 1.12 + завершения отрисовки следующего кадра; 1.13 + - преобразования элементов с помощью AffineTransform; 1.14 + - произвольная область отсечения (форма элементов), которая 1.15 + учитывается при обработке событий. 1.16 + 1.17 +Базовый элемент пользовательского интерфейса описан протоколом Layer 1.18 +(слой), который содержит всего две функции: 1.19 + 1.20 + render! — отрисовка, 1.21 + layer-size — получение предпочтительного размера элемента. 1.22 + 1.23 +Слой, в отличии от обычных компонентов интерфейса или элементов графов 1.24 +сцены в системах визуализации, не имеет состояния (координаты, размер, 1.25 +элемент-родитель, дочерние элементы) и может быть изображен по-разному 1.26 +на каждой итерации цикла отрисовки. 1.27 + 1.28 +Функции слоя выполняются в контексте слоя (layer context), который 1.29 +представлен набором связанных переменных, в том числе: 1.30 + 1.31 + *graphics* — экземпляр java.awt.Graphics2D для рисования, 1.32 + *width* и *height* — размеры области рисования, 1.33 + *clip* — область отсечения (произвольная, java.awt.geom.Shape), 1.34 + *event-dispatcher* — диспетчер событий. 1.35 + 1.36 +Во время отрисовки можно устанавливать обработчики событий ввода 1.37 +(сейчас поддерживаются только события мыши) для текущего 1.38 +контекста. При установке обработчика контекст сохраняется для 1.39 +обработки событий до завершения следующей перерисовки сцены. 1.40 + 1.41 +Слои могут инициировать перерисовку с помощью механизма 1.42 +уведомлений. Обработчики уведомлений, как и обработчики событий, 1.43 +устанавливаются на время до следующей перерисовки. 1.44 + 1.45 +Таким образом, получать события ввода и вызывать перерисовку могут 1.46 +только те слои, который в данный момент видны на экране, т. е. 1.47 +участвовали в последней перерисовке. 1.48 + 1.49 +Сцена может строиться во время выполнения отрисовки (как в IMGUI: 1.50 +"сейчас нарисовать здесь кнопку") или описываться путем композиции 1.51 +слоев (предполагая, что реализованы функции border, vbox, text и 1.52 +button, которые создают слои): 1.53 + (border (hbox (text "Comment:") (button (text "Button")))) 1.54 + 1.55 +Отрисовку можно распараллелить с помощью функции async-layer, которая 1.56 +возвращает слой, показывающий результат отрисовки слоя-аргумента. При 1.57 +этом отрисовка слоя-аргумента выполняется в параллельной нити в буфер 1.58 +в памяти. Для избежания блокировок используется тройная 1.59 +буферизация. Слои, помещенные в async-layer, не будут ограничивать 1.60 +частоту кадров и могут обновляться медленнее, чем основная сцена.