2014-02-09 14:59 GMT+01:00 nirajkr <niraj...@samsung.com>: > raster pushed a commit to branch master. > > > http://git.enlightenment.org/core/elementary.git/commit/?id=56a2c96ea7a731d6066aa7cb0964a633c5bed35c > > commit 56a2c96ea7a731d6066aa7cb0964a633c5bed35c > Author: nirajkr <niraj...@samsung.com> > Date: Sun Feb 9 22:55:38 2014 +0900 > > label : Added the API to match the speed of label to different label
> Summary: > Currently we do not set the speed of two label same > This patch fetch the information of the previous > label to set it to the next label to match the speed > of the previous label > This new API is really, really bad !!! elm_label_slide_speed_match(lb, duration, textlen); !! what you really want here is just: elm_label_slide_speed_set(lb, speed); So that you can set the same speed on every label. I vote to revert this davemds > > Reviewers: seoz, raster > > Reviewed By: raster > > CC: singh.amitesh > > Differential Revision: https://phab.enlightenment.org/D531 > --- > src/bin/test_label.c | 47 ++++++++++++++++++++++++++++++++ > src/lib/elm_label.c | 68 > +++++++++++++++++++++++++++++++++++++++++++--- > src/lib/elm_label_eo.h | 32 ++++++++++++++++++++++ > src/lib/elm_label_legacy.h | 32 ++++++++++++++++++++++ > src/lib/elm_widget_label.h | 5 ++++ > 5 files changed, 180 insertions(+), 4 deletions(-) > > diff --git a/src/bin/test_label.c b/src/bin/test_label.c > index 7e6a73d..d5e7898 100644 > --- a/src/bin/test_label.c > +++ b/src/bin/test_label.c > @@ -113,6 +113,8 @@ void > test_label2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void > *event_info EINA_UNUSED) > { > Evas_Object *win, *gd, *rect, *lb, *rd, *rdg, *sl; > + double duration; > + Evas_Coord textlen; > > win = elm_win_util_standard_add("label2", "Label 2"); > elm_win_autodel_set(win, EINA_TRUE); > @@ -212,6 +214,51 @@ test_label2(void *data EINA_UNUSED, Evas_Object *obj > EINA_UNUSED, void *event_in > elm_grid_pack(gd, sl, 5, 60, 90, 10); > evas_object_show(sl); > > + /*Test label slide speed */ > + lb = elm_label_add(win); > + elm_object_text_set(lb, "Test Label Slide Speed:"); > + elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS); > + elm_label_slide_go(lb); > + elm_grid_pack(gd, lb, 5, 70, 90, 10); > + evas_object_show(lb); > + > + rect = evas_object_rectangle_add(evas_object_evas_get(win)); > + elm_grid_pack(gd, rect, 5, 80, 90, 10); > + evas_object_color_set(rect, 255, 125, 125, 255); > + evas_object_show(rect); > + > + lb = elm_label_add(win); > + elm_object_style_set(lb, "slide_long"); > + elm_object_text_set(lb, > + "This is a label set to slide and this will" > + " test the speed of label with the below label." > + " This label has few extra char to test"); > + elm_label_slide_duration_set(lb, 8.0); > + elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS); > + elm_label_slide_go(lb); > + elm_grid_pack(gd, lb, 5, 80, 90, 10); > + evas_object_show(lb); > + > + //Get the required parameter of the previous label > + duration = elm_label_slide_duration_get(lb); > + textlen = elm_label_slide_text_length_get(lb); > + > + rect = evas_object_rectangle_add(evas_object_evas_get(win)); > + elm_grid_pack(gd, rect, 5, 90, 90, 10); > + evas_object_color_set(rect, 255, 125, 125, 255); > + evas_object_show(rect); > + > + lb = elm_label_add(win); > + elm_object_style_set(lb, "slide_long"); > + elm_object_text_set(lb, > + "This is a label set to slide and this will" > + " match the speed of the upper label."); > + elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS); > + elm_label_slide_speed_match(lb, duration, textlen); > + elm_label_slide_go(lb); > + elm_grid_pack(gd, lb, 5, 90, 90, 10); > + evas_object_show(lb); > + > evas_object_resize(win, 320, 320); > evas_object_show(win); > } > diff --git a/src/lib/elm_label.c b/src/lib/elm_label.c > index 976b186..a46badf 100644 > --- a/src/lib/elm_label.c > +++ b/src/lib/elm_label.c > @@ -78,7 +78,9 @@ static void > _label_slide_change(Evas_Object *obj) > { > Evas_Object *tb; > + Evas_Coord lw; > char *plaintxt; > + double speed; > int plainlen = 0; > > ELM_LABEL_DATA_GET(obj, sd); > @@ -138,6 +140,17 @@ _label_slide_change(Evas_Object *obj) > Edje_Message_Float_Set *msg = > alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double))); > > + evas_object_geometry_get(wd->resize_obj, > + NULL, NULL, &lw, NULL); > + if ((sd->slide_duration_recalc) && > + (lw > 0) && > + (sd->matchslide_duration > 0)) > + { > + speed = (sd->matchslide_textlen + lw) / > (sd->matchslide_duration); > + sd->slide_duration = (sd->text_formatted_length + lw) / > (speed); > + sd->slide_duration_recalc = EINA_FALSE; > + } > + > msg->count = 1; > msg->val[0] = sd->slide_duration; > > @@ -214,9 +227,10 @@ _on_label_resize(void *data, > Evas_Object *obj EINA_UNUSED, > void *event_info EINA_UNUSED) > { > - ELM_LABEL_DATA_GET(data, sd); > + ELM_LABEL_DATA_GET(data, sd); > > - if (sd->linewrap) elm_layout_sizing_eval(data); > + if (sd->slide_duration_recalc) _label_slide_change(data); > + if (sd->linewrap) elm_layout_sizing_eval(data); > } > > static int > @@ -324,6 +338,8 @@ _stringshare_key_value_replace(const char **srcstring, > static void > _elm_label_smart_text_set(Eo *obj, void *_pd, va_list *list) > { > + Evas_Object *tb; > + > Elm_Label_Smart_Data *sd = _pd; > ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); > const char *part = va_arg(*list, const char *); > @@ -341,6 +357,11 @@ _elm_label_smart_text_set(Eo *obj, void *_pd, va_list > *list) > sd->lastw = 0; > eo_do(obj, elm_obj_layout_sizing_eval()); > } > + > + tb = (Evas_Object *)edje_object_part_object_get(wd->resize_obj, > + "elm.text"); > + evas_object_textblock_size_formatted_get(tb, > &sd->text_formatted_length, NULL); > + > if (ret) *ret = int_ret; > } > > @@ -674,6 +695,41 @@ elm_label_slide_duration_get(const Evas_Object *obj) > } > > EAPI void > +elm_label_slide_speed_match(Evas_Object *obj, double duration, Evas_Coord > textlen) > +{ > + ELM_LABEL_CHECK(obj); > + eo_do(obj, elm_obj_label_slide_speed_match(duration, textlen)); > +} > + > +static void > +_slide_speed_match(Eo *obj EINA_UNUSED, void *_pd, va_list *list) > +{ > + double duration = va_arg(*list, double); > + Evas_Coord textlen = va_arg(*list, Evas_Coord); > + Elm_Label_Smart_Data *sd = _pd; > + sd->matchslide_duration = duration; > + sd->matchslide_textlen = textlen; > + sd->slide_duration_recalc = EINA_TRUE; > +} > + > +EAPI Evas_Coord > +elm_label_slide_text_length_get(const Evas_Object *obj) > +{ > + ELM_LABEL_CHECK(obj) 0; > + Evas_Coord ret = 0; > + eo_do((Eo *) obj, elm_obj_label_slide_text_length_get(&ret)); > + return ret; > +} > + > +static void > +_slide_textlen_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) > +{ > + Evas_Coord *ret = va_arg(*list, Evas_Coord *); > + Elm_Label_Smart_Data *sd = _pd; > + *ret = sd->text_formatted_length; > +} > + > +EAPI void > elm_label_slide_go(Evas_Object *obj) > { > ELM_LABEL_CHECK(obj); > @@ -743,6 +799,8 @@ _class_constructor(Eo_Class *klass) > > EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_SET), > _slide_duration_set), > > EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_GET), > _slide_duration_get), > EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_GO), > _slide_go), > + > EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_MATCH), > _slide_speed_match), > + > EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_TEXT_LENGTH_GET), > _slide_textlen_get), > EO_OP_FUNC_SENTINEL > }; > eo_class_funcs_set(klass, func_desc); > @@ -758,9 +816,11 @@ static const Eo_Op_Description op_desc[] = { > EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_ELLIPSIS_GET, "Get the > ellipsis behavior of the label."), > EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_MODE_SET, "Set slide > effect mode of label widget."), > EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_MODE_GET, "Get current > slide effect mode."), > - EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_SET, "Set the > slide duration (speed) of the label."), > - EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_GET, "Get the > slide duration(speed) of the label."), > + EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_SET, "Set the > slide duration of the label."), > + EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_GET, "Get the > slide duration of the label."), > EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_GO, "Start slide > effect."), > + EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_MATCH, "Set the > required parameter to match slide speed."), > + EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_TEXT_LENGTH_GET, "Get the > text length of the label."), > EO_OP_DESCRIPTION_SENTINEL > }; > static const Eo_Class_Description class_desc = { > diff --git a/src/lib/elm_label_eo.h b/src/lib/elm_label_eo.h > index f79cb95..efd4013 100644 > --- a/src/lib/elm_label_eo.h > +++ b/src/lib/elm_label_eo.h > @@ -22,6 +22,8 @@ enum > ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_SET, > ELM_OBJ_LABEL_SUB_ID_SLIDE_DURATION_GET, > ELM_OBJ_LABEL_SUB_ID_SLIDE_GO, > + ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_MATCH, > + ELM_OBJ_LABEL_SUB_ID_TEXT_LENGTH_GET, > ELM_OBJ_LABEL_SUB_ID_LAST > }; > > @@ -179,6 +181,36 @@ enum > * @ingroup Label > */ > #define elm_obj_label_slide_go() > ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_GO) > + > +/** > + * @def elm_obj_label_slide_speed_match > + * @since 1.9 > + * > + * @brief Set the required parameter to set the same speed of the label > + * > + * @param[in] duration > + * @param[in] textlen > + * > + * @see elm_label_slide_duration_set > + * > + * @ingroup Label > + */ > +#define elm_obj_label_slide_speed_match(duration, textlen) > ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_MATCH), > EO_TYPECHECK(double, duration), EO_TYPECHECK(Evas_Coord, textlen) > + > +/** > + * @def elm_obj_label_slide_text_length_get > + * @since 1.9 > + * > + * @brief Get the text label length > + * > + * @param[out] ret > + * > + * @see elm_object_text_set > + * > + * @ingroup Label > + */ > +#define elm_obj_label_slide_text_length_get(ret) > ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_TEXT_LENGTH_GET), > EO_TYPECHECK(Evas_Coord * , ret) > + > /** > * @} > */ > diff --git a/src/lib/elm_label_legacy.h b/src/lib/elm_label_legacy.h > index b3222b8..04cfc7e 100644 > --- a/src/lib/elm_label_legacy.h > +++ b/src/lib/elm_label_legacy.h > @@ -162,3 +162,35 @@ EAPI double > elm_label_slide_duration_get(const Evas_Object > * @ingroup Label > */ > EAPI void elm_label_slide_go(Evas_Object *obj); > + > +/** > + * @brief Set the required parameter to set the same speed of the label > + * > + * @param obj The label object > + * @param duration The duration of the previous slide label > + * @param duration The textlen of the previous slide label text > + * > + * @note If this API is called then it is not required to set the > + * duration of the label. Internally it will calcuate the duration > + * which will match the speed of the previous label. If the duration > + * is explicitly set it will override these parameters. > + * > + * @see elm_label_slide_duration_set() > + * @since 1.9 > + * > + * @ingroup Label > + */ > +EAPI void elm_label_slide_speed_match(Evas_Object > *obj, double duration, Evas_Coord textlen); > + > +/** > + * @brief Get the text length of the label > + * > + * @param obj The label object > + * @return The text length of the label > + * > + * @see elm_object_text_set() > + * @since 1.9 > + * > + * @ingroup Label > + */ > +EAPI Evas_Coord elm_label_slide_text_length_get(const > Evas_Object *obj); > diff --git a/src/lib/elm_widget_label.h b/src/lib/elm_widget_label.h > index 4e2ac72..4464e76 100644 > --- a/src/lib/elm_widget_label.h > +++ b/src/lib/elm_widget_label.h > @@ -13,13 +13,18 @@ struct _Elm_Label_Smart_Data > { > const char *format; > double slide_duration; > + double matchslide_duration; > + > Evas_Coord lastw; > Evas_Coord wrap_w; > + Evas_Coord text_formatted_length; > + Evas_Coord matchslide_textlen; > Elm_Wrap_Type linewrap; > Elm_Label_Slide_Mode slide_mode; > > Eina_Bool ellipsis : 1; > Eina_Bool slide_ellipsis : 1; > + Eina_Bool slide_duration_recalc : 1; > }; > > #define ELM_LABEL_DATA_GET(o, sd) \ > > -- > > > ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel