[elm_webview] commit initial elm_webview(default: no)
authorryuan <ryuan@ryuan-desktop.(none)>
Thu, 22 Jul 2010 12:02:07 +0000 (21:02 +0900)
committerryuan <ryuan@ryuan-desktop.(none)>
Thu, 22 Jul 2010 12:02:07 +0000 (21:02 +0900)
configure.ac
src/bin/Makefile.am
src/bin/test.c
src/bin/test_webview.c [new file with mode: 0644]
src/lib/Elementary.h.in
src/lib/Makefile.am
src/lib/elm_priv.h
src/lib/elm_webview.c [new file with mode: 0644]
src/lib/els_webview.c [new file with mode: 0644]
src/lib/els_webview.h [new file with mode: 0644]

index 608647f..7913f53 100755 (executable)
@@ -392,6 +392,37 @@ if test "x$want_elementary_eweather" = "xyes" -a "x$have_elementary_eweather" =
 fi
 AC_SUBST(ELM_EWEATHER_DEF)
 
+ELM_EWEBKIT_DEF="#undef"
+have_elementary_ewebkit="no"
+want_elementary_ewebkit="no"
+AC_ARG_ENABLE([ewebkit],
+   [AC_HELP_STRING([--disable-ewebkit], [disable ewebkit support. @<:@default=detect@:>@])],
+   [want_elementary_ewebkit=$enableval], [])
+
+if test "x$want_elementary_ewebkit" != "xno"; then
+    PKG_CHECK_MODULES([ELEMENTARY_EWEBKIT],
+       [
+        glib-2.0
+        gobject-2.0
+        gthread-2.0
+       ],
+       [
+        AC_DEFINE(HAVE_ELEMENTARY_EWEBKIT, 1, [EWebKit support for Elementary])
+        have_elementary_ewebkit="yes"
+        ELM_EWEBKIT_DEF="#define"
+        requirement_elm="ewebkit ${requirement_elm}"
+       ],
+       [have_elementary_ewebkit="no"]
+    )
+#ewebkit
+else
+    have_elementary_ewebkit="no"
+fi
+if test "x$want_elementary_ewebkit" = "xyes" -a "x$have_elementary_ewebkit" = "xno"; then
+    AC_MSG_ERROR([EWebKit support requested, but no ewebkit found by pkg-config.])
+fi
+AC_SUBST(ELM_EWEBKIT_DEF)
+
 ELM_ETHUMB_DEF="#undef"
 have_elementary_ethumb="no"
 want_elementary_ethumb="auto"
index 933e5fe..624ffaf 100644 (file)
@@ -78,20 +78,21 @@ test_conform.c \
 test_multi.c \
 test_floating.c \
 test_launcher.c \
-test_anim.c
+test_anim.c \
+test_webview.c
 
-elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@
+elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@
 elementary_test_LDFLAGS =
 
 elementary_config_SOURCES = \
 config.c
 
-elementary_config_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@
+elementary_config_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@
 elementary_config_LDFLAGS =
 
 if BUILD_QUICKLAUNCH
 elementary_quicklaunch_SOURCES = quicklaunch.c
-elementary_quicklaunch_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@
+elementary_quicklaunch_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ @ELEMENTARY_EWEBKIT_LIBS@
 elementary_quicklaunch_LDFLAGS =
 
 if BUILD_RUN
index bd9806d..ae1586e 100644 (file)
@@ -75,6 +75,9 @@ void test_floating(void *data, Evas_Object *obj, void *event_info);
 void test_launcher(void *data, Evas_Object *obj, void *event_info);
 void test_launcher2(void *data, Evas_Object *obj, void *event_info);
 void test_anim(void *data, Evas_Object *obj, void *event_info);
+#ifdef ELM_EWEBKIT
+void test_webkit(void *data, Evas_Object *obj, void *event_info);
+#endif
 
 
 struct elm_test
@@ -270,6 +273,9 @@ my_win_main(void)
    ADD_TEST("Launcher", test_launcher);
    ADD_TEST("Launcher 2", test_launcher2);
    ADD_TEST("Animation", test_anim);
