view README.ru @ 72:76f4126aba84

Added annotation in Russian.
author Mikhail Kryshen <mikhail@kryshen.net>
date Mon, 30 Aug 2010 05:47:57 +0400
parents
children 1ca7872b889b
line source
1 Indyvon — экспериментальная многопоточная библиотека пользовательского
2 интерфейса, написанная на языке Clojure.
4 Особенности:
5 - базовый элемент интерфейса (сцены) не имеет состояния;
6 - параллельная отрисовка;
7 - нет статической сцены: расположение элементов фиксируется для
8 обработки событий при каждой перерисовке и используется до
9 завершения отрисовки следующего кадра;
10 - преобразования элементов с помощью AffineTransform;
11 - произвольная область отсечения (форма элементов), которая
12 учитывается при обработке событий.
14 Базовый элемент пользовательского интерфейса описан протоколом Layer
15 (слой), который содержит всего две функции:
17 render! — отрисовка,
18 layer-size — получение предпочтительного размера элемента.
20 Слой, в отличии от обычных компонентов интерфейса или элементов графов
21 сцены в системах визуализации, не имеет состояния (координаты, размер,
22 элемент-родитель, дочерние элементы) и может быть изображен по-разному
23 на каждой итерации цикла отрисовки.
25 Функции слоя выполняются в контексте слоя (layer context), который
26 представлен набором связанных переменных, в том числе:
28 *graphics* — экземпляр java.awt.Graphics2D для рисования,
29 *width* и *height* — размеры области рисования,
30 *clip* — область отсечения (произвольная, java.awt.geom.Shape),
31 *event-dispatcher* — диспетчер событий.
33 Во время отрисовки можно устанавливать обработчики событий ввода
34 (сейчас поддерживаются только события мыши) для текущего
35 контекста. При установке обработчика контекст сохраняется для
36 обработки событий до завершения следующей перерисовки сцены.
38 Слои могут инициировать перерисовку с помощью механизма
39 уведомлений. Обработчики уведомлений, как и обработчики событий,
40 устанавливаются на время до следующей перерисовки.
42 Таким образом, получать события ввода и вызывать перерисовку могут
43 только те слои, который в данный момент видны на экране, т. е.
44 участвовали в последней перерисовке.
46 Сцена может строиться во время выполнения отрисовки (как в IMGUI:
47 "сейчас нарисовать здесь кнопку") или описываться путем композиции
48 слоев (предполагая, что реализованы функции border, vbox, text и
49 button, которые создают слои):
50 (border (hbox (text "Comment:") (button (text "Button"))))
52 Отрисовку можно распараллелить с помощью функции async-layer, которая
53 возвращает слой, показывающий результат отрисовки слоя-аргумента. При
54 этом отрисовка слоя-аргумента выполняется в параллельной нити в буфер
55 в памяти. Для избежания блокировок используется тройная
56 буферизация. Слои, помещенные в async-layer, не будут ограничивать
57 частоту кадров и могут обновляться медленнее, чем основная сцена.