ryuan pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=85af615900976fc330d4c6b9e7eb13abc339d71d
commit 85af615900976fc330d4c6b9e7eb13abc339d71d Author: Ryuan Choi <[email protected]> Date: Thu Mar 13 00:41:48 2014 +0900 elm_web2: Implemented to support HTML5 fullscreen API test case : elementary_test -to webui --- src/bin/test_web.c | 29 +++++++++++++++++++++++ src/lib/elm_web2.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/src/bin/test_web.c b/src/bin/test_web.c index ca80758..d9e7cc0 100644 --- a/src/bin/test_web.c +++ b/src/bin/test_web.c @@ -394,6 +394,33 @@ _new_window_test_cb(void *data, Evas_Object *obj, void *event_info) elm_web_html_string_load(wt->web, new_window_html, NULL, NULL); } + +static void +_fullscreen_test_cb(void *data, Evas_Object *obj, void *event_info) +{ + Web_Test *wt = data; + const char *selected = elm_object_item_text_get(event_info); + const char fullscreen_html[] = "<!doctype html><body>" + "<script>" + "var launch = function(obj) {" + " var f = document.webkitFullscreenElement;" + " if (f) document.webkitExitFullscreen();" + " if (f != obj) obj.webkitRequestFullscreen();" + "}\n" + "var test_full = function() { launch(document.documentElement); }\n" + "var test_small = function() { launch(document.getElementById('box')); }\n" + "</script>" + "<input type='button' onclick='test_full();' value='request fullscreen'>" + "<div id='box' style='width:100px;height:100px;background-color:blue;' onclick='test_small();'>small box</div>" + "<input type='button' onclick='test_small();' value='request fullscreen of box'>" + "</body>"; + + printf("selected test : %s\n", selected); + elm_object_text_set(obj, selected); + + elm_web_html_string_load(wt->web, fullscreen_html, NULL, NULL); +} + static void _main_web_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -586,6 +613,8 @@ test_web_ui(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in _select_tag_test_cb, wt); elm_hoversel_item_add(hoversel, "new window", NULL, ELM_ICON_NONE, _new_window_test_cb, wt); + elm_hoversel_item_add(hoversel, "fullscreen", NULL, ELM_ICON_NONE, + _fullscreen_test_cb, wt); elm_box_pack_end(bx, hoversel); evas_object_show(hoversel); diff --git a/src/lib/elm_web2.c b/src/lib/elm_web2.c index dfaf9b9..24418e4 100644 --- a/src/lib/elm_web2.c +++ b/src/lib/elm_web2.c @@ -77,6 +77,72 @@ _view_smart_window_close(Ewk_View_Smart_Data *sd) evas_object_smart_callback_call(obj, "windows,close,request", NULL); } +static void +_fullscreen_accept(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) +{ + Evas_Object *ewk = data; + evas_object_del(evas_object_data_get(ewk, "_fullscreen_permission_popup")); +} + +static void +_fullscreen_deny(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) +{ + Evas_Object *ewk = data; + ewk_view_fullscreen_exit(ewk); + evas_object_del(evas_object_data_get(ewk, "_fullscreen_permission_popup")); +} + +static Eina_Bool +_view_smart_fullscreen_enter(Ewk_View_Smart_Data *sd, Ewk_Security_Origin *origin) +{ + Evas_Object *btn, *popup, *top; + const char *host; + char buffer[2048]; + + Evas_Object *obj = evas_object_smart_parent_get(sd->self); + + ELM_WEB_CHECK(obj) EINA_FALSE; + + top = elm_widget_top_get(obj); + elm_win_fullscreen_set(top, EINA_TRUE); + + popup = elm_popup_add(top); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + host = ewk_security_origin_host_get(origin); + snprintf(buffer, sizeof(buffer), "%s is now fullscreen.<br>Press ESC at any time to exit fullscreen,<br>Allow fullscreen?<br>", host); + elm_object_text_set(popup, buffer); + + btn = elm_button_add(popup); + elm_object_text_set(btn, "Accept"); + elm_object_part_content_set(popup, "button1", btn); + evas_object_smart_callback_add(btn, "clicked", _fullscreen_accept, sd->self); + + btn = elm_button_add(popup); + elm_object_text_set(btn, "Deny"); + elm_object_part_content_set(popup, "button2", btn); + evas_object_smart_callback_add(btn, "clicked", _fullscreen_deny, sd->self); + + evas_object_data_set(sd->self, "_fullscreen_permission_popup", popup); + evas_object_show(popup); + + return EINA_TRUE; +} + +static Eina_Bool +_view_smart_fullscreen_exit(Ewk_View_Smart_Data *sd) +{ + Evas_Object *obj = evas_object_smart_parent_get(sd->self); + + ELM_WEB_CHECK(obj) EINA_FALSE; + + Evas_Object *top = elm_widget_top_get(obj); + elm_win_fullscreen_set(top, EINA_FALSE); + + return EINA_TRUE; +} + /** * Creates a new view object given the parent. * @@ -109,6 +175,8 @@ _view_add(Evas_Object *parent) api.sc.del = _view_smart_del; api.window_create = _view_smart_window_create; api.window_close = _view_smart_window_close; + api.fullscreen_enter = _view_smart_fullscreen_enter; + api.fullscreen_exit = _view_smart_fullscreen_exit; smart = evas_smart_class_new(&api.sc); if (!smart) --
