Animation LV_LABEL_LONG_SROLL/LV_LABEL_LONG_SROLL_CIRC stop for large strings

Description

What MCU/Processor/Board and compiler are you using?

Linux PC Simulator, GCC

What do you experience?

  • Created label with long modes LV_LABEL_LONG_SROLL/LV_LABEL_LONG_SROLL_CIRC and
    very large strings (>150 chars).

  • Animation stops after 150 chars.

  • After some time the rolling text animation starts at beginning, then stops again at the same point.

What do you expect?

Texts should keep scrolling

Code to reproduce

    /* LV_LABEL_LONG_ROLL (set size and test rolling)
     * GOAL: the text is rolled in both directions*/
    lv_obj_t * label3 = lv_label_create(lv_disp_get_scr_act(NULL), NULL);
    lv_label_set_body_draw(label3, true);
    lv_obj_set_style(label3, &lv_style_plain_color);
    lv_label_set_text(label3, "1 Long line to roll! 2 Long line to roll! 3 Long line to roll! 4 Long line to roll! 5 Long line to roll! 6 Long line to roll! 7 Long line to roll! 8 Long line to roll! 9 Long line to roll! 10");
    lv_label_set_long_mode(label3, LV_LABEL_LONG_SROLL);
    //lv_obj_align(label3, label2, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
    lv_obj_set_size(label3, 100, 50);



    /* LV_LABEL_LONG_ROLL (set size and test rolling)
     * GOAL: the text is rolled circularly*/
    lv_obj_t * label4 = lv_label_create(lv_scr_act(), label3);
    lv_obj_set_style(label4, &lv_style_plain_color);
    lv_label_set_text(label4, "1 Long line to roll circularly! 2 Long line to roll circularly! 3 Long line to roll circularly! 4 Long line to roll circularly! 5 Long line to roll circularly! 6 Long line to roll circularly! 7");
//    lv_label_set_body_draw(label4, true);
    lv_label_set_long_mode(label4, LV_LABEL_LONG_SROLL_CIRC);
    lv_obj_align(label4, label3, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 20);

Screenshot and/or video

Screenshot_2020-03-04_16-27-08

Hi,

The problem is the animation is too long and it’s not handled properly in the current version. I’ll update it in dev-7.0.

Until that you can changed these 2 lines in lv_anim_t in lv_anim.h:

    uint32_t time;               /**< Animation time in ms*/
    int32_t act_time;            /**< Current time in animation. Set to negative to make delay.*/