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 +частоту кадров и могут обновляться медленнее, чем основная сцена.