이벤트나 타이머 작업 등은 Ecore 메인 루프 모듈과 관련이 있으며,
Ecore_File
Ecore_Con
Ecore_Wind32 등 특정 용도의 라이브러리들로 구성되어 있다.
각 라이브러리는 라이브러리_init() 메쏘드로 초기화한 후 사용하면 된다.
각각의 이벤트 들은 ecore_main_loop_begin(); 메쏘드로 메인 루프가 시작되어야
동작한다.
기본적인 이벤트 처리 방법과 idle 상태 처리 관련해 알아본다.
이벤트는 이벤트 핸들러, 이벤트 콜백 메쏘드, 이벤트 세 부분으로 이루어진다.
Ecore 초기화
ecore_init();
EVENT_TYPE
이벤트 타입은 몇가지 저의되어 있는데, 필요한 경우 별도로 정의해 사용하면 된다. 사용자 이벤트의 경우 ECORE_EVENT_SIGNAL_USER을 사용하거나 ECORE_EVENT_COUNT + 1 해서 사용하면 될듯...
ECORE_EVENT_SIGNAL_USER
ECORE_EVENT_SIGNAL_HUP
ECORE_EVENT_SIGNAL_POWER
ECORE_EVENT_SIGNAL_EXIT
ECORE_EVENT_SIGNAL_REALTIME
.
.
새 이벤트 타입 생성
int my_event_type = ecore_event_type_new();
핸들러 추가
이벤트를 처리하기 위한 핸들러를 추가한다.
해당 이벤트 발생시 호출할 콜백과 데이터를 등록한다.
Ecore_Event_Handler* ecore_event_handler_add(
int type,
Ecore_Event_Handler_Cb func,
const void* data);
ex)
Ecore_Event_Handler *handler;
char *data = "test";
handler = ecore_event_handler_add( my_event_type, my_event_handler_callback, data);
이벤트 콜백
이벤트 핸들러에서 호출하는 메쏘드.
두가지 데이터가 인자로 들어가는데,
data의 경우 핸들러 추가시 지정된 data가 전달되고,
event_info는 이벤트 추가시 지정된 이벤트 정보가 전달된다.
ex)
static Eina_Bool my_event_handler_callback( void *data EINA_UNUSED, int type, void *event_info)
{
return ECORE_CALLBACK_DONE;
}
해당 이벤트가 처리되었으면 EINA_TRUE를 리턴하고, 다음 핸들러로 처리를 넘기려면 EINA_FALSE를 리턴한다.
리턴값
ECORE_CALLBACK_CANCEL (EINA_FALSE)
ECORE_CALLBACK_RENEW (EINA_TRUE)
ECORE_CALLBACK_PASS_ON (EINA_TRUE)
ECORE_CALLBACK_DONE (EINA_FALSE)
ECORE_CALLBACK_RENEW (EINA_TRUE)
이벤트 발생
ecore에 특정 타입의 이벤트를 이벤트큐에 추가한다. Event Type과 전달할 데이터(event_info), 종료시 free callback 메쏘드등을 지정할 수 있다. 이벤트가 추가되면 이벤트 큐에서 TYPE별로 지정된 핸들러를 호출하게 된다. 이때 핸들러에 지정된 data 값과 event_info가 전달된다.
Ecore_Event* ecore_event_add(
int type,
void* event_info,
Ecore_End_Cb func_free,
void* data );
ex)
int *event_info = malloc( sizeof(int));
*event_info = 1;
Ecore_Event *event = ecore_event_add( my_event_type, event_info , NULL, NULL );
이벤트 제거
ecore_event_del( event );
종료 콜백
이벤트 콜백 호출 후에 마지막으로 호출된다. 이벤트 처리 후 정리할 내용이 필요하면 해당 콜백을 구현 후 이벤트 전달시 3번째 인자로 전달한다.
typedef void(* Ecore_End_Cb)(void *user_data, void* func_data)
idle 관련해 enterer, idler, exiter로 구성될 수 있으며, 각각의 콜백으로 처리한다.
Ecore_Idle_enterer *enterer;
Ecore_Idler *idler;
Ecore_Idle_Exiter *exiter;
enterer = ecore_idle_enterer_add( enterer_callback, NULL );
idler = ecore_idler_add( idler_callback, NULL );
exiter = ecore_idle_exiter_add( exiter_callback, NULL );
static Eina_Bool enterer_callback( void *data EINA_UNUSED)
{
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool idler_callback( void *data EINA_UNUSED )
{
return EINA_TRUE;
}
static Eina_Bool exiter_callback(void *data EINA_UNUSED )
{
return ECORE_CALLBACK_RENEW;
}
'프로그래밍 > Tizen' 카테고리의 다른 글
[Tizen] 패키징 및 signing (0) | 2014.07.31 |
---|---|
[EFL] Ecore_Exe 프로세스간 통신 (0) | 2014.07.19 |
[EFL] Elementary (3) | 2014.07.17 |
[EFL] Elementary 위젯 (0) | 2014.07.17 |
[EFL] EDC 스크립트 (0) | 2014.07.17 |
[EFL] Evas 오브젝트 (0) | 2014.07.16 |
[EFL] HTTP 연결 (0) | 2014.07.13 |
[EFL] 기본 윈도우 (0) | 2014.07.13 |