Open Source/EFL

[요약] An overview of EFL - 1

소혼 2010. 1. 10. 11:10
반응형
문단레벨로 요약했다.
사실 지 맘대로 요약 -_-

Chapter1. Introduction


대부분의 영역에서 좋은 아이디어들이 사장되는 근본적인 이유는 타성이다.
유닉스에서는 X가 나온 이래 다양한 툴킷들이 존재한다.
그런 툴킷들중 유명한 몇몇은 여러 좋은 점들이 있으나, 만약 애니메이션, 투명 컴포넌트등의 막강한 라이브러리를 원한다면 EFL로 오라
EFL은 단지 툴킷이 아니라 툴킷 그 이상을 얻을 수 있다.

A Little history
1999년도에 Enlightment window manager(version 16)는 혁신적인 그래피컬 이펙트를 보여주었다.
Enlightment는 Gnome과 다른 window manager에 영향을 미쳤고 version 16은 여전히 제공되고 있다.
Enlightment v17(Desktop shell이라고 우리가 부르는)이 나오지 않는 것은 단순한 window manager가 아닌 Enlightment Foundation Library라고 하는 라이브러리가 되어 다른 응용 프로그램들이 쓸 수 있도록 제공하기 위함이다.
사람들이 Enlightment를 새로운 데스크탑 환경으로 인식하고 EFL을 또하나의 Toolkit으로 인식하지만, 그렇지 않다는 것을 알리는 것이 이 문서의 초점이다.

관련문서
이 문서는 EFL의 컨셉을 설명하니 자세한 내용은 다음 문서를 참조하라.
 - The EFL Cookbook
 - The EWL Book Reference
 - The Edje Book

EFL Cookbook은 대부분의 EFL Component를 다룬다.
EWL Book Reference는 EFL이 제공하는 Widget들을 다룬다.
Edje Book은 Edje Layout engine을 사용해 Themeable한 EFL을 개발하는데 필요한 내용을 다룬다

그밖의 레퍼런스들은 다음과 같다

* The Ecore Reference
* The Edje Reference
* The Eet Reference
* The Evas Reference
* The EWL Reference

Obtaining the EFL libraries
* Getting binary packages for your distribution.
* Downloading snapshots of selected libraries.
* Downloading directly from CVS.
* Running/installing the E-live CD.

공식적인 릴리즈는 없으니 1번은 추천하지 않고, 2,3,4번이 좋겠다.

Chapter 2.The EFL structure

EFL의 대부분의 라이브러리들은 계속 개발중이다.
이 문서는 유용한 기본라이브러리만 주로 다룰 것이다.

Organization of the Libraries
다수의 라이브러리간의 관계를 표현하기 위해 아래와 같은 박스 스택을 많이 사용하지만 EFL은 박스 스택으로 이해하기 좋은 구조는 아니다.
EFL은  그림 1과 같이 같이 표현하긴 해도, Low level library들도 직접 사용될 수 있기 때문에 이렇게 레이어로 표현된 그림은 EFL을 제대로 표현하지 못한다.

이 그림에서 보다시피 각 라이브러리는 하이러키가 존재하는 것이 아니라 각자 사용될 수 있다. APP1같은경우는 NON GUI 어플리케이션의 예라고 볼 수 있다.

Brief description of each EFL library
먼저 각 라이브러리를 간단히 정리하고 넘어가자
 The Evas canvas  에바스는 파워풀한 캔바스로, 캔바스 위젯에서 진일보하여 redrawing없이 그려진 엘리먼트들을 이동,크기변경하는 것을 지원한다.
 The Edje Layout Engine  Edje Layout Engine은 C코딩과 관계없이 GUI파트를 구성하며, 어쨌든 이해는 안가지만 독자적인것이란다. -_-;
 The Ecore glue library data structure,  IPC, networking등 glib과 유사한 모듈이다.
 The Eet Storage library 대부분 theme에 대한 압축형태의 파일을 제공하고 풀어서 쓰는데, Eet를 사용하 Edje는 변경전에는 압축해제하지 않도록 제공하는 Theme 저장소를 위한 라이브러리다.
 The Embryo Scripting Language Edje를 위해 프로그래머블한 theme을 구성하고 싶으면, 추가적으로 사용할 수 있는 스크립트 언어이다.
 The Epeg Thumbnailing Library  JPEG에 특화된 썸네일 라이브러리
 The Epsilon Thumbnailing Library  일반적인 파일을 다루는 썸네일 라이브러리
 The Esmart Utility Library  Edje가 모든 걸 하면 좋겠지만, 추가적인 기능(vbox같은 컨테이너 기능, transparenc등)들을 제공하기 위한 라이브러리로, Canvas에 관한건 Evas에 있고 그 외는 각 라이브러리 파일로 어플이 필요한것만 포함해서 쓸 수 있다.
 The EWL Widget Set  GTK 같은 툴킷
 The Imlib2 Image Library 정확히 EFL Library는 아니지만 아주 빠른 이미지 라이브러리로 Evas와 긴밀히 엮여있다.

