rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=c0a64690c48f9633060cc2c3b4fa2c5024f76d4e
commit c0a64690c48f9633060cc2c3b4fa2c5024f76d4e Author: Vyacheslav Reutskiy <v.reuts...@samsung.com> Date: Thu Mar 24 15:47:38 2016 +0200 workspace: use controls for change workspace zoom Change-Id: I898953689a45e91a5afbf6afdd017573b85e4f08 --- src/bin/ui/workspace/workspace.c | 87 +++++++++++++++++++++++++++++++++------- src/bin/ui/workspace/workspace.h | 4 +- 2 files changed, 74 insertions(+), 17 deletions(-) diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c index 771aa8f..f3b9427 100644 --- a/src/bin/ui/workspace/workspace.c +++ b/src/bin/ui/workspace/workspace.c @@ -69,6 +69,7 @@ struct _Scroll_Area { Evas_Object *content; /* for normal mode - groupview, for demo - elm widget */ Ruler ruler_v; Ruler ruler_h; + int w, h; /* the container size with zoom factor 1.0, calculated if aoom factor is not 1.0 */ }; typedef struct _Scroll_Area Scroll_Area; @@ -113,23 +114,12 @@ struct _Workspace_Data } code; Workspace_Mode mode; Group *group; + double zoom_factor; }; typedef struct _Workspace_Data Workspace_Data; Eina_Bool -workspace_zoom_factor_set(Evas_Object *obj __UNUSED__, double factor __UNUSED__) -{ - return false; -} - -double -workspace_zoom_factor_get(Evas_Object *obj __UNUSED__) -{ - return -1.0; -} - -Eina_Bool workspace_highlight_unset(Evas_Object *obj __UNUSED__) { return false; @@ -278,6 +268,49 @@ _on_project_changed(void *data, /******************************************************************************/ static void +_members_zoom_set(Workspace_Data *wd) +{ + Scroll_Area *area; + + DBG("Set the zoom factor %f in tab '%s'", wd->zoom_factor * 100, wd->group->name); + area = _scroll_area_get(wd); + + container_zoom_factor_set(area->container, wd->zoom_factor); + groupview_zoom_factor_set(area->content, wd->zoom_factor); + + ewe_ruler_step_set(area->ruler_h.obj, NULL, (int)(50 * wd->zoom_factor)); + ewe_ruler_step_set(area->ruler_v.obj, NULL, (int)(50 * wd->zoom_factor)); + + Eina_Stringshare *str = eina_stringshare_printf("%d%%", (int)(wd->zoom_factor * 100)); + elm_object_text_set(wd->toolbar.zoom.slider, str); + eina_stringshare_del(str); +} + +static void +_zoom100_cb(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Workspace_Data *wd = data; + + wd->zoom_factor = 1.0; + elm_slider_value_set(wd->toolbar.zoom.slider, 100); + + _members_zoom_set(wd); +} + +static void +_slider_zoom_cb(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Workspace_Data *wd = data; + + wd->zoom_factor = elm_slider_value_get(wd->toolbar.zoom.slider) / 100; + _members_zoom_set(wd); +} + +static void _zoom_controls_add(Workspace_Data *wd) { Elm_Object_Item *tb_it; @@ -289,10 +322,15 @@ _zoom_controls_add(Workspace_Data *wd) wd->toolbar.zoom.z100 = elm_button_add(wd->toolbar.obj); elm_object_text_set(wd->toolbar.zoom.z100, _("100%")); + evas_object_smart_callback_add(wd->toolbar.zoom.z100, "clicked", _zoom100_cb, wd); tb_it = elm_toolbar_item_append(wd->toolbar.obj, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, NULL, wd->toolbar.zoom.z100); wd->toolbar.zoom.slider = elm_slider_add(wd->toolbar.obj); + elm_slider_min_max_set(wd->toolbar.zoom.slider, 10.0, 1000.0); + elm_slider_value_set(wd->toolbar.zoom.slider, 100); + elm_slider_indicator_show_set(wd->toolbar.zoom.slider, true); + evas_object_smart_callback_add(wd->toolbar.zoom.slider, "changed", _slider_zoom_cb, wd); IMAGE_ADD_NEW(wd->toolbar.zoom.slider, img, "icon", "scale_smaller") elm_object_part_content_set(wd->toolbar.zoom.slider, "elm.swallow.icon", img); IMAGE_ADD_NEW(wd->toolbar.zoom.slider, img, "icon", "scale_larger") @@ -447,6 +485,9 @@ _container_changed(void *data, area = _scroll_area_get(wd); assert(area != NULL); + area->w = geom->w; + area->h = geom->h; + evas_object_geometry_get(area->ruler_h.obj, &x, NULL, NULL, NULL); evas_object_geometry_get(area->ruler_v.obj, NULL, &y, NULL, NULL); @@ -466,8 +507,8 @@ _container_changed(void *data, ewe_ruler_step_set(area->ruler_v.obj, area->ruler_v.scale_rel, (geom->h / 2)); } - elm_spinner_value_set(wd->toolbar.container_sizer.spinner_w, geom->w); - elm_spinner_value_set(wd->toolbar.container_sizer.spinner_h, geom->h); + elm_spinner_value_set(wd->toolbar.container_sizer.spinner_w, area->w); + elm_spinner_value_set(wd->toolbar.container_sizer.spinner_h, area->h); } static void @@ -759,6 +800,7 @@ workspace_add(Evas_Object *parent, Group *group) elm_layout_content_set(wd->toolbar.layout, "elm.swallow.toolbar", wd->toolbar.obj); /* add to toolbar the zoom controls */ + wd->zoom_factor = 1.0; _zoom_controls_add(wd); /* add to toolbar modes switcher */ @@ -1112,3 +1154,20 @@ workspace_delete_request(Evas_Object *obj) group_navigator_delete_request(wd->group_navi); } + +void +workspace_zoom_factor_set(Evas_Object *obj, double factor) +{ + WS_DATA_GET(obj); + + wd->zoom_factor = factor; + elm_slider_value_set(wd->toolbar.zoom.slider, factor * 100); +} + +double +workspace_zoom_factor_get(Evas_Object *obj) +{ + WS_DATA_GET(obj); + + return wd->zoom_factor; +} diff --git a/src/bin/ui/workspace/workspace.h b/src/bin/ui/workspace/workspace.h index 05c0e32..30eaf1e 100644 --- a/src/bin/ui/workspace/workspace.h +++ b/src/bin/ui/workspace/workspace.h @@ -224,11 +224,9 @@ workspace_part_item_restack(Evas_Object *obj, * @param factor A factor for scale. Where value 1.0 = 100% scale (not zoom * object). Minimum is 0.01, maximum is 20. (from 1% to 2000% zoom). * - * @return EINA_FALSE on failure, EINA_TRUE on success. - * * @ingroup Workspace */ -Eina_Bool +void workspace_zoom_factor_set(Evas_Object *obj, double factor); /** --