'ewebkit'에 해당되는 글 3건

  1. 2014.09.23 [EFL] EWebKit Extension
  2. 2014.07.30 transparent ewebkit
  3. 2013.03.25 ewebkit package 09/04/22

ewebkit (WebKit/Efl)은 최근 WebKit1 포트를 제거했습니다. 옛날 코드를 사용하지 않는다면, WebKit2만 사용이 가능한 셈입니다.


이 둘의 가장 큰 차이는 이전에 적었던 글에서도 이야기한 것처럼 단일 프로세스를 통해 실행되느냐, 멀티 프로세스 환경에서 실행되는가입니다.

따라서 사용자의 요청(예를 들어 url을 로드해라, resize해라)등은 프로세스간 통신(IPC)을 거쳐 웹 컨텐츠를 담당하는 WebProcess에게 전달됩니다.

그러나 이러한 IPC 메커니즘을 통해 처리하기 어려운 것들이 있습니다. 대표적인 것이 JavaScript binding입니다. JavaScript binding은 native 코드를 javascript interface로 컨텐츠에 추가하여 web page에서 해당 interface를 통해 native code를 수행할 수 있게 하는 방법입니다.

WebKit2에서 이러한 것들을 수행하기 위해서는 WebProcess에서 사용자의 코드들을 수행할 수 있어야 합니다.


이를 위해 Injected Bundle이라는 것을 WebKit2에서는 제공하고 있습니다.

그러나 Injected Bundle은 WebKit2의 인터페이스를 사용하고 있기 때문에, ewebkit은 이를 한단계 감싼 ewk_extension 을 제공합니다.

그림으로 보면 위와 같습니다.

EWebKit2_Extension을 쓰려고 하는 사용자는 EWebKit2_Extension을 이용하여 extension을 만들어야 합니다.

이 때, 반드시 "void ewk_extension_init(Ewk_Extension *extension)" 을 구현하여야 합니다.


또, user application 에서는 ewk_context_new_with_extensions_path()를 사용하여 자신이 작성한 extension 라이브러리의 path를 건네주어야 합니다.


ewebkit은 WebProcess를 실행(fork)할 때, WebProcess가 호출할 injected bundle, 즉 ewebkit_extension_manager의 위치와 사용자 extension의 위치를 같이 넘겨줍니다.

WebProcess는 실행 직후 ewebkit_extension_manager를 로드(dlopen)하고 extension_manager가 extension을 로드하면 extension을 쓸 준비는 끝나게 됩니다.


extension은 이후 WebProcess에 자신이 원하는 타이밍에 WebProcess로부터 콜백들을 받고 적절한 일(javascript binding같은)을 수행할 것이며, message를 이용하여 user application과 서로 통신하게 될 것입니다.


간단한 extension의 예제는 아래에 있습니다.

https://github.com/ewebkit/samples/tree/master/devs/ryuan/extensions


저작자 표시
신고

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

[EFL] EWebKit Extension  (0) 2014.09.23
transparent ewebkit  (0) 2014.07.30
Hello ewebkit?  (2) 2014.03.14
WebKit/efl 하면서 쓸 ctags 만들기  (0) 2013.12.17
Elementary Dark theme  (0) 2013.10.17
[TIZEN][EFL] 타이젠 상에서 EFL 예제 실행하기  (9) 2013.08.02
Posted by 소혼

기존 글:

Hello, ewebkit



이번에는 ewk_view에 투명한 배경을 주는 예제를 소개할까 합니다.

기존의 예제(simple.c)를 약간 수정하는 정도의 예제입니다.


먼저 투명한 배경에 대한 설명을 하겠습니다.


일반적으로 웹 페이지는 웹뷰(ewk_view)의 전체 영역에 컨텐츠를 그리게 됩니다.

웹페이지는 body 태그의 배경을 이용하여 컨텐츠의 배경색을 갖게 되는데, 보통 다음과 같이 사용합니다.

### html

<!doctype html>

<!- no background -->

<body>HELLO</body>


### html

<!doctype html>

<body bgcolor="red">Hello, I am red background</body>


### html

<!doctype html>

<head><style>body { background-color: green; } </style></head>

<body>Hello, I am green background</body>


두번째와 세번째는 배경을 갖는 예제인 반면, 첫번째는 배경을 갖지 않는 예제입니다. 그러나 만약 첫번째 예제를 브라우저에서 실행한다면 흰 배경 위에 HELLO라는 글자가 적혀 있는 것을 보게 될 것입니다.


일반적으로 거의 대부분의 브라우저들은 기본 배경을 흰색으로 제공하고 있습니다.

그래서 웹 컨텐츠를 제작하는 대부분의 분들이 배경을 지정하지 않고 있습니다.

(

하지만 만약 흰 배경을 사용하지 않는 브라우저가 나타나면 어쩌실건가요? ㅡ.ㅡ

그리고, 특정 모바일 디스플레이들은 흰색일 때 배터리 소모가 극심합니다.

)


webkit도 기본 배경을 흰색으로 정하고 있지만, 다른 색을 쓰거나, 투명하게 그릴 수 있는 방법을 제공하고 있습니다.

ewebkit에서 관련 API는 ewk_view_bg_color_set 이라는 API가 존재합니다.


### c++

/**
 * Sets the background color and transparency of the view.             
 *
 * @param o view object to change the background color
 * @param r red color component
 * @param g green color component                                          
 * @param b blue color component     
 * @param a transparency             
 */
EAPI void ewk_view_bg_color_set(Evas_Object *o, int r, int g, int b, int a);

각각의 color component들은 0 부터 255 사이의 숫자여야 합니다.


일반적으로 EFL에서는 evas_object_color_set이라는 API를 이용하여 evas object의 색을 지정했지만,

ewebkit에서는 alpha를 제외하곤 evas_object_color_set의 다른 인자들을 사실상 무시합니다.

이유는, evas_object_color_set의 alpha가 전체 컨텐츠의 opacity를 다루는 반면, ewebkit은 배경만의 opacity를 다루어야 하는 요구사항이 있기 때문입니다.

즉, evas_object_color_set은 evas_object 전체의 색을 조절하는 API로 ewebkit에서는 contents의 색은 contents가 지정해야 하기 때문에 RGB값은 무시됩니다. (현재)


ewk_view_bg_color_set 을 사용하는 예제는 아래와 같습니다.

https://github.com/ewebkit/samples/blob/master/devs/ryuan/transparent.c

### c++

// gcc transparent.cpp `pkg-config --cflags --libs elementary ewebkit2
#include <Elementary.h>
#include <EWebKit2.h>

void on_done(void *userData, Evas_Object *webView, void *eventInfo)
{
   elm_exit();
}

EAPI_MAIN int
elm_main(int argc, char *argv[])
{
   ewk_init();

   Evas_Object* win;
   win = elm_win_add(NULL, "sample", ELM_WIN_BASIC);
   elm_win_title_set(win, "sample");
   evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
   elm_win_autodel_set(win, EINA_TRUE);

   Evas_Object* bg = elm_bg_add(win);
   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   elm_bg_color_set(bg, 0, 0, 255);
   elm_win_resize_object_add(win, bg);
   evas_object_show(bg);

   Evas_Object* ewk = ewk_view_add(evas_object_evas_get(win));
   ewk_view_html_string_load(ewk, "<!doctype html><body>HELLO</body>", NULL, NULL);
   ewk_view_bg_color_set(ewk, 0, 0, 0, 0);

   evas_object_resize(ewk, 400, 400);
   evas_object_move(ewk, 0, 0);
   evas_object_show(ewk);

   evas_object_resize(win, 400, 400);
   evas_object_show(win);

   elm_run();

   ewk_shutdown();
}
ELM_MAIN()

배경 속성이 없는 web contents를 위해 url 대신 ewk_view_html_string_load를 이용했습니다.

그리고 ewk_view_bg_color_set 을 통해 ewk_view의 배경을 투명하게 만든 예제입니다.


위에서 elm_bg의 색을 blue로 했기 때문에 파란색 배경 위에 HELLO라는 글자가 적혀있어야 합니다.

만약 검은색으로 나온다면, ewebkit을 최신으로 빌드해보시기 바랍니다.

(최근 수정 :https://bugs.webkit.org/show_bug.cgi?id=135333)


추신. 현재 ewk_view_bg_color_set과 EFL 관련 버그가 하나 더 있는 것 같습니다.

만약 ewk_view_bg_color_set의 RGB요소에 값을 주고 alpha를 준 경우, elm_bg의 색과 blend되고 있습니다.

만약 투명한 웹뷰가 필요한 경우라면 RGB요소를 모두 0으로 주시기 바랍니다.

저작자 표시
신고

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

[EFL] EWebKit Extension  (0) 2014.09.23
transparent ewebkit  (0) 2014.07.30
Hello ewebkit?  (2) 2014.03.14
WebKit/efl 하면서 쓸 ctags 만들기  (0) 2013.12.17
Elementary Dark theme  (0) 2013.10.17
[TIZEN][EFL] 타이젠 상에서 EFL 예제 실행하기  (9) 2013.08.02
Posted by 소혼

WebKit/Efl (ewebkit)을 빌드하는 방법은 다음 글을 참고해주세요.

(http://bunhere.tistory.com/387)


webkit은 빌드에 너무 시간이 많이 걸려서 패키지로 만들어서 공유해두어야겠다는 생각이 들었습니다.


webkit1/efl (이하 ewebkit) 패키지와 webkit2/efl(이하 ewebkit2)를 만들기 위해 debian폴더를 만들었습니다.

git clone https://github.com/bunhere/ewebkit-debian.git


ubuntu 12.10 (64비트)를 사용하시는 경우, output 폴더 아래 패키지를 다운받아 설치해주시면 됩니다. 또는 아래 첨부 deb를 클릭하셔도 됩니다.(gdrive)


설치하는 법은 dpkg -i 파일명 입니다.

기존에 설치한 패키지를 지우려면 dpkg -r 패키지명 치시면 됩니다.

1. 아직 불완전합니다. efl, edbus, harfbuzz를 포함한 다수의 dep를 해결해주지 않습니다.

     efl 관련해서는 efl.or.kr을,   edbus, harfbuzz는 위 글을 참고하세요

2. ewebkit2 도 조만간 준비하겠습니다.

3.이 글을 계속 업데이트하도록 하겠습니다.


* 현재 ewebkit패키지와 ewebkit2 패키지는 공통의 파일(theme, resource)를 포함하고 있어, 같이 설치가 되지 않을 것입니다.

* 불편하더라도 번갈아가면서 설치하거나 강제로 설치해야 합니다.


------------- ewebkit -------------------------

r146585 (09/04/22)

libewebkit_0.1_amd64.deb

libewebkit-dev_0.1_amd64.deb

------------- ewebkit2 -------------------------

r146860 (13/03/26)

libewebkit2_0.1_amd64.deb

libewebkit2-dev_0.1_amd64.deb

저작자 표시
신고
Posted by 소혼
TAG ewebkit
이전버튼 1 이전버튼

티스토리 툴바