Evas
Evas는 Efl의 핵심요소 이기에 쉽게 다룰수 있는 분량은 아니다. 그저 자주 사용될 만한 메소드들을 열거해 두고 실제 내용은 해당 레퍼런스를 참조하는것이 맞을 듯 싶다.
기본적인 처리 순서
// Evas는 그래픽 영역이므로 몇가지 설정이 필요하다.
Evas* canvas;
Evas_Engine_Info_Buffer *info;
int method;
method = evas_render_method_lookup("buffer");
canvas = evas_new();
evas_output_method_set( canvas, method);
evas_output_size_set( canvas, w, h );
evas_output_viewport_set( canvas, 0, 0, w, h);
info = (Evas_Engine_Info_Buffer*) evas_engine_info_get(canvas);
// info에 캔버스 정보를 입력한다.
info->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
info->info.dest_buffer = malloc(w * h * 4); // 전체 바이트 할당
info->info.dest_buffer_row_bytes = w * 4; // 줄당 바이트
info->info.use_color_key = 0;
info->info.alpha_threshold = 0;
info->info.func.new_update_region = NULL;
info->info.func.free_update_region = NULL;
evas_engine_info_set( canvas, (Evas_Engine_Info*)info);
// 이미 윈도우가 생성되어 있으면, 해당 윈도우 내부적으로 canvas가 할당되어 있으므로 보다 수월하게 evas 객체를 얻을 수 있다.
Evas_Object *win = elm_win_add(....);
.
Evas *canvas = evas_object_evas_get(win);
// 배경설정 : rectangle 오브젝트를 처음에 추가하고, 해당 오브젝트 색상을 지정해 주는 형태로 구현
Evas_Object *bg;
bg=evas_object_rectangle_add(canvas);
evas_object_color_set(bg, 255,255,255,255);
evas_object_move(bg, 0, 0);
evas_object_resize(bg, w, h );
evas_object_show(bg);
// 필요한 요소들을 그린다.
Eina_List* update;
update = evas_render_update( canvas );
evas_render_update_free( update );
// 해제 : 할당된 버퍼를 해제한다.
Evas_Engine_Info_Buffer *info;
info = (Evas_Engine_Info_Buffer*) evas_engine_info_get( canvas );
free( info->info.dest_buffer);
evas_free( canvas);
오브젝트 종류
rectangle
line
polygon
text
textblock
textgrid
image
box
table
grid
smart object : 위에 지원되지 않은 오브젝트. elemantary 위젯이 여기에 속하며, 별도로 정의할 수도 있다.
캔버스 메쏘드
evas_focus_in : 포커스 획득
evas_focus_out : 포커스 해제
evas_render : 렌더링
evas_render_async : 비동기적으로 렌더링
evas_norender : 렌더링 없이 오브젝트 업데이트
evas_render_updates : 즉시 렌더링
객체 사이즈 힌트
EVAS_HINT_FILL=-1.0
EVAS_HINT_EXPAND=1.0
weight, align 등은 0.0~1.0 사이의 값(비율)이 들어가며, EVAS_HINT_FILL, EVAS_HINT_EXPAND 값으로 특정 사이즈를 지정할 수 있다.
evas_object_size_hint_weight_set( obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set( obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_padding_set( obj, left, right, top, bottom );
evas_object_size_hint_max_set( obj, w, h);
evas_object_size_hint_min_set( obj, w, h);
객체 위치/상태
Evas_Object *obj;
evas_object_size_set(w, h)
evas_object_position_set(x,y);
evas_object_color_set( obj, r , g, b, a );
evas_object_move( obj, x, y);
evas_object_resize( obj, w, h);
evas_object_visible_get( obje );
evas_object_show(obj);
evas_object_hide(obj);
evas_object_show( obj );
이미지
객체생성
Evas_Object *img = evas_object_image_add( canvas );
해당 영역에 맞게 객체 생성
Evas_Object *img = evas_object_image_filled_add( canvas );
이미지 파일 지정
evas_object_image_file_set( img, "path", NULL );
채우기 설정
evas_object_image_fill_set( img, 0, 0, 100, 100);
알파설정
evas_object_image_alpha_set( img, EINA_TRUE);
스케일 품질 설정
evas_object_image_smooth_scale_set( img, EINA_TRUE );
로드 시 스케일링
evas_object_image_load_size_set( img, 100, 100 );
이미지 버퍼 관련
evas_object_image_data_set
evas_object_image_data_update_add
보더
evas_object_image_border_set
캔버스 이벤트
이벤트 타입
EVAS_CALLBACK_CANVAS_FOCUS_IN
EVAS_CALLBACK_CANVAS_FOCUS_OUT
EVAS_CALLBACK_RENDER_FLUSH_PRE
.
.
.
콜백 정의
typedef void(* Evas_Event_Cb)(void *data, Evas *e, void *event_info );
이벤트 핸들러 등록
void evas_event_callback_add( Evas * e,
Evas_Callback_Type type,
Evas_Event_Cb func,
const void * data );
오브젝트 이벤트
typedef void(* Evas_Object_Event_Cb) (void *data, Evas *e, Evas_Object *obj, void *event_info);
void evas_object_event_callback_add( Evas_Object *obj,
Evas_Callback_Type type,
Evas_Object_Event_Cb func,
const void *data );
//
void evas_object_pass_events_set( Evas_Object *obj, Eina_Bool pass);
void evas_object_repeat_event_set( Evas_Object *obj, Eina_Bool repeat);
오브젝트 찾기
현재 포커스된 오브젝트를 얻어온다.
Evas_Object* evas_focus_get( const Evas * e);
이름으로 찾기
Evas_Object* evas_object_name_find( const Evas *e, const char *name);
스택내의 오브젝트
evas_object_top_get
evas_object_bottom_get
터치입력
터치 입력 수
unsigned int evas_touch_point_list_count( Evas *e );
터치 목록 얻기
Evas_Coord x, y;
evas_touch_point_nth_xy_get( evas, 0, &x, &y );
터치 아이디 얻기
int id;
id = evas_touch_point_list_nth_id_get( evas, 0 );
스마트 오브젝트 관련
evas 오브젝트를 스마트 오브젝트의 멤버의 스택에 추가
evas_object_smart_member_add( Evas_Object *obj, Evas_Object* smart_obj);
스마트 오브젝트에서 Evas_Smart 객체를 얻는다.
Evas_Smart* smart = evas_object_smart_smart_get( Evas_Object* obj);
스마트 오브젝트의 data 얻기
void* data = evas_object_smart_data_get( Evas_Object *obj);
스마트 오브젝트의 이벤트에 대한 콜백을 등록한다. 일반적인 오브젝트 콜백과는 다르게 evnet name으로 이벤트를 식별한다.
void(* Evas_Smart_Cb)(void *data, Evas_Object *obj, void *event_info);
evas_object_smart_callback_add(
Evas_Object *obj,
const char *event_name,
Evas_Smart_Cb func,
const void *data);
Ecore_Evas
evas 객체는 캔버스 관련 처리 루틴만 있으므로, ecore의 메인루프 안에 들어가기 위해 여러 처리가 필요하다. efl에는 메인 루프와 관련된 각종 이벤트 콜백등을 지원하기 위해 ecore_evas를 제공한다.
초기화
ecore_evas_init();
엔진확인
Eina_list *engines, *item;
char *data;
engines = ecore_evas_engines_get();
EINA_LIST_FOREACH( engines, item, data );
printf("%s\n", data );
ecore_evas_free(engines);
ex)
static void _on_destory( Ecore_Evas *ee )
{
ecore_main_loop_quit();
}
static foid _on_resize( Ecore_Evas *ee )
{
int w, h;
ecore_evas_geometry_get( ee, NULL, NULL, &w, &h );
}
int main()
{
Ecore_Evas *ee;
Evas *canvas;
Evas_Object *bg;
Ecore_Evas 생성
ee = ecore_evas_new( NULL, 0, 0, 100, 100, NULL );
ecore_evas_callback_destroy_set( ee, _on_destroy );
ecore_evas_callback_resize_set( ee, _on_resize);
Ecore_Evas 객체에서 Evas 객체얻기
canvas = ecore_evas_get( ee );
Evas객체에서 Ecore_Evas 객체 얻기
ee = ecore_evas_ecore_evas_get( canvas);
ecore_main_loop_begin();
ecore_evas_shutdown();
}
이미지 생성
Ecore_Evas 객체에서 이미지 Evas_Object 를 생성한다.
Evas_Object * ecore_evas_object_image_new( Ecore_Evas *ee_target);
해제
ecore_evas_free( ee );
'프로그래밍 > 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] HTTP 연결 (0) | 2014.07.13 |
[EFL] Ecore 이벤트 핸들러 (0) | 2014.07.13 |
[EFL] 기본 윈도우 (0) | 2014.07.13 |