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

OSCHINA-MIRROR/zlgopen-awtk

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

FAQ

1. return_value_if_fail — как часто используемый макрос в AWTK, каковы его функции, преимущества и на что следует обратить внимание?

Функции

  • В основном используется для проверки параметров функций или возвращаемых значений (это один из способов защитного программирования).

Макрос return_value_if_fail не является оригинальным изобретением AWTK, а взят из GTK+ (или glib).

Преимущества

  • Позволяет легко проверять параметры функций или возвращаемые значения.
  • Можно выполнять разные действия в режимах Release и Debug.

В случае ошибки параметра молча возвращает код ошибки, который фактически является снисходительностью к вызывающей стороне. В режиме Debug можно вывести предупреждение или даже assert, что очень полезно для поиска ошибок.

На что следует обратить внимание

  • Внутренние функции (static) обычно не требуют проверки параметров.
  • Проверяйте только исключительные ситуации, не используйте этот макрос для нормальных сбоев или недопустимых параметров.
  • Если необходимо освободить ресурсы перед возвратом, не используйте этот макрос. Вместо этого можно использовать goto_error_if_fail, чтобы перейти к ошибке, освободить ресурсы и затем вернуться.

2. Нужно ли вызывать image_manager_load каждый раз перед рисованием изображения? Не будет ли это медленно? Какие есть преимущества?

  • Это не будет медленно. Поскольку в image_manager есть кэш, он не будет каждый раз декодировать изображение.

Преимущества

  • Кэш помогает нескольким элементам управления совместно использовать одно и то же изображение.
  • Внешнее сохранение ссылок на растровые изображения не требуется, управление кешем более гибкое. Например, можно очистить недавно не отображавшиеся изображения (даже если скрытое окно всё ещё использует это изображение).

3. Использование векторных шрифтов замедлит работу?

  • Практически не влияет. Благодаря наличию кэша, достаточно отрендерить один раз, после чего работа с векторными шрифтами не отличается от работы с растровыми.

4. На 16-битном LCD эффект отображения PNG-изображений плохой. Есть ли способ улучшить ситуацию?

  • Для непросвечивающих изображений можно преобразовать PNG в JPG, используя алгоритм сглаживания dithering во время преобразования.

Можно использовать imagemagic для преобразования:

convert bg.png  -ordered-dither o8x8,32,64,32 bg.jpg

Ссылка: http://www.imagemagick.org/Usage/quantize/

5. Как получить значение элемента управления?

Есть несколько способов получить значение элемента управления:

  • Использовать функцию widget_get_value (поддерживает только целочисленные типы).
  • Использовать функцию wiget_get_prop.
  • Прямой доступ к свойствам элемента управления. Если свойство помечено как readable, к нему можно получить прямой доступ. Пример:
widget_t* slider = widget_lookup(win, "slider", TRUE);
double value = SLIDER(slider)->value;

При прямом доступе к свойствам элементов управления необходимо использовать соответствующие макросы (например, SLIDER) для приведения типов.

6. Ubuntu 14 не запускается. Что можно сделать?

В Ubuntu 14 есть проблемы с OpenGL. Используйте программное обеспечение AGGE для рендеринга. Измените awtk_config.py:

NANOVG_BACKEND='AGGE'

7. Как реализовать полупрозрачный эффект?

  • В стиле можно указать полупрозрачный цвет заполнения с помощью формата rgba. Пример:
<normal     bg_color="rgba(200,200,200,0.1)" />
  • Полупрозрачное изображение. При создании изображения используйте формат PNG и сохраняйте альфа-канал.

  • Полностью прозрачный элемент управления (включая дочерние элементы управления). Используйте функцию widget_set_opacity для установки непрозрачности.

/**
 * @method widget_set_opacity
 * Устанавливает непрозрачность элемента управления.
 * 
 *>На встроенных платформах полупрозрачные эффекты могут значительно снизить производительность, будьте осторожны при использовании.
 * 
 * @param {widget_t*} widget Объект элемента управления.
 * @param {uint8_t} opacity Непрозрачность (значения от 0 до 255, где 0 означает полностью прозрачный, а 255 — полностью непрозрачный).
 *
 * @return {ret_t} Возвращает RET_OK в случае успеха, иначе — неудачу.
 */
ret_t widget_set_opacity(widget_t* widget, uint8_t opacity);

Непрозрачность повлияет на все элементы, включая шрифты, и обычно подходит только для реализации эффектов затухания и затухания.

8. Как настроить стандартную клавиатуру по умолчанию?

Клавиатуру можно настроить в соответствии с вашими потребностями, изменив design/default/ui/kb_default.xml.

  • Изменение значения active позволяет изменить начальную страницу.
 <pages x="0" y="bottom" w="100%" h="-28" active="4">
  • Изменение s позволяет отрегулировать расстояние между кнопками, для встроенных систем s=1 достаточно.
children_layout="default(r=4,c=1,s=2,m=2)"
  • Изменение h позволяет регулировать высоту клавиатуры.
<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%">
  • Лучше всего разработать собственную кнопку переключения для английского и китайского языков.

После внесения изменений необходимо обновить скрипт ресурсов:

python scripts/update_res.py ui

9. Как посмотреть, сколько памяти занимает приложение?

Функция tk_mem_stat может предоставить информацию об использовании памяти, или вы можете напрямую вызвать tk_mem_dump для отображения использования памяти.

Реализация функции tk_mem_dump выглядит следующим образом:

void tk_mem_dump(void) {
  mem_stat_t s = tk_mem_stat();
  log_debug("used: %d bytes %d blocks\n", s.used_bytes, s.used_block_nr);
}

10. Как определить, является ли причиной медленной работы нехватка памяти?

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

Вы можете установить точку останова в функции mem.c tk_mem_on_out_of_memory, которая вызывается при нехватке памяти. Если эта функция вызывается, это указывает на нехватку памяти.

11. Как уменьшить использование памяти?

  • Уменьшите количество одновременно открытых окон.

  • Определите WITH_BITMAP_BGR565 или WITH_BITMAP_RGB565 в зависимости от ситуации (формат lcd), чтобы декодировать непрозрачные изображения в 16 бит.

12. Как отключить вывод отладочной информации log_debug?

Функцию log_set_log_level можно использовать для настройки уровня журнала, с её помощью можно отключить низкоуровневую информацию журнала.

/**
 * @метод log_set_log_level
 *
 * Настройка уровня журнала.
 *
 * @параметр {log_level_t} log_level Уровень журнала.
 *
 * @возвращаемое значение {ret_t} Возврат RET_OK означает успех, в противном случае — сбой.
 */
ret_t log_set_log_level(log_level_t log_level);

В awtk_main.inc есть следующий код:

#ifdef NDEBUG
  log_set_log_level(LOG_LEVEL_INFO);
#else
  log_set_log_level(LOG_LEVEL_DEBUG);
#endif /*NDEBUG*/

Если вы используете awtk_main.inc в качестве точки входа приложения, определение NDEBUG также отключит отладочную информацию.

13. Приложение работает на портативных устройствах Windows, как убрать строку заголовка окна?

Определите макрос NATIVE_WINDOW_BORDERLESS в awtk_config.py и перекомпилируйте:

COMMON_CCFLAGS=COMMON_CCFLAGS+' -DNATIVE_WINDOW_BORDERLESS=1 '

14. Дочерний элемент управления обработал событие, но родительский элемент управления не должен продолжать обработку. Как это решить?

Пусть функция обработки событий вернёт RET_STOP, AWTK больше не вызовет последующие функции обработки событий.

15. Как удалить ненужные элементы управления, чтобы сэкономить место во flash?

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

Опубликовать ( 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