From cac5eb64628b4b70b81dfc44f659996bb2763e3b Mon Sep 17 00:00:00 2001 From: ryuan Date: Thu, 22 Jul 2010 21:02:07 +0900 Subject: [PATCH] [elm_webview] commit initial elm_webview(default: no) --- configure.ac | 31 ++++++++++++++ src/bin/Makefile.am | 9 ++-- src/bin/test.c | 6 +++ src/bin/test_webview.c | 34 +++++++++++++++ src/lib/Elementary.h.in | 4 ++ src/lib/Makefile.am | 7 +++- src/lib/elm_priv.h | 1 + src/lib/elm_webview.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/els_webview.c | 29 +++++++++++++ src/lib/els_webview.h | 1 + 10 files changed, 223 insertions(+), 6 deletions(-) create mode 100644 src/bin/test_webview.c create mode 100644 src/lib/elm_webview.c create mode 100644 src/lib/els_webview.c create mode 100644 src/lib/els_webview.h diff --git a/configure.ac b/configure.ac index 608647f..7913f53 100755 --- a/configure.ac +++ b/configure.ac @@ -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" diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 933e5fe..624ffaf 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -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 diff --git a/src/bin/test.c b/src/bin/test.c index bd9806d..ae1586e 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -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 index 0000000..96ba777 --- /dev/null +++ b/src/bin/test_webview.c @@ -0,0 +1,34 @@ +#include +#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 diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index d2430b8..94056f1 100755 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -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 diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 695165d..af2418c 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -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 = diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h index e71abbe..272703d 100644 --- a/src/lib/elm_priv.h +++ b/src/lib/elm_priv.h @@ -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 index 0000000..f6b6843 --- /dev/null +++ b/src/lib/elm_webview.c @@ -0,0 +1,107 @@ +#include +#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 index 0000000..9e2cbbc --- /dev/null +++ b/src/lib/els_webview.c @@ -0,0 +1,29 @@ +#include +#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 index 0000000..a680640 --- /dev/null +++ b/src/lib/els_webview.h @@ -0,0 +1 @@ +Evas_Object* _els_webview_add(Evas_Object *parent, Eina_Bool tiled); -- 2.7.4