그 밖의 다른 EFL라이브러리들은 개발중이다(Emotion같은)

Chapter3. Understanding the Evas Canvas

Evas가 Canvas라고 했는데 그렇다면 다른 Canvas위젯과는 뭐가 다른지 정리해보았다.
Evas기반 application이 적은 resource를 사용하는 멋진 application으로 생각될 수 있으나, 이것은 완전히 새로운 컨셉이다.

마지막 항목에서 말하듯, Evas는 Canvas Widget에 비해 매우 빠르다.

What "Image based" means
computer가 그래픽을 다루기 시작하면서, pixel에 기반한 이미지들을 저장하고 이를 화면에 뿌리는 방식을 사용했다.

공간문제때문에 이 방식은 정해진 퀄리티와 resolution을 사용해야 했고, icon과 같은 특별한 경우 몇개의 resolution을 따로 유지하기도 하지만 wallpaper(1280? 1440? 1680?)같은 경우는 문제가 발생한다.

Software platform은 그래서 image를 수학적으로 표현한 vector그래픽방식으로 화면에 렌더링하는 방법을 채택하기 시작했다.

장점은 resolution에 완벽하게 독립적이란 것이다.

단점은 실시간으로 렌더링하는 비용이 발생한다는 것이다.

vector graphic은 실제 픽셀 정보가 중요한 사진을 표현하는데는 쓰이지 않을 것이다.

대부분의 Canvas widget이 vector방식을 선택하고 있지만 이 방법은 embedded 환경같이 아직 성능이 문제가 되는 경우에 유용하지 못하다.

3.1 일반적인 캔바스 위젯의 문제
일반적인 캔바스 위젯이 픽셀로 된 이미지를 extra feature로 보는데 반해 Evas는 이미지에 초점을 맞추고 Arc, Circle, bezier curves같은건 없다. evas로 된 인터페이스를 만들려면, 모든 엘리먼트를 png같은 이미지로 저장하고 인터페이스가 활성화되면 에바스가 load하고 resize할 것이다.

에바스 그래픽은 resolution 독립적이진 않지만 정교한 알고리즘으로 축소되더라도 그들의 퀄리티를 유지할 것이다.

3.2 에바스에서의 워크플로우
만약 당신이 복잡한 수학함수차트나 과학프로그램을 만드는게 아니라 단지 이쁘고 애니메이션이 풍부한 어플리케이션을 만들고 싶으면 에바스가 해답이 될 것이다.

What "State-aware" Means
Canvas가 이미 렌더링된 이미지라는 점에서 Evas도 잘 옵티마이즈된 이미지라고 볼 수 있다. 그러나 이전 챕터만 읽고 별로 대단한것 없다고 생각한다면 일단 이 챕터를 읽고 다시 고민해보길 바란다.

Evas는 특정 시점에서의 자신의 상태를 기억하고 있다.

슈도 코드로써 설명을 하려고 한다.

조는 이제 막 Canvas Widget을 써보기 시작했다.

조는 캔바스가 다시 그려질때(Paint 함수가 호출될때)마다 오브젝트들을 다시 그려야 함을 알았다. 즉 캔바스에게 오브젝트들을 넘겨줘야 했다.
캔바스에 그려져야 할 모든 오브젝트들이 관리되어야 하는데 실제로 조가 하는 일은 오브젝트들을 add하고 캔바스에게 알려주는 것 뿐이다.

나중에 조는 캔바스안에 오브젝트를 클릭해서 움직이고 싶어졌다.
이를 위해 조는 별도의 자료구조로 canvas의 상태를 관리해야 했다. 즉 캔바스는 단순한 2차원 픽셀배열이며, 오브젝트들은 그려지는 순간 자신의 특징을 잃어버린다. 이런 캔바스는 멍청하고 state unware하다.

조가 만약 state-aware한 캔바스를 사용한다면 어떻게 되었을까?

오브젝트를 가지는 캔바스는 스크린상에 뭐가 있는지도 알만큼 똑똑할 것이다.

Available Programming Facilities
다음은 Evas Object들이다.
( + Gradient : Linear,radial,rectangular,etc)

Chapter4.Understanding the Edje Layout Engine

Edje는 간단한 설명으로 이해될 만한 라이브러리가 아니다.
그것은 다양한 목적을 가진 복잡한 라이브러리이다.

Edje는 역할은 다음과 같다.
* A layout engine.
* Ananimation/effects graphic library.
* An Interface Description Language.
* A logic/appearancese paration library.
* A theming frame work.
* A GUI previewer(think glade).
* An abstraction over Evas

Edje as a Layout engine

대부분의 어플리케이션들이 시작할때 window manager로부터 크기를 받아 그 안을 활용하는데, 만약 크기를 바꾸거나, 풀스크린모드가 되면 어떻게 되는가?

운나쁘게 다이얼로그 같으면 안바뀔것이고 어떤 경우엔 사이즈가 바뀌어도 컨텐츠 모양은 그대로다.
대부분의 경우는 잘 리사이즈 된다.
문제는 대부분의 Toolkit들이 좌표에 기반한다는 점이다.
툴킷 개발자들은 그래서 이런것 때문에 box, autofill등을 제공하지만 개발자들은 잘 안쓰고 그냥 고정해버리려고 한다.

Edje는 상대좌표를 허락한다.

만약 네가 위아래 긴컨텐츠와 위아래 스크롤가능한 삼각형이 달린 프로그램을 만든다고 해보자.
각 축으로 0.0부터 1.0안라는 상대좌표안에 위 그림처럼 배치할 수 있고 다음과 같은 Edje로 만들 수 있다.
핵심은 rel1에서 rel2까지로 이루어진 사각형을 만든다는 것이고, 나머지는 이해할 수 있을 것이다.


Edje as Animation/Effects Library

<중략:메리의 삽질기>

단순한 애니메이션을 위해 엄청나게 코딩을 했다.

그러나 코드양 뿐 아니라 만약 20frame으로 300px를 움직이도록 하는 애니메이션을 위해 우리는 좌표 계산을 할 수 밖에 없다. 화면 사이즈가 바뀌거나 하는 것도 문제가 되기 때문이다.

이미 그래픽툴을 써봤다면 키프레임이라는 것을 알것이다. A와 B 위치를 가진 키프레임을 만들고 컴퓨터가 나머지 부분에 대해 transition을 바탕으로 생성하는 것이다.

고생하는 메리의 모습을 본 조(이전 챕터에서 이미 EFL을 경험한)가 도와줘서 다음과 같이 만들었다.

}

앞에서 말한 A 는 default라는 상태로, B는 finish라는 상태로 표현함을 알 수 있다.
Program 브럭에서 이 애니메이션을 완성했는데, ball이라는 타겟이 show라는 시그날을 받으면 LINEAR하게 5.0초간 finish 상태로 움직이게 된다.

또, 20frame을 얻기 위해 코드에 단지 값을 넣을뿐 추가적인 계산은 하지 않는다. 윈도우 크기가 변해도 relative이므로 움직임이 자유롭다.

그러나 만약 정말로 300px을 움직이고 싶다면 relative대신 offset에 해당 픽셀만큼을 적어주면 된다.(예제 생략)

Edje as an IDL

EFL의 API는 쓰지 않고 앞의 예제들을 보여주었다.
물론 앞의 코드는 실제 Edje코드이고 약간의 블럭이 빠져 위의 코드만으로 프로그램이 되진 않겠지만 프로그래머가 의도적으로 써야 하는 전부라고 할 수 있다.

너는 Edje가 그래픽 인터페이스를 기술함을 알 수 있다. 인터페이스가 어떻게 생겼고, 무엇을 하고 어떻게 하는지를 기록하고 있다.

이 컨셉을 이미 모질라의 XUL, MS의 XAML같은데서 쓰인 것이다. Edje만 XML이 아니다.

Edje as Logic and Appearance separator


<많이 중략:업데이트 필요>

네가 만든 C 코드는 Canvas의 초기화와 edje_file_load("my_UI.edj")과 같이 edj를 지정하는 부분만 있으면 된다.



Edje as a Theming Framework

반응형

'Open Source > EFL' 카테고리의 다른 글

[EFL] 3. Simple Application using Evas.  (0) 2011.03.16
[EFL/Eina] eina_unicode 예제.  (0) 2011.03.09
eina_tiler vs cairo_region  (0) 2010.09.10
[EFL] 소스 코드를 받는 법  (0) 2010.03.18
EFL 관련 사이트  (0) 2009.08.28