본문 바로가기

프로그래밍/Tizen

[EFL] Ecore 이벤트 핸들러

이벤트나 타이머 작업 등은 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