static Eina_Bool _ewk_view_tiled_smart_zoom_set(Ewk_View_Smart_Data* smartData, float zoom, Evas_Coord centerX, Evas_Coord centerY) { Evas_Coord x, y, width, height; Eina_Bool result; result = ewk_tiled_backing_store_zoom_set(smartData->backing_store, &zoom, centerX, centerY, &x, &y); if (!result) return result; ewk_tiled_backing_store_disabled_update_set(smartData->backing_store, true); result = _parent_sc.zoom_set(smartData, zoom, centerX, centerY); ewk_frame_scroll_set(smartData->main_frame, -x, -y); ewk_frame_scroll_size_get(smartData->main_frame, &width, &height); ewk_tiled_backing_store_fix_offsets(smartData->backing_store, width, height); ewk_view_scrolls_process(smartData); evas_object_smart_calculate(smartData->backing_store); evas_object_smart_calculate(smartData->self); ewk_tiled_backing_store_disabled_update_set(smartData->backing_store, false); return result; }
static Eina_Bool _ewk_view_tiled_smart_zoom_set(Ewk_View_Smart_Data *sd, float zoom, Evas_Coord cx, Evas_Coord cy) { Evas_Coord x, y, w, h; Eina_Bool r; r = ewk_tiled_backing_store_zoom_set(sd->backing_store, &zoom, cx, cy, &x, &y); if (!r) return r; ewk_tiled_backing_store_disabled_update_set(sd->backing_store, EINA_TRUE); r = _parent_sc.zoom_set(sd, zoom, cx, cy); ewk_frame_scroll_set(sd->main_frame, -x, -y); ewk_frame_scroll_size_get(sd->main_frame, &w, &h); ewk_tiled_backing_store_fix_offsets(sd->backing_store, w, h); ewk_view_scrolls_process(sd); evas_object_smart_calculate(sd->backing_store); evas_object_smart_calculate(sd->self); ewk_tiled_backing_store_disabled_update_set(sd->backing_store, EINA_FALSE); return r; }
static void _eval(Evas_Object *obj) { Evas_Coord x, y, w, h, cvx, cvy, cvw, cvh; Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; evas_event_freeze(evas_object_evas_get(obj)); evas_object_geometry_get(obj, &x, &y, &w, &h); if (w < 1) w = 1; if (h < 1) h = 1; evas_output_viewport_get(evas_object_evas_get(obj), &cvx, &cvy, &cvw, &cvh); if ((cvw < 1) || (cvh < 1)) return; // need some fuzz value thats beyond the current viewport // for now just make it the viewport * 3 in size (so 1 vp in each direction) /* cvx -= cvw; cvy -= cvh; cvw *= 3; cvh *= 3; */ if (ELM_RECTS_INTERSECT(x, y, w, h, cvx, cvy, cvw, cvh)) { if (!wd->content) { // DBG(" + %i %i %ix%i <> %i %i %ix%i", x, y, w, h, cvx, cvy, cvw, cvh); evas_object_smart_callback_call(obj, SIG_REALIZE, NULL); if (wd->content) { if (evas_object_smart_data_get(wd->content)) evas_object_smart_calculate(wd->content); } wd->last_calc_count = evas_smart_objects_calculate_count_get(evas_object_evas_get(obj)); } } else { if (wd->content) { if (wd->last_calc_count != evas_smart_objects_calculate_count_get(evas_object_evas_get(obj))) evas_object_smart_callback_call(obj, SIG_UNREALIZE, NULL); } } evas_event_thaw(evas_object_evas_get(obj)); evas_event_thaw_eval(evas_object_evas_get(obj)); }