So, I have been thinking about this problem for about a day and im having a little trouble coming up with a good solution.
There are 2 solutions that I can see:
- Create an lv_obj_t line object for each dash (This is “easy”, but seems terrible tbh)
- Draw the lines using the draw ctx and drawing them directly circumventing lv objects, I suppose if I really wanted to be special I could create a widget lv_fancy_line or some such
Am I missing a potential solution? I coded out 1 and I just hate the solution, waste of memory.
Well, Ill be damned…
In writing a base object for drawing this, im 90% through it and I see I have been wasting my time.
lv_coord_t dash_width;
lv_coord_t dash_gap;
typedef struct {
lv_color_t color;
lv_coord_t width;
lv_coord_t dash_width;
lv_coord_t dash_gap;
lv_opa_t opa;
lv_blend_mode_t blend_mode : 2;
uint8_t round_start : 1;
uint8_t round_end : 1;
uint8_t raw_end : 1; /*Do not bother with perpendicular line ending if it's not visible for any reason*/
} lv_draw_line_dsc_t;
le sigh… Well it was a good walk thru the internals of LVGL.
I really should make a post that entails Ron’s things he learned the hard way
2 Likes
Hi, @rohmer !
I’m an a master C programmer, but relatively new to LVGL. I have created my own LVGL widget and in that widget in the widget_event for event LV_EVENT_DRAW_MAIN, I prepare a drawing descriptor with a part descriptor attached particular to the part, and then call
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &part_draw_dsc);
so that client code can hook the event and modify the drawing characteristics before it actually begins. However, for a line, the LV_EVENT_DRAW_MAIN event does not call lv_event_send() with with the lv_draw_line_dsc_t object it creates. Once the line_dsc
is prepared, it only calls lv_draw_line(), which does not seem to call lv_event_send() at all – so that I can hook the event and modify the dash_width
and dash_gap
fields of the lv_draw_line_dsc_t
it passes…
So I have been spinning my wheels here for about an hour trying to figure out how you created a dashed line. Can you help me understand what I am missing please? (I am using release/8.3
branch.)
*laughing at self* Found it – buried in STYLES. It would have helped if the v8.3 documentation for LINE covered the line style properties. Ah well.