logo
Литература_1 / photon_old

Использование повреждённых черепиц (tiles)

Если выполнение Вашей функции прорисовки необработанного виджета занимает много времени, Вы можете не захотеть перерисовать весь холст, когда повреждена только его малая часть. Вы можете ускорить восстановление, используя аргумент damage функции прорисовки [Прим. пер. – Да и зрительно это будет получше...]. Аргумент damage является указателем на связанный список структур PhTile_t (см. "Справочник библиотечных функций Photon'а"), каждая из которых включает такие члены:

rect Структура PhRect_t, определяющая повреждённую область

next Указатель на следующую черепицу в списке.

Повреждённые области являются относительными от родителя необработанного виджета. По крайней мере один из них перекрывает необработанный виджет, но некоторые из них могут и не перекрывать.

Если в связанном списке находится более одной черепицы, первая из них покрывает всю область, покрываемую остальными. Можно или использовать первую черепицу и игнорировать остальные, или игнорировать первую и использовать остальные:

void rawDrawFunction (PtWidget_t *widget, PhTile_t *damage) {

if (damage->next != NULL) {

/* Если имеется больше одной черепицы, пропустить первую. */

damage = damage->next;

}

while (damage != NULL) {

/* Проверка damage, чтобы посмотреть, надо ли делать какую-то прорисовку:

damage->rect.ul.x, damage->rect.ul.y,

damage->rect.lr.x, damage->rect.lr.y

*/

...

damage = damage->next; /* Переход к следующей черепице. */

}}

Следующие функции (описанные в "Справочнике библиотечных функций Photon'а") работают с черепицами:

PhAddMergeTiles()

Объединение двух списков черепиц, исключающее наложение

PhClipTilings()

Обрезка одного списка черепиц другим

PhCoalesceTiles()

Комбинирование списка черепиц

PhCopyTiles()

Копирование списка черепиц

PhDeTranslateTiles()

Вычитание смещений по x и y из вершин списка черепиц

PhFreeTiles()

Возвращение списка черепиц во внутренний пул черепиц

PhGetTile()

Получение черепицы из внутреннего пула черепиц

PhIntersectTilings()

Определение пересечения двух списков черепиц

PhMergeTiles()

Удаление всех наложений из списка черепиц

PhRectsToTiles()

Создание списка черепиц из массива прямоугольников

PhSortTiles() PhTilesToRects ()

Сортировка списка черепиц

Создание массива прямоугольников из списка черепиц

PhTranslateTiles()

Добавление смещений по x и y к вершинам списка черепиц

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4