From 342eeb45f10a4b29e5e6e090363cb84169aca9b7 Mon Sep 17 00:00:00 2001 From: Prince Kumar Dubey Date: Thu, 8 Jul 2010 16:11:37 +0530 Subject: [PATCH] [SegmentControl] added support for variable size of segmentcontrol --- src/lib/Elementary.h.in | 1 + src/lib/elm_segment_control.c | 49 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 1190b73..d2cce29 100755 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -1246,6 +1246,7 @@ extern "C" { EAPI Evas_Object *elm_segment_control_get_segment_icon_at(Evas_Object *obj, unsigned int index); EAPI Elm_Segment_Item *elm_segment_control_selected_segment_get(const Evas_Object *obj, int *value); EAPI int elm_segment_control_get_segment_count(Evas_Object *obj); + EAPI void elm_segment_control_set_size(Evas_Object *obj, int width, int height); EAPI Evas_Object *elm_page_control_add(Evas_Object *parent); EAPI void elm_page_control_page_count_set(Evas_Object *obj, unsigned int page_count); diff --git a/src/lib/elm_segment_control.c b/src/lib/elm_segment_control.c index d3e7663..37585e2 100644 --- a/src/lib/elm_segment_control.c +++ b/src/lib/elm_segment_control.c @@ -42,7 +42,6 @@ struct _Elm_Segment_Item static void _sizing_eval(Evas_Object *obj); static void _signal_segment_on(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _sizing_eval(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); static void _item_free(Evas_Object *obj, Elm_Segment_Item *it); static void _del_hook(Evas_Object *obj); @@ -112,7 +111,7 @@ static void _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - _elm_theme_object_set(obj, obj, "segmented-control", "base", "default"); + _elm_theme_object_set(obj, obj, "segmented-control", "base", elm_widget_style_get(obj)); return; } @@ -164,6 +163,24 @@ _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) return; } +static void _object_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd; + if(!data) return; + wd = elm_widget_data_get((Evas_Object *)data); + if(!wd) return; + + Evas_Coord w = 0, h = 0; + + evas_object_geometry_get(wd->base, NULL, NULL, &w, &h); + + if(wd->item_width != w && wd->height !=h) + { + wd->item_width = wd->width = w; + wd->height = h; + } +} + /** * Add a new segmentcontrol to the parent * @param parent The parent object @@ -177,7 +194,7 @@ elm_segment_control_add(Evas_Object *parent) Evas_Object *obj; Evas *e; Widget_Data *wd; - Evas_Coord w, h, x, y; + Evas_Coord w = 0, h = 0; wd = ELM_NEW(Widget_Data); e = evas_object_evas_get(parent); @@ -198,9 +215,7 @@ elm_segment_control_add(Evas_Object *parent) edje_object_part_swallow(wd->base, "elm.swallow.content", wd->box); evas_object_show(wd->box); - edje_object_part_geometry_get(wd->base, "layout", &x, &y, &w, &h); - wd->item_width = wd->width = w; - wd->height = h; + evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _object_resize, obj); wd->id = 0; wd->del_index = 0; wd->insert_index = 0; @@ -359,7 +374,6 @@ static void _state_value_set(Evas_Object *obj) if(count > 0) wd->item_width = wd->width/count; - if(wd->ani_it) { evas_object_geometry_get(wd->ani_it->base, &x, &y, &w1, NULL); @@ -819,3 +833,24 @@ elm_segment_control_get_segment_count(Evas_Object *obj) return wd->id; } + +/** + * set the size of segmentcontrol + * @param obj The SegmentControl object + * @param width width of segment control + * @param height height of segment control + * + * @ingroup SegmentControl SegmentControl + */ + +EAPI void +elm_segment_control_set_size(Evas_Object *obj, int width, int height) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if(!wd) return 0; + + wd->item_width = wd->width = width; + wd->height = height; + + return; +} -- 2.7.4