# HG changeset patch # User Mikhail Kryshen <mikhail@kryshen.net> # Date 1283132877 -14400 # Node ID 76f4126aba842ac70fa53e969acbb8dfae99ecb4 # Parent 59e1810c0278edf3ca0b8bcb6b12c20b37abab4e Added annotation in Russian. diff -r 59e1810c0278 -r 76f4126aba84 README.ru --- /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, не будут ограничивать +чаÑтоту кадров и могут обновлÑтьÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ, чем оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ñцена.