1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zlgopen-awtk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
dialog_highlight.md 5.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:52 91e8897

Стратегия выделения диалоговых окон

Введение

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

Стандартная стратегия выделения диалоговых окон затемняет окно фона. Она может быть статической (фиксированная альфа) или динамической. В динамической стратегии выделения во время анимации открытия диалогового окна окно фона постепенно затемняется, что обеспечивает лучший визуальный эффект, но требует больше вычислительных ресурсов. Разработчики могут выбрать статический или динамический эффект в зависимости от конкретной ситуации.

Использование

Стратегия выделения диалоговых окон задаётся через атрибут highlight в диалоговом окне. Значение «default» указывает на стандартную стратегию выделения диалоговых окон. Например:

Использование статического эффекта:

<dialog anim_hint="popdown" highlight="default(alpha=40)"  
  x="0" y="0" w="100%" h="160">

Использование динамического эффекта:

<dialog anim_hint="popup" highlight="default(start_alpha=0, end_alpha=80)" 
  x="0" y="bottom" w="100%" h="160">

Описание параметров

Формат параметров аналогичен формату параметров вызова функции (func_call_params_format.md). Стандартная стратегия выделения поддерживает следующие параметры:

  • start_alpha — начальное значение альфа (от 0 до 255).
  • end_alpha — конечное значение альфа (от 0 до 255).
  • alpha — эквивалентно установке одинаковых значений для start_alpha и end_alpha.
  • update_background — обновлять ли снимок окна нижнего уровня, по умолчанию false, при значении true снимок окна нижнего уровня обновляется каждый кадр.
  1. Когда alpha = 0, визуальный эффект не меняется, но снимок окна фона кэшируется, что повышает эффективность отображения. Эту опцию можно использовать в особых случаях.
  2. Когда update_background = true, снимок окна нижнего уровня будет обновляться каждый кадр, что снижает эффективность. Эту опцию не рекомендуется использовать без необходимости.

Пользовательская стратегия выделения

Разработчики могут создавать собственные стратегии выделения, которые можно активировать в XML-файле аналогично встроенным стратегиям выделения.

  1. Реализовать интерфейс dialog_highlighter_t. Пример:
static const dialog_highlighter_vtable_t s_dialog_highlighter_default_vt = { 
    .type = "dialog_highlighter_default_t",
    .desc = "dialog_highlighter_default_t",
    .size = sizeof(dialog_highlighter_default_t),
    .prepare = dialog_highlighter_default_prepare,
    .draw = dialog_highlighter_default_draw};

dialog_highlighter_t* dialog_highlighter_default_create(object_t* args) {
  value_t v;
  dialog_highlighter_t* h = dialog_highlighter_create(&s_dialog_highlighter_default_vt);
  dialog_highlighter_default_t* dh = (dialog_highlighter_default_t*)h;
  return_value_if_fail(h != NULL, NULL);

  dh->end_alpha = 0;
  dh->start_alpha = 0;

...

  return h;
}
  1. Зарегистрировать в фабрике dialog_highlighter. Пример:
  dialog_highlighter_factory_register(f, DIALOG_HIGHLIGHTER_DEFAULT,
                                      dialog_highlighter_default_create);

Полный пример см.: https://github.com/zlgopen/awtk/tree/master/src/dialog_highlighters

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zlgopen-awtk.git
git@api.gitlife.ru:oschina-mirror/zlgopen-awtk.git
oschina-mirror
zlgopen-awtk
zlgopen-awtk
master