천재태지의 세상 돌려보기

seoz.egloos.com

- About Me... - Enlightenment, EFL - 타이젠 Tizen



[EFL] elm_win_util_standard_add() API로 elementary 윈도우 생성하기 ├ Enlightenment, EFL

[ EFL 게시물 목차 : http://seoz.egloos.com/3458699 ]


안녕하세요? 천재태지 서주영입니다.
이번 포스팅에서는 elm_win_util_standard_add()[1]라는 API를 소개합니다.
elm_win_util_standard_add() API는 util이라는 이름에 맞게 편의를 제공하는 API입니다.
이 API는 일반적인 애플리케이션에서 기본적으로 수행하는 윈도우 오브젝트 생성 및 배경 오브젝트 생성을 한번에 해줍니다.

Elementary에서는 윈도우 오브젝트를 생성을 위해 아래와 같은 elm_win_add() API[2]를 제공합니다.

win = elm_win_add(NULL, "sample", ELM_WIN_BASIC);

이 API를 이용하면 아래와 같은 검은 배경의 일반적인 윈도우 오브젝트가 생성됩니다.

그런데 반투명/투명하지 않은 일반 윈도우의 경우 배경이 되는 오브젝트를 하나 만들어야 합니다.
그 이유는 EFL에서 렌더링을 할 때 항상 윈도우 전체를 다시 그리는 것이 아니라 오브젝트가 있는 위치를 파악하여 그곳만 다시 그리는 최적화된 렌더링을 하기 때문입니다. 그래서 일반 윈도우의 경우 아무 오브젝트가 없는 빈 공간은 렌더링을 할 때 업데이트가 되지 않습니다. 그 결과 배경이 되는 오브젝트가 없는 경우 다른 오브젝트를 이리 저리 움직이다보면 빈 공간 부분에 잔상이 생길 수 있습니다.

보통 배경이 되는 오브젝트는 아래와 같이 evas_object_rectangle이나 elm_bg를 사용합니다.

Evas_Object *evas_object_rectangle_add(Evas *e)
  혹은
Evas_Object *elm_bg_add(Evas_Object *parent)

물론 어느 것을 사용하든 개발자 선택이지만 우리는 elementary로 애플리케이션을 작성하고 있기 때문에 가능한 elementary 위젯을 사용하겠습니다.

그런데 이런 배경은 대부분의 어플리케이션에서 필요하기 때문에 elementary에서는 윈도우 오브젝트를 생성할 때 아예 배경을 만들어주는 API를 제공하고 있습니다.
바로 elm_win_util_standard_add() API 입니다.
이 API는 elm_win_add()와 elm_win_title_set(), elm_bg_add() 등을 합쳐놓은 API입니다.

Evas_Object *elm_win_util_standard_add(const char *name, const char *title)

첫 번째 인자는 윈도우의 이름이고 두 번째인자는 윈도우의 타이틀입니다.
이 API는 bg 위젯(elm_bg)을 생성하여 윈도우의 resize 오브젝트로 등록해 줍니다. 그래서 윈도우의 크기가 변경되면 배경의 사이즈는 윈도우의 크기에 맞춰서 조절됩니다.

애플리케이션을 제작할 때 보통은 기본이 되는 배경을 사용하기 때문에 대부분의 경우에 elm_win_add() API 대신 elm_win_util_standard_add() API를 사용하면 됩니다.

참고로 elementary 기본 테마(default theme)에서 bg 위젯의 색은 흰 색입니다. 그래서 elm_win_util_standard_add() API로 윈도우 오브젝트를 생성하면 아래와 같이 흰 배경이 생깁니다.


감사합니다.

[1] http://docs.enlightenment.org/auto/elementary/group__Win.html#gac75d7752662fab73d6420706ce5be996
[2] http://docs.enlightenment.org/auto/elementary/group__Win.html#gad127cc5ae04689c4f2c5b633056d0ac8

[ EFL 게시물 목차 : http://seoz.egloos.com/3458699 ]




핑백

덧글

댓글 입력 영역