[kor][e-kor-seminar 2014][3/8] getting started - writing efl app (sanghyun lee)
TRANSCRIPT
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
목차Contents
1. 최신 Tizen SDK 설치하기
2. Tizen SDK 및 EFL 템플릿 소개
3. Container 위젯으로 화면 구성하기
4. Button을 이용한 Smart Event 활용
5. EFL Sample Application
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
1. 최신 Tizen SDK 설치하기
- Tizen 홈페이지(www.tizen.org) 접속
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
2. Tizen SDK 및 EFL 템플릿 소개
Basic EDC Application
- Layout EDC 기반
Basic UI Application
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
2. Tizen SDK 및 EFL 템플릿 소개
Ecore Main Loop
- EFL event를 체크/처리하는 메인 루틴
- ecore_main_loop_begin, ecore_main_loop_quit 을 통해 활성화 및 종료
ecore API elementary API Tizen API
ecore_main_loop_begin() elm_run() app_main()
ecore_main_loop_quit() elm_exit()
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
2. Tizen SDK 및 EFL 템플릿 소개
intmain(int argc, char *argv[]){
appdata_s ad = {0,};app_event_callback_s event_callback = {0,};int ret = 0;
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;event_callback.language_changed = app_language_changed;
event_callback.low_memory = NULL;event_callback.low_battery = NULL;event_callback.device_orientation = NULL;event_callback.region_format_changed = NULL;
ret = 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;}
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
2. Tizen SDK 및 EFL 템플릿 소개
static boolapp_create(void *data){
appdata_s *ad = data;create_base_gui(ad);return true;
}
static voidcreate_base_gui(appdata_s *ad){
/* Window */ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);elm_win_autodel_set(ad->win, EINA_TRUE);
if (elm_win_wm_rotation_supported_get(ad->win)) {int rots[4] = { 0, 90, 180, 270 };elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
}
evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
/* Conformant*/
/* Label*/
/* Show window after base gui is set up */evas_object_show(ad->win);
}
static voidwin_delete_request_cb(void *data , Evas_Object *obj , void *event_info){
elm_exit();}
static voidwin_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);
}
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
3. Container 위젯으로 화면 구성하기
Container 위젯이란?
여러 elementary 위젯들을 화면상에 Layout 시키기 위한 위젯
e.g : Gengrid, Genlist, Box, Conformant, Grid, Layout, Naviframe, Panes, Scroller, Table
Box 위젯
Box 위젯은 Child 위젯을 Linear fansion으로 정렬하는 위젯
수직 및 수평 정렬Child object 간의 padding 가능
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
3. Container 위젯으로 화면 구성하기
elm_label :
- Text 출력 및 text 관련 기능을 제공하는 위젯
- elm_object_text_set API 로 출력할 텍스트 입력
elm_image :
- Image 출력 및 Image 관련 기능을 제공하는 위젯
- elm_image_file_set API 로 image 파일을 로드
elm_button :
- Button 생성 및 Button 관련 기능을 제공하는 위젯
- elm_object_text_set API로 button 내부 text 설정 가능
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
3. Container 위젯으로 화면 구성하기
Evas Object의 Hint Weight : Container 내부에서 해당 Evas Object의 가중치
evas_object_size_hint_weight_set(evas object, horizontal weight, vertical weight)
EVAS_OBJECT_HINT_EXPAND : 1
Evas Object의 Hint Align : Container Boundary 내에서 Evas Object의 정렬값
evas_object_size_hint_align_set(evas object, horizontal align, vertical align)
EVAS_OBJECT_HINT_FILL : -1
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
4. Button을 이용한 Smart Event 활용
/* Button*/ad->btn = elm_button_add(ad->box);elm_object_text_set(ad->btn, "Tizen Button");evas_object_size_hint_weight_set(ad->btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_smart_callback_add(ad->btn, "clicked", btn_clicked_cb, ad);elm_box_pack_end(ad->box, ad->btn);evas_object_show(ad->btn);
evas_object_smart_callback_add(Evas Object, Smart Callback Name, Smart Callback Function, Function Data)
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
4. Button을 이용한 Smart Event 활용
static voidbtn_clicked_cb(void *data, Evas_Object *obj, void*event_info){
appdata_s *ad = data;
if (ad->btn_press) {ad->btn_press = EINA_FALSE;elm_object_text_set(ad->label, "Hello EFL");elm_image_file_set(ad->img,
"/opt/usr/apps/org.tizen.efl_test/res/tizen.png", NULL);}else {
ad->btn_press = EINA_TRUE;elm_object_text_set(ad->label, "Button Pressed");elm_image_file_set(ad->img,
"/opt/usr/apps/org.tizen.efl_test/res/efl.png", NULL);}
}
SDK에서 EFL 앱 개발하기
2014 EFL 한국 개발자 커뮤니티 세미나
5. EFL Sample Application
SDK Sample Application 제공
1. Native UI App
- Settings
- Gallery
- Calculator
- Application Store
- Clock etc.
2. Native App
- UI Controls Sample