Вир. Инструменты рисования

Начну подробный рассказ о компонентах с инструментов рисования, эти инструменты выделены из всего набора инструментов, исходя из нескольких соображений:

  • Они подключаются к движку рисования (renderer) для отрисовки видимых рабочих столов
  • Они работают не только в рабочей программе, но и в Вире

Второй пункт принципиально важен, собственно речь идет о том, что конструируемая программа и работающая программа – это одна и та же программа.

Заглянем чуть глубже в рабочий стол «Корпус»:

8-1

Рабочий стол открыт в визуальном редакторе Вира, мышь наведена на кнопку «Анализатор текстов». Смотрим на красные цифры:

  1. Мышь наведена на кнопку «Анализировать все тексты» рабочего стола в визуальном редакторе и при этом открывается всплывающая подсказка, так же, как и в рабочей программе
  2. Эта же подсказка видна внизу на пульте редактора и текст подсказки здесь можно редактировать
  3. Справа выделен инструмент «Показать всплывающую подсказку», который «настраивается» текстом подсказки без изменения кода.

Инструмент «Показать всплывающую подсказку» работает в рабочей программе, и он же работает в визуальном редакторе. В визуальном редакторе редактируемый стол строится по той же схеме, которая будет использоваться в рабочей программе. Единственная разница состоит в том, что в визуальном редакторе создаются не все инструменты рабочего стола, а только

  • Инструменты рисования
  • И инструменты, явным образом включенные в список, каким и является инструмент «Показать всплывающую подсказку»

А вот столы создаются все.

Таким образом в визуальном редакторе мы

  • видим ту же картинку GUI, которая будет видна в рабочей программе
  • и эта картинка оживленная, то есть кнопки «откликаются» на мышку и т.д. Другими словами, в визуальном редакторе Вира нет «эмуляции» GUI, это настоящий WYSIWYG.

Это возможно потому, что сам Вир собран в Вире, соответственно и исполняемая среда внутри Вира точно такая же, как и в любой программе, собранной в Вире. Не уверен, что мне удалось передать принципиальную важность этого, скорее всего к этой теме придется вернутся.

Вернусь к инструментам рисования и кнопке «Анализировать все тексты», выделенной на скриншоте. Посмотрим на тот же стол на схеме справа. Как видно, на нем стоят два инструмента рисования: «Кнопка девятичастная» и «Надпись кнопочная с цветом и сдвигом».

Инструмент «Кнопка девятичастная» рисует кнопку, которая собрана из девяти картинок: 4 угла, 4 стороны и внутренность. За счет этого размер её можно менять без масштабирования. Инструмент также отрабатывает изменение состояния кнопки.

Второй инструмент «Надпись кнопочная с цветом и сдвигом» рисует надпись на кнопке, которая может менять цвет и положение в зависимости от положения мыши: вне кнопки, над кнопкой, над кнопкой и нажата кнопка мыши.

Этот пример позволяет прояснить несколько деталей:

  • На стол можно поставить несколько инструментов рисования
  • Они будут отрисованы сверху вниз, то есть инструмент, стоящий в дереве «ниже», будет рисовать поверх того, что нарисовали инструменты, стоящие в дереве над ним. Таким образом можно задать z-order.
  • GUI собирается за счет комбинации нескольких простых инструментов рисования: надписи (labels), кнопки, пиктограммы, картинки, рамки, анимация. Естественно, что эти инструменты используются для всех программ.

Кроме простых (общих) инструментов рисования есть специализированные инструменты, например, инструмент рисования текстового редактора или инструмент рисования дерева.

Я не вижу смысла говорить про движок рисования (renderer), тут все достаточно просто и очевидно. Движок вызывает инструменты рисования в «правильном» порядке (z-order, прозрачность и т.д.), инструменты рисования рисуют на битмапе, потом битмап рисуется на поверхности окна.

Disclaimer (отмазка): я не большой специалист в графике, и сделанная механика во многом «такая, потому что такая», а не потому что она хорошо продумана.

Полагаю, что в следующей версии Вира должно быть несколько вариантов графики, в том числе вариант, основанный на OpenGL. В то же время, там должны быть сохранены «хорошие» качества, например, легкость конструирования и независимость компонент. Буду благодарен за любые подсказки от специалистов.

Опубликовано в

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *