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

Reply via email to