From 0e8a8586c28e175d4cc080e4a49a872fb376a4b1 Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Thu, 19 Aug 2010 18:53:50 +0900 Subject: [PATCH] [elm_webview]modify auto_fitting api --- src/lib/Elementary.h.in | 4 +-- src/lib/elm_webview.c | 18 ++++++++---- src/lib/els_webview.c | 76 ++++++++++++++++++++++++------------------------- 3 files changed, 52 insertions(+), 46 deletions(-) diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 50fcb3b..98b8dec 100755 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -2515,8 +2515,8 @@ extern "C" { EAPI Evas_Object *elm_webview_webkit_get(Evas_Object *obj); EAPI void elm_webview_events_feed_set(Evas_Object *obj, Eina_Bool feed); EAPI Eina_Bool elm_webview_events_feed_get(Evas_Object *obj); - EAPI void elm_webview_auto_fitting_set(Eina_Bool enable); - EAPI Eina_Bool elm_webview_auto_fitting_get(); + EAPI void elm_webview_auto_fitting_set(Evas_Object *obj, Eina_Bool enable); + EAPI Eina_Bool elm_webview_auto_fitting_get(Evas_Object *obj); EAPI Evas_Object *elm_webview_minimap_get(Evas_Object *obj); EAPI void elm_webview_uri_set(Evas_Object *obj, const char *uri); EAPI void elm_webview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce); diff --git a/src/lib/elm_webview.c b/src/lib/elm_webview.c index 7948791..2b038fa 100644 --- a/src/lib/elm_webview.c +++ b/src/lib/elm_webview.c @@ -16,7 +16,6 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { Evas_Object *webkit; - Eina_Bool auto_fitting:1; }; static const char *widtype = NULL; @@ -129,20 +128,27 @@ elm_webview_events_feed_get(Evas_Object *obj) } EAPI void -elm_webview_auto_fitting_set(Eina_Bool enable) +elm_webview_auto_fitting_set(Evas_Object *obj, Eina_Bool enable) { + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + _elm_smart_webview_auto_fitting_set(wd->webkit, enable); } EAPI Eina_Bool -elm_webview_auto_fitting_get() +elm_webview_auto_fitting_get(Evas_Object *obj) { - return EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return EINA_FALSE; + return _elm_smart_webview_auto_fitting_get(wd->webkit); } EAPI Evas_Object * elm_webview_minimap_get(Evas_Object *obj) { - return NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return EINA_FALSE; + return _elm_smart_webview_minimap_get(wd->webkit); } EAPI void @@ -154,7 +160,7 @@ elm_webview_uri_set(Evas_Object *obj, const char *uri) } /** - * Set bouncing behavior + * Set bouncing behavior(Not supported yet) * * When scrolling, the WebView may "bounce" when reaching an edge of contents * This is a visual way to indicate the end has been reached. This is enabled diff --git a/src/lib/els_webview.c b/src/lib/els_webview.c index b4403e9..1ebff06 100644 --- a/src/lib/els_webview.c +++ b/src/lib/els_webview.c @@ -51,6 +51,7 @@ struct _Smart_Data { int locked_dy; unsigned char bounce_horiz : 1; unsigned char bounce_vert : 1; + unsigned char auto_fitting : 1; /* ewk functions */ void (*ewk_view_theme_set)(Evas_Object *, const char *); @@ -158,7 +159,6 @@ struct _Smart_Data { int w, h; } layout; - Eina_Bool auto_fitting; Ecore_Animator* smart_zoom_animator; Evas_Point pan_s; @@ -1098,6 +1098,11 @@ _smart_cb_mouse_down(void* data, Evas_Object* webview, void* ev) sd->ewk_frame_feed_focus_in = (Eina_Bool (*)(Evas_Object *))dlsym(ewk_handle, "ewk_frame_feed_focus_in"); sd->ewk_frame_feed_focus_in(sd->ewk_view_frame_main_get(webview)); _parent_sc.mouse_down((Ewk_View_Smart_Data*)sd, &sd->mouse_down_copy); + + if (sd->bounce_horiz) + elm_widget_drag_lock_x_set(sd->widget, EINA_TRUE); + if (sd->bounce_vert) + elm_widget_drag_lock_y_set(sd->widget, EINA_TRUE); } static void @@ -1365,45 +1370,38 @@ _smart_cb_pan_by(void* data, Evas_Object* webview, void* ev) } #else Eina_Bool locked = EINA_FALSE; - if (!sd->bounce_horiz) + if (!elm_widget_drag_lock_x_get(sd->widget)) { - if (!elm_widget_drag_lock_x_get(sd->widget)) + if ((old_x + dx) >= 0 && (old_x + dx) <=content_w) + elm_widget_drag_lock_x_set(sd->widget, EINA_TRUE); + else if ((sd->locked_dx > 0 && (sd->locked_dx + dx) <= 0) + || (sd->locked_dx < 0 && (sd->locked_dx + dx) >= 0)) { - if ((old_x + dx) >= 0 && (old_x + dx) <=content_w) - elm_widget_drag_lock_x_set(sd->widget, EINA_TRUE); - else if ((sd->locked_dx > 0 && (sd->locked_dx + dx) <= 0) - || (sd->locked_dx < 0 && (sd->locked_dx + dx) >= 0)) - { - elm_widget_drag_lock_x_set(sd->widget, EINA_TRUE); - DBG("===============<< widget x lock >>\n"); - dx += sd->locked_dx; - } - else - { - sd->locked_dx += dx; - locked = EINA_TRUE; - } + elm_widget_drag_lock_x_set(sd->widget, EINA_TRUE); + DBG("===============<< widget x lock >>\n"); + dx += sd->locked_dx; + } + else + { + sd->locked_dx += dx; + locked = EINA_TRUE; } } - if (!sd->bounce_vert) + if (!elm_widget_drag_lock_y_get(sd->widget)) { - if (!elm_widget_drag_lock_y_get(sd->widget)) + if ((old_y + dy) >= 0 && (old_y + dy) <= content_h) + elm_widget_drag_lock_y_set(sd->widget, EINA_TRUE); + else if ((sd->locked_dy > 0 && (sd->locked_dy + dy) <= 0) + || (sd->locked_dy < 0 && (sd->locked_dy + dy) >= 0)) { - if ((old_y + dy) >= 0 && (old_y + dy) <= content_h) - elm_widget_drag_lock_y_set(sd->widget, EINA_TRUE); - else if ((sd->locked_dy > 0 && (sd->locked_dy + dy) <= 0) - || (sd->locked_dy < 0 && (sd->locked_dy + dy) >= 0)) - { - elm_widget_drag_lock_y_set(sd->widget, EINA_TRUE); - DBG("===============<< widget y lock >>\n"); - dy += sd->locked_dy; - - } - else - { - sd->locked_dy += dy; - locked = EINA_TRUE; - } + elm_widget_drag_lock_y_set(sd->widget, EINA_TRUE); + DBG("===============<< widget y lock >>\n"); + dy += sd->locked_dy; + } + else + { + sd->locked_dy += dy; + locked = EINA_TRUE; } } #endif @@ -1426,14 +1424,16 @@ _smart_cb_pan_by(void* data, Evas_Object* webview, void* ev) if (sd->text_selection_on == EINA_TRUE) _text_selection_move_by(sd, old_x - new_x, old_y - new_y); - if (dx && elm_widget_drag_lock_x_get(sd->widget) && (old_x == new_x)) + if (!sd->bounce_horiz && + (dx && elm_widget_drag_lock_x_get(sd->widget) && (old_x == new_x))) { sd->locked_dx = dx - (old_x - new_x); elm_widget_drag_lock_x_set(sd->widget, EINA_FALSE); DBG("===============<< widget x unlock >>\n"); } - if (dy && elm_widget_drag_lock_y_get(sd->widget) && (old_y == new_y)) + if (!sd->bounce_vert && + (dy && elm_widget_drag_lock_y_get(sd->widget) && (old_y == new_y))) { sd->locked_dy = dy - (old_y - new_y); elm_widget_drag_lock_y_set(sd->widget, EINA_FALSE); @@ -1485,13 +1485,13 @@ _smart_cb_pan_stop(void* data, Evas_Object* webview, void* ev) sd->ewk_view_resume_request = (Eina_Bool (*)(Evas_Object *))dlsym(ewk_handle, "ewk_view_resume_request"); sd->ewk_view_resume_request(webview); // resume network loading - if (elm_widget_drag_lock_x_get(sd->widget)) + if (!sd->bounce_horiz && elm_widget_drag_lock_x_get(sd->widget)) { DBG("==============<< widget x unlock >>\n"); elm_widget_drag_lock_x_set(sd->widget, EINA_FALSE); } - if (elm_widget_drag_lock_y_get(sd->widget)) + if (!sd->bounce_vert && elm_widget_drag_lock_y_get(sd->widget)) { DBG("==============<< widget y unlock >>\n"); elm_widget_drag_lock_y_set(sd->widget, EINA_FALSE); -- 2.7.4