Mercurial > hg > indyvon
changeset 153:291afc2a8ca2
Updated README: replaced Layer with View.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Mon, 14 Apr 2014 15:37:28 +0400 |
parents | 9997ac717c3c |
children | ed36fcf061de |
files | README.rst README.ru |
diffstat | 2 files changed, 33 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/README.rst Mon Apr 07 20:19:02 2014 +0400 +++ b/README.rst Mon Apr 14 15:37:28 2014 +0400 @@ -10,27 +10,27 @@ It is based around the idea of basically stateless UI elements defined by the following simple protocol:: - (defprotocol Layer - (render! [layer] - "Draws the layer.") - (geometry [layer] - "Returns preferred size for the layer.")) + (defprotocol View + (render! [view] + "Draws the view.") + (geometry [view] + "Returns preferred size for the view.")) -Layer functions are called in the Layer context which is defined by +View functions are called in the View 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 +In the ``render!`` function View could draw using the provided +Graphics2D instance, display another Views 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 +transforms of visible View contexts after every repaint for the time until the rendering of the next frame is complete. -It is possible to draw layers asynchronously in parallel threads by -wrapping them in ``async-layer``, which uses two off-screen buffers +It is possible to draw Views asynchronously in parallel threads by +wrapping them in ``async-view``, which uses two off-screen buffers (triple buffering) to avoid locking.
--- a/README.ru Mon Apr 07 20:19:02 2014 +0400 +++ b/README.ru Mon Apr 14 15:37:28 2014 +0400 @@ -11,19 +11,21 @@ - произвольная область отсечения (форма элементов), которая учитывается при обработке событий. -Базовый элемент пользовательского интерфейса описан протоколом Layer -(слой), который содержит всего две функции: +Базовый элемент пользовательского интерфейса описан протоколом View +(визуальный объект), который содержит всего две функции: render! — отрисовка, geometry — получение предпочтительных размеров элемента. -Слой, в отличии от обычных компонентов интерфейса или элементов графов -сцены в системах визуализации, не имеет состояния (координаты, размер, -элемент-родитель, дочерние элементы) и может быть изображен по-разному -на каждой итерации цикла отрисовки. +Визуальный объект в Indyvon, в отличии от обычных компонентов +интерфейса или элементов графов сцены в системах визуализации, не +имеет состояния (координаты, размер, элемент-родитель, дочерние +элементы) и может быть изображен по-разному на каждой итерации цикла +отрисовки. -Функции слоя выполняются в контексте слоя (layer context), который -представлен набором связанных переменных, в том числе: +Функции слоя выполняются в контексте визуального объекта (view +context), который представлен набором связанных переменных, в том +числе: *graphics* — экземпляр java.awt.Graphics2D для рисования, *width* и *height* — размеры области рисования, @@ -35,27 +37,28 @@ контекста. При установке обработчика контекст сохраняется для обработки событий до завершения следующей перерисовки сцены. -Слои могут инициировать перерисовку с помощью механизма +Визуальные объекты могут инициировать перерисовку с помощью механизма уведомлений. Обработчики уведомлений, как и обработчики событий, устанавливаются на время до следующей перерисовки. Таким образом, получать события ввода и вызывать перерисовку могут -только те слои, которые в данный момент видны на экране, т. е. -участвовали в последней перерисовке. +только те визуальные объекты, которые в данный момент видны на экране, +т. е. участвовали в последней перерисовке. Сцена может строиться во время выполнения отрисовки (как в IMGUI: "сейчас нарисовать здесь кнопку") или описываться путем композиции -слоев (предполагая, что реализованы функции border, vbox, label и -button, которые создают слои): +визуальных объектов (предполагая, что реализованы функции border, +vbox, label и button, которые возвращают реализации View): (border (hbox (label "Comment:") (button (label "Button")))) -Отрисовку можно распараллелить с помощью функции async-layer, которая -возвращает слой, показывающий результат отрисовки слоя-аргумента. При -этом отрисовка слоя-аргумента выполняется в параллельной нити в буфер -в памяти. Для избежания блокировок используется тройная -буферизация. Слои, помещенные в async-layer, не будут ограничивать -частоту кадров и могут обновляться медленнее, чем основная сцена. +Отрисовку можно распараллелить с помощью функции async-view, которая +возвращает визуальный объект, показывающий результат отрисовки +объекта-аргумента. При этом отрисовка аргумента выполняется в +параллельной нити в буфер в памяти. Для избежания блокировок +используется тройная буферизация. Визуальные объекты, помещенные в +async-view, не будут ограничивать частоту кадров и могут обновляться +медленнее, чем основная сцена.