+#ifdef ELM_EWEBKIT
+   ADD_TEST("WebKit", test_webkit);
+#endif
 #undef ADD_TEST
 
    if (tests)
diff --git a/src/bin/test_webview.c b/src/bin/test_webview.c
new file mode 100644 (file)
index 0000000..96ba777
--- /dev/null
@@ -0,0 +1,34 @@
+#include <Elementary.h>
+#ifndef ELM_LIB_QUICKLAUNCH
+
+void
+test_webkit(void *data, Evas_Object *obj, void *event_info)
+{
+#ifdef ELM_EWEBKIT
+   Evas_Object *win, *bg, *wv, *ic;
+
+   g_type_init();
+   g_thread_init(0);
+
+   printf("#### test_webkit\n");
+   win = elm_win_add(NULL, "box-horiz", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Box Horiz");
+   elm_win_autodel_set(win, 1);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   wv = elm_webview_add(win);
+   elm_win_resize_object_add(win, wv);
+   evas_object_size_hint_weight_set(wv, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(wv);
+
+   evas_object_resize(win, 320, 300);
+
+   elm_object_focus(win);
+   evas_object_show(win);
+#endif
+}
+#endif
index d2430b8..94056f1 100755 (executable)
@@ -18,6 +18,7 @@
 @ELM_EDBUS_DEF@ ELM_EDBUS
 @ELM_EFREET_DEF@ ELM_EFREET
 @ELM_ETHUMB_DEF@ ELM_ETHUMB
+@ELM_EWEBKIT_DEF@ ELM_EWEBKIT
 @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H
 @ELM_LIBINTL_H_DEF@ ELM_LIBINTL_H
 
@@ -2477,6 +2478,9 @@ extern "C" {
    EAPI Eina_Bool    elm_dayselector_check_state_get(Evas_Object *obj, Elm_DaySelector_Day day);
    EAPI void         elm_dayselector_title_set(Evas_Object *parent, const char *title);
    
+   /* WebView */
+   EAPI Evas_Object *elm_webview_add(Evas_Object *parent);
+
 #ifdef __cplusplus
 }
 #endif
index 695165d..af2418c 100644 (file)
@@ -17,7 +17,8 @@ AM_CPPFLAGS = \
 @ELEMENTARY_WINCE_CFLAGS@ \
 @ELEMENTARY_EDBUS_CFLAGS@ \
 @ELEMENTARY_EFREET_CFLAGS@ \
-@ELEMENTARY_ETHUMB_CFLAGS@
+@ELEMENTARY_ETHUMB_CFLAGS@ \
+@ELEMENTARY_EWEBKIT_CFLAGS@
 
 if ELEMENTARY_WINDOWS_BUILD
 AM_CPPFLAGS += -DELEMENTARY_BUILD
@@ -122,6 +123,7 @@ elm_coverflow.c \
 elm_cabinet.c \
 elm_dayselector.c \
 elm_cnp_helper.c \
+elm_webview.c \
 \
 elc_anchorblock.c \
 elc_anchorview.c \
@@ -142,7 +144,8 @@ els_box.h \
 els_icon.c \
 els_icon.h \
 els_touch.c \
-els_touch.h
+els_touch.h \
+els_webview.c
 
 
 libelementary_la_CFLAGS =
index e71abbe..272703d 100644 (file)
@@ -18,6 +18,7 @@
 #include "els_box.h"
 #include "els_icon.h"
 #include "els_hor_scroller.h"
+#include "els_webview.h"
 
 // FIXME: totally disorganised. clean this up!
 // 
diff --git a/src/lib/elm_webview.c b/src/lib/elm_webview.c
new file mode 100644 (file)
index 0000000..f6b6843
--- /dev/null
@@ -0,0 +1,107 @@
+#include <Elementary.h>
+#include "elm_priv.h"
+
+/**
+ * @defgroup WebView WebView
+ * @ingroup Elementary
+ *
+ * TODO
+ */
+typedef struct _Widget_Data Widget_Data;
+
+struct _Widget_Data
+{
+   Evas_Object *webkit;
+};
+
+static const char *widtype = NULL;
+static void _del_hook(Evas_Object *obj);
+static void _sizing_eval(Evas_Object *obj);
+static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _sub_del(void *data, Evas_Object *obj, void *event_info);
+
+static void
+_del_pre_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   /*evas_object_event_callback_del_full
+        (wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
+   evas_object_box_remove_all(wd->box, 0);
+   */
+}
+
+static void
+_del_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   //_els_webview_del(wd->webkit);
+   free(wd);
+}
+
+static void
+_sizing_eval(Evas_Object *obj)
+{
+   Evas_Coord w, h;
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   printf("sizing eval : %d, %d\n", w, h);
+   //evas_object_resize(obj, w, h);
+}
+
+static void
+_changed_size_hints(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   _sizing_eval(data);
+}
+
+static void
+_sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   _sizing_eval(obj);
+}
+
+static void
+_layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
+{
+   Widget_Data *wd = data;
+   if (!wd) return;
+   //_els_box_layout(o, priv, wd->horizontal, wd->homogeneous);
+}
+/**
+ * Add a new box to the parent
+ *
+ * @param parent The parent object
+ * @return The new object or NULL if it cannot be created
+ *
+ * @ingroup Box
+ */
+EAPI Evas_Object *
+elm_webview_add(Evas_Object *parent)
+{
+#ifdef ELM_EWEBKIT
+   Evas_Object *obj;
+   Evas *e;
+   Widget_Data *wd;
+
+   wd = ELM_NEW(Widget_Data);
+   e = evas_object_evas_get(parent);
+   obj = elm_widget_add(e);
+   ELM_SET_WIDTYPE(widtype, "webview");
+   elm_widget_type_set(obj, "webview");
+   elm_widget_sub_object_add(parent, obj);
+   elm_widget_data_set(obj, wd);
+   elm_widget_del_hook_set(obj, _del_hook);
+
+   wd->webkit = _els_webview_add(obj, EINA_TRUE);
+   //TODO:evas_object_box_layout_set(wd->box, _layout, wd, NULL);
+   evas_object_event_callback_add(wd->webkit, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                                 _changed_size_hints, obj);
+   elm_widget_resize_object_set(obj, wd->webkit);
+   evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
+   printf("elm_webview_add is called\n");
+   return obj;
+#else
+   return NULL;
+#endif
+}
diff --git a/src/lib/els_webview.c b/src/lib/els_webview.c
new file mode 100644 (file)
index 0000000..9e2cbbc
--- /dev/null
@@ -0,0 +1,29 @@
+#include <Elementary.h>
+#include "elm_priv.h"
+
+Evas_Object*
+_els_webview_add(Evas_Object *parent, Eina_Bool tiled)
+{
+#ifdef ELM_EWEBKIT
+   Evas_Object *obj;
+   Evas *e;
+   int (*ewk_init)(void);
+   Evas_Object *(*ewk_view_add)(Evas *);
+   Eina_Bool (*ewk_view_uri_set)(Evas_Object *, const char *);
+
+   /*
+   ewk_init = (int (*)())dlsym(ewk_handle, "ewk_init");
+   ewk_view_add = (Evas_Object *(*)(Evas *))dlsym(ewk_handle, "ewk_view_tiled_add");
+   ewk_view_uri_set = (Eina_Bool (*)(Evas_Object *, const char *))dlsym(ewk_handle, "ewk_view_uri_set");
+
+   e = evas_object_evas_get(parent);
+   ewk_init();
+   obj = ewk_view_add(e);
+   ewk_view_uri_set(obj, "file:///a.html");
+   evas_object_show(obj);
+   */
+   return obj;
+#else
+   return NULL;
+#endif
+}
diff --git a/src/lib/els_webview.h b/src/lib/els_webview.h
new file mode 100644 (file)
index 0000000..a680640
--- /dev/null
@@ -0,0 +1 @@
+Evas_Object* _els_webview_add(Evas_Object *parent, Eina_Bool tiled);