}
static void
-_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+_duration_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Evas_Object *lb = (Evas_Object *)data;
double val = elm_slider_value_get(obj);
+
elm_label_slide_duration_set(lb, val);
- elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS);
elm_label_slide_go(lb);
+
+ Evas_Object *sl = evas_object_data_get(lb, "speed_slider");
+ elm_slider_value_set(sl, elm_label_slide_speed_get(lb));
+}
+
+static void
+_speed_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ Evas_Object *lb = (Evas_Object *)data;
+ double val = elm_slider_value_get(obj);
+
+ elm_label_slide_speed_set(lb, val);
+ elm_label_slide_go(lb);
+
+ Evas_Object *sl = evas_object_data_get(lb, "duration_slider");
+ elm_slider_value_set(sl, elm_label_slide_duration_get(lb));
}
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;
+ Evas_Object *win, *gd, *rect, *lb, *lb1, *lb2, *rd, *rdg, *sl;
win = elm_win_util_standard_add("label2", "Label 2");
elm_win_autodel_set(win, EINA_TRUE);
/* Test Label Ellipsis */
lb = elm_label_add(win);
elm_object_text_set(lb, "Test Label Ellipsis:");
- elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS);
- elm_label_slide_go(lb);
- elm_grid_pack(gd, lb, 5, 5, 90, 10);
+ elm_grid_pack(gd, lb, 5, 0, 90, 10);
evas_object_show(lb);
rect = evas_object_rectangle_add(evas_object_evas_get(win));
- elm_grid_pack(gd, rect, 5, 15, 90, 10);
+ elm_grid_pack(gd, rect, 5, 10, 90, 10);
evas_object_color_set(rect, 255, 125, 125, 255);
evas_object_show(rect);
"at the end of the widget."
);
elm_label_ellipsis_set(lb, EINA_TRUE);
- elm_grid_pack(gd, lb, 5, 15, 90, 10);
+ elm_grid_pack(gd, lb, 5, 10, 90, 10);
evas_object_show(lb);
/* Test Label Slide */
lb = elm_label_add(win);
elm_object_text_set(lb, "Test Label Slide:");
- elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS);
- elm_label_slide_go(lb);
- elm_grid_pack(gd, lb, 5, 30, 90, 10);
+ elm_grid_pack(gd, lb, 5, 20, 90, 10);
evas_object_show(lb);
rect = evas_object_rectangle_add(evas_object_evas_get(win));
- elm_grid_pack(gd, rect, 5, 40, 90, 10);
+ elm_grid_pack(gd, rect, 5, 30, 90, 10);
evas_object_color_set(rect, 255, 125, 125, 255);
evas_object_show(rect);
"This only works with the themes \"slide_short\", "
"\"slide_long\" and \"slide_bounce\"."
);
- elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_ALWAYS);
+ elm_label_slide_mode_set(lb, ELM_LABEL_SLIDE_MODE_AUTO);
+ elm_label_slide_speed_set(lb, 40.0);
elm_label_slide_go(lb);
- elm_grid_pack(gd, lb, 5, 40, 90, 10);
+ elm_grid_pack(gd, lb, 5, 30, 90, 10);
evas_object_show(lb);
rd = elm_radio_add(win);
elm_object_text_set(rd, "slide_short");
evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_smart_callback_add(rd, "changed", _cb_size_radio_changed, lb);
- elm_grid_pack(gd, rd, 5, 50, 30, 10);
+ elm_grid_pack(gd, rd, 5, 40, 30, 10);
evas_object_show(rd);
rdg = rd;
elm_object_text_set(rd, "slide_long");
evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_smart_callback_add(rd, "changed", _cb_size_radio_changed, lb);
- elm_grid_pack(gd, rd, 35, 50, 30, 10);
+ elm_grid_pack(gd, rd, 35, 40, 30, 10);
evas_object_show(rd);
rd = elm_radio_add(win);
elm_object_text_set(rd, "slide_bounce");
evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_smart_callback_add(rd, "changed", _cb_size_radio_changed, lb);
- elm_grid_pack(gd, rd, 65, 50, 30, 10);
+ elm_grid_pack(gd, rd, 65, 40, 30, 10);
evas_object_show(rd);
sl = elm_slider_add(win);
elm_object_text_set(sl, "Slide Duration");
- elm_slider_unit_format_set(sl, "%1.1f units");
- elm_slider_min_max_set(sl, 1, 20);
- elm_slider_value_set(sl, 10);
+ elm_slider_unit_format_set(sl, "%1.1f sec");
+ elm_slider_min_max_set(sl, 3, 30);
+ elm_slider_value_set(sl, elm_label_slide_duration_get(lb));
evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_smart_callback_add(sl, "changed", _change_cb, lb);
+ evas_object_smart_callback_add(sl, "changed", _duration_change_cb, lb);
+ evas_object_data_set(lb, "duration_slider", sl);
+ elm_grid_pack(gd, sl, 5, 50, 90, 10);
+ evas_object_show(sl);
+
+ sl = elm_slider_add(win);
+ elm_object_text_set(sl, "Slide Speed");
+ elm_slider_unit_format_set(sl, "%1.1f px/sec");
+ elm_slider_min_max_set(sl, 40, 300);
+ elm_slider_value_set(sl, elm_label_slide_speed_get(lb));
+ evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+ evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_smart_callback_add(sl, "changed", _speed_change_cb, lb);
+ evas_object_data_set(lb, "speed_slider", sl);
elm_grid_pack(gd, sl, 5, 60, 90, 10);
evas_object_show(sl);
+ /* Test 2 label at the same speed */
+ lb = elm_label_add(win);
+ elm_object_text_set(lb, "Test 2 label with the same speed:");
+ 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, 20);
+ evas_object_color_set(rect, 255, 125, 125, 255);
+ evas_object_show(rect);
+
+ lb1 = elm_label_add(win);
+ elm_object_style_set(lb1, "slide_long");
+ elm_object_text_set(lb1, "This is a label set to slide with a fixed speed,"
+ " should match the speed with the below label."
+ " This label has few extra char for testing.");
+ elm_label_slide_mode_set(lb1, ELM_LABEL_SLIDE_MODE_ALWAYS);
+ elm_label_slide_speed_set(lb1, 40.0);
+ elm_label_slide_go(lb1);
+ elm_grid_pack(gd, lb1, 5, 80, 90, 10);
+ evas_object_show(lb1);
+
+ lb2 = elm_label_add(win);
+ elm_object_style_set(lb2, "slide_long");
+ elm_object_text_set(lb2, "This is a label set to slide and will"
+ " match the speed of the upper label.");
+ elm_label_slide_mode_set(lb2, ELM_LABEL_SLIDE_MODE_ALWAYS);
+ elm_label_slide_speed_set(lb2, 40.0);
+ elm_label_slide_go(lb2);
+ elm_grid_pack(gd, lb2, 5, 90, 90, 10);
+ evas_object_show(lb2);
+
evas_object_resize(win, 320, 320);
evas_object_show(win);
}
static void
_label_slide_change(Evas_Object *obj)
{
- Evas_Object *tb;
+ const Evas_Object *tb;
char *plaintxt;
int plainlen = 0;
//has slide effect.
if (sd->slide_mode != ELM_LABEL_SLIDE_MODE_NONE)
{
+ Evas_Coord w, tb_w;
+
+ tb = edje_object_part_object_get(wd->resize_obj, "elm.text");
+ evas_object_textblock_size_native_get(tb, &tb_w, NULL);
+ evas_object_geometry_get(wd->resize_obj, NULL, NULL, &w, NULL);
+
if (sd->ellipsis)
{
sd->slide_ellipsis = EINA_TRUE;
//slide only if the slide area is smaller than text width size.
if (sd->slide_mode == ELM_LABEL_SLIDE_MODE_AUTO)
{
- tb = (Evas_Object *) edje_object_part_object_get(wd->resize_obj,
- "elm.text");
- if (tb)
- {
- Evas_Coord w, tb_w;
-
- evas_object_textblock_size_formatted_get(tb, &tb_w, NULL);
- evas_object_geometry_get(wd->resize_obj,
- NULL, NULL, &w, NULL);
- if ((tb_w > 0) && (tb_w < w))
- {
- if (sd->slide_ellipsis)
- {
- sd->slide_ellipsis = EINA_FALSE;
- elm_label_ellipsis_set(obj, EINA_TRUE);
- }
- return;
- }
- }
+ if ((tb_w > 0) && (tb_w < w))
+ {
+ if (sd->slide_ellipsis)
+ {
+ sd->slide_ellipsis = EINA_FALSE;
+ elm_label_ellipsis_set(obj, EINA_TRUE);
+ }
+ return;
+ }
+ }
+
+ // calculate speed or duration
+ if (sd->use_slide_speed)
+ {
+ if (sd->slide_speed <= 0) sd->slide_speed = 1;
+ sd->slide_duration = (tb_w + w) / sd->slide_speed;
+ }
+ else
+ {
+ if (sd->slide_duration <= 0) sd->slide_duration = 1;
+ sd->slide_speed = (tb_w + w) / sd->slide_duration;
}
+
Edje_Message_Float_Set *msg =
alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
{
ELM_LABEL_DATA_GET(data, sd);
+ if (sd->slide_mode != ELM_LABEL_SLIDE_MODE_NONE) _label_slide_change(data);
if (sd->linewrap) elm_layout_sizing_eval(data);
}
double duration = va_arg(*list, double);
Elm_Label_Smart_Data *sd = _pd;
sd->slide_duration = duration;
+ sd->use_slide_speed = EINA_FALSE;
}
EAPI double
}
EAPI void
+elm_label_slide_speed_set(Evas_Object *obj, double speed)
+{
+ ELM_LABEL_CHECK(obj);
+ eo_do(obj, elm_obj_label_slide_speed_set(speed));
+}
+
+static void
+_slide_speed_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+{
+ double speed = va_arg(*list, double);
+ Elm_Label_Smart_Data *sd = _pd;
+ sd->slide_speed = speed;
+ sd->use_slide_speed = EINA_TRUE;
+}
+
+EAPI double
+elm_label_slide_speed_get(const Evas_Object *obj)
+{
+ ELM_LABEL_CHECK(obj) 0.0;
+ double ret = 0.0;
+ eo_do((Eo *) obj, elm_obj_label_slide_speed_get(&ret));
+ return ret;
+}
+
+static void
+_slide_speed_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+{
+ double *ret = va_arg(*list, double *);
+ Elm_Label_Smart_Data *sd = _pd;
+ *ret = sd->slide_speed;
+}
+
+EAPI void
elm_label_slide_go(Evas_Object *obj)
{
ELM_LABEL_CHECK(obj);
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_SET), _slide_speed_set),
+ EO_OP_FUNC(ELM_OBJ_LABEL_ID(ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_GET), _slide_speed_get),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_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_SET, "Set the slide speed of the label."),
+ EO_OP_DESCRIPTION(ELM_OBJ_LABEL_SUB_ID_SLIDE_SPEED_GET, "Get the slide speed of the label."),
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {