Разработка простого приложения BasicUI
Необязательная модификации кода
Удаляя необязательную часть кода, добавленную по умолчанию, можно увеличить производительность проекта.
Давайте изменим исходный код, используя метод, предложенный Карстеном Хайтцлером, автором EFL.
Переходим в начало файла и удаляем функцию win_delete_request_cb() и модифицируем функцию win_back_cb() как показано ниже.
/*static void win_delete_request_cb(void *data, Evas_Object *obj, void *event_info) { ui_app_exit(); }*/ static void win_back_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; /* Let window go to hide state. */ //elm_win_lower(ad->win); elm_win_iconified_set(ad->win, EINA_TRUE); }
win_delete_request_cb() - это функция обратного вызова, использованная в функции create_base_gui() в коде ниже. Это событие используется на персоналках и, следовательно, редко используется на мобильных устройствах.
Evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
Перейдите к функции create_base_gui() и модифицируйте начало этой функции так, как показано ниже.
static void create_base_gui(appdata_s *ad) { /* set up policy to exit when last window is closed */ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); /* Window */ ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE); elm_win_autodel_set(ad->win, EINA_TRUE); int rots[4] = { 0, 90, 180, 270 }; elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4); eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad); /* child object - indent to how relationship */ /* Conformant */ ad->conform = elm_conformant_add(ad->win); elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE); evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, ad->conform); evas_object_show(ad->conform);
Используя функцию elm_policy_set(), мы создаем завершение приложения при закрытии последнего окна. В случае мобильных устройств функция elm_win_wm_rotation_supported_get() поддерживается в независимости от модели. Следовательно, она не требует рассмотрения и будет удалена. В завершение, давайте удалим не необходимые функции событий обратного вызова. Перейдите в конец файла исходного кода и удалите следующие четыре функции обратного вызова.
- ui_app_orient_changed() - ui_app_region_changed() - ui_app_low_battery() - ui_app_low_memory()
Затем из функции main() в нижней части исходного кода удалите часть, которая определяет указанные выше функции обратного вызова.
int main(int argc, char *argv[]) { appdata_s ad = {0,}; int ret = 0; ui_app_lifecycle_callback_s event_callback = {0,}; app_event_handler_h handlers[5] = {NULL, }; event_callback.create = app_create; event_callback.terminate = app_terminate; event_callback.pause = app_pause; event_callback.resume = app_resume; event_callback.app_control = app_control; //ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY],APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad); //ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY],APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad); //ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED],APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad); ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad); //ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad); //ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]); ret = ui_app_main(argc, argv, &event_callback, &ad); if (ret != APP_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret); } return ret; }
Родственные APIs
appdata_s: структура, которая сохраняет информацию.
void create_base_gui(appdata_s *ad): функция, которая создает окно и различные контейнеры и виджеты и размещае их на экране.
void win_delete_request_cb(): функция события, которая запускается при удалении приложения, не может вызыватья непосредственно.
void win_back_cb(): функция события, которая запускается при нажатии на кнопку Back, не может вызыватья непосредственно.
Evas_Object *elm_win_util_standard_add(char *name, char *title): функция, которая создает объект Window. Window — это наивысший объект в макете экрана. Приложение имеет отдельное окно. Вы можете разместить виджет в окне. Тем не менее, обычно добавляется контейнер, после чего виджет добавляется в верхнюю часть контейнера.
void elm_win_wm_rotation_available_rotations_set(Elm_Win *obj, const int *rotations, unsigned int count): API, определяющий ориентацию экрана, возможны четыре варианта углов: 0, 90, 180, и 270 градусов.
void evas_object_smart_callback_add(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data): это API, который определяет событие функции обратного вызова для смарт-объектов.
void eext_object_event_callback_add(Evas_Object *obj, Eext_Callback_Type type, Eext_Event_Cb func, void *data): это API, который определяет событие функции обратного вызова как для смарт-объектов, так и для обычных объектов.
EEXT_CALLBACK_BACK сообщает о нажатии на кнопку Back.
Evas_Object *elm_conformant_add(Evas_Object *parent): это функция, которая создает контейнер Conformant.
void elm_win_indicator_mode_set(Elm_Win *obj, Elm_Win_Indicator_Mode mode): этот API определяет включен ли индикатор.
void elm_win_indicator_opacity_set(Elm_Win *obj,Elm_Win_Indicator_Opacity_Mode mode): этот API определяет непрозрачность индикатора.
void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y): этот API определе приблизительные размеры объекта.