Coloring a line a new color redraws large part of the screen

Description

Hello!

For a project I’m working on, I’ve been implementing a GUI into an barebones embedded C project.
I’m tasked with creating an arc (not using the arc widget) of sorts, that represents information (an integer ranging from 0-9).
This arc is made up of 9 segments that are not connected and seperated by 33,3 degrees around a pivot in the center of the screen.
I’ve implemented this by simply making 9 lines, each line represents a single segment with the coordinates being known at compile-time.
Individual segments have either an “inactive” color, or their own active color.
I recolor using the lv_obj_set_style_line_color() function.

I’m happy with how it looks, but the refresh time isn’t up to par yet. I’ve checked with

#define LV_USE_REFR_DEBUG       1

to see what part of the screen is drawn and I’ve noticed that quite large parts of the screen are being redrawn when a recolor is triggered. It seems that the screen is redrawn from the top-left of the screen, all the way down to the bottom-right edge of the respective segment. In the worst case (the most bottom-right segment), this leads to almost an entire screen redraw.
I expected that only the line itself would be updated, similar to how updating the text in a label only redraws the label.

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

Renesas R7FA2L1AB with a ILI9341 display
Using the GCC 9.3.1.20200408 toolchain

What LVGL version are you using?

8.0.2

What do you want to achieve?

I want a recoloring of one of the line objects to only trigger a redraw for that line object.

What have you tried so far?

I have tried playing around with switching the parent-object, but nothing seemed to change.

Code to reproduce

Add a code snippet which can run in the simulator. It should contain only the relevant code that compiles without errors when separated from your main code base.

The coordinates are defined on a global scope in the file

//Coordinates of our assist level line segments
CONST STATIC lv_point_t GUIView_assistLinePoints[GUIVIEW_MAX_ASSIST][GUIVIEW_ASSIST_SEGMENT_POINTS] =  {
    [0] =
    {
         {63, 224}, {57, 220}, {50, 214}, {45, 208}, {40, 202}, {36, 195} //Segment 0
    },
    [1] =
    {
         {28, 179}, {25, 171}, {23, 164}, {22, 156}, {21, 148}, {22, 141} //Segment 1
    },
    [2] =
    {
         {23, 123}, {25, 115}, {27, 107}, {30, 100}, {34, 93}, {39, 86} //Segment 2
    },
    [3] =
    {
         {50, 73}, {56, 67}, {62, 62}, {69, 58}, {76, 54}, {83, 51} //Segment 3
    },

    [4] =
    {
         {100, 45}, {108, 44}, {116, 43}, {124, 43}, {132, 44}, {140, 45} //Segment 4
    },
    [5] =
    {
         {157, 51}, {164, 54}, {171, 58}, {178, 62}, {184, 67}, {190, 73} //Segment 5
    },
    [6] =
    {
         {201, 86}, {206, 93}, {210, 100}, {213, 110}, {215, 115}, {217, 123} //Segment 6
    },
    [7] =
    {
         {219, 141}, {220, 148}, {219, 156}, {218, 165}, {216, 171}, {213, 179} //Segment 7
    },
    [8] =
    {
         {205, 195}, {200, 202}, {195, 208}, {190, 214}, {183, 220}, {177, 224} //Segment 8
    },
};

Then in the setup function:

    //Declare a style for our assist level segment lines
    static lv_style_t style_line;
    lv_style_init(&style_line);
    lv_style_set_line_width(&style_line, 14);
    lv_style_set_line_color(&style_line, GUI_DEFINES_ARC_COLOR_BACKGROUND);
    lv_style_set_line_rounded(&style_line, TRUE);

    //Create the assist level segments
    for(U32BIT i = 0; i < GUIVIEW_MAX_ASSIST; i++)
    {
        GUIView_assistLines[i] = lv_line_create(GUIView_mainScreen);

        lv_line_set_points(GUIView_assistLines[i], (lv_point_t *)&GUIView_assistLinePoints[i], GUIVIEW_ASSIST_SEGMENT_POINTS);

        lv_obj_add_style(GUIView_assistLines[i], &style_line, LV_STATE_DEFAULT);
    }

And lastly, in the update function, we essentially only call the function below for our active segment.

lv_obj_set_style_line_color()

Any help would be much obliged.
Thanks!