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)

-- 


Reply via email to