lvgl icon indicating copy to clipboard operation
lvgl copied to clipboard

The effect of setting lv_obj_set_style_transform_scale is different from setting scale_x/scale_y separately.

Open C-Ackerman opened this issue 2 years ago • 3 comments

LVGL version

v9.0.0

What happened?

void lv_example_test(void)
{
    lv_obj_t * cont = lv_obj_create(lv_screen_active());
    lv_obj_set_size(cont, 400, 500);
    lv_obj_center(cont);
    lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);

    lv_obj_t * label = lv_label_create(cont);
    lv_obj_set_size(label, 100, 100);
    lv_label_set_text(label, "scale(0)\n");
    lv_obj_center(label);

    lv_obj_t * label1 = lv_label_create(cont);
    lv_obj_set_size(label1, 100, 100);
    lv_label_set_text(label1, "scale(0.5)\n");
    lv_obj_set_style_transform_scale(label1, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label1);

    lv_obj_t * label2 = lv_label_create(cont);
    lv_obj_set_size(label2, 100, 100);
    lv_label_set_text(label2, "scalex(0.5)\n");
    lv_obj_set_style_transform_scale_x(label2, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label2);

    lv_obj_t * label3 = lv_label_create(cont);
    lv_obj_set_size(label3, 100, 100);
    lv_label_set_text(label3, "scaley(0.5)\n");
    lv_obj_set_style_transform_scale_y(label3, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label3);

}

image

The effect of setting lv_obj_set_style_transform_scale is different from setting scale_x/scale_y separately. As shown in the figure, setting scale_y separately is stretched, and scale_x is also a bit stretched.

How to reproduce?

No response

C-Ackerman avatar Feb 26 '24 03:02 C-Ackerman

It seems something in not consistent between the code and the image:

  • in the code there is no border set
  • the widget size is set to 100x100, so a square, but even the first widget is a rectangle

Could you check it?

kisvegabor avatar Feb 28 '24 08:02 kisvegabor

Sorry, this picture is the effect of the example code. The stretching effect is the same as that of adding a border.

image

C-Ackerman avatar Feb 28 '24 08:02 C-Ackerman

image

remove size 100×100,Setting the size does not affect the effect

void lv_example_test(void)
{
    lv_obj_t * cont = lv_obj_create(lv_screen_active());
    lv_obj_set_size(cont, 400, 500);
    lv_obj_center(cont);
    lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);

    lv_obj_t * label = lv_label_create(cont);
    // lv_obj_set_size(label, 100, 100);
    lv_label_set_text(label, "scale(0)\n");
    lv_obj_center(label);

    lv_obj_t * label1 = lv_label_create(cont);
    // lv_obj_set_size(label1, 100, 100);
    lv_label_set_text(label1, "scale(0)\n");
    lv_obj_set_style_transform_scale(label1, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label1);

    lv_obj_t * label2 = lv_label_create(cont);
    // lv_obj_set_size(label2, 100, 100);
    lv_label_set_text(label2, "scale(0)\n");
    lv_obj_set_style_transform_scale_x(label2, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label2);

    lv_obj_t * label3 = lv_label_create(cont);
    // lv_obj_set_size(label3, 100, 100);
    lv_label_set_text(label3, "scale(0)\n");
    lv_obj_set_style_transform_scale_y(label3, (0.5 * LV_ZOOM_NONE), LV_PART_MAIN);
    lv_obj_center(label3);

}

C-Ackerman avatar Feb 28 '24 09:02 C-Ackerman

It seems correct to me. What the actual issue is?

kisvegabor avatar Mar 03 '24 17:03 kisvegabor

Sorry, I was wrong

C-Ackerman avatar Mar 04 '24 02:03 C-Ackerman