Arc Label (lv_arclabel)¶
Overview¶
The Arc Label is a specialized widget designed to display text along an arc. It allows for flexible text placement and styling, making it suitable for applications where text needs to follow a curved path, such as in gauges, dials, or custom interfaces. The widget supports various configurations, including text alignment, direction, radius adjustment, and color customization.
Parts and Styles¶
LV_PART_MAIN
Represents the main part of the Arc Label, including the arc path and the text rendered along it. The appearance of the text and the arc can be customized using typical text and background style properties.
Usage¶
Text Management¶
Text can be set using lv_arclabel_set_text(arclabel, "Your text").
For formatted text, use lv_arclabel_set_text_fmt(arclabel, "Formatted %s", "text").
Static text can be set with lv_arclabel_set_text_static(arclabel, static_text), which avoids dynamic memory allocation.
Angle Configuration¶
Set the starting angle of the arc with lv_arclabel_set_angle_start(arclabel, angle).
Define the arc size (angular span) using lv_arclabel_set_angle_size(arclabel, size).
Angles are measured in degrees, starting from the positive x-axis (3 o'clock position) and increasing clockwise.
Direction¶
Specify the text direction along the arc using lv_arclabel_set_dir(arclabel, LV_ARCLABEL_DIR_CLOCKWISE) or lv_arclabel_set_dir(arclabel, LV_ARCLABEL_DIR_COUNTERCLOCKWISE).
LV_ARCLABEL_DIR_CLOCKWISE
Text flows in a clockwise direction along the arc.LV_ARCLABEL_DIR_COUNTERCLOCKWISE
Text flows in a counter-clockwise direction along the arc.
Alignment¶
Adjust vertical text alignment with lv_arclabel_set_text_vertical_align(arclabel, LV_ARCLABEL_TEXT_ALIGN_CENTER). Set horizontal alignment using lv_arclabel_set_text_horizontal_align(arclabel, LV_ARCLABEL_TEXT_ALIGN_CENTER).
Both vertical and horizontal use the same logic.
LV_ARCLABEL_TEXT_ALIGN_DEFAULT
Uses the default alignment.LV_ARCLABEL_TEXT_ALIGN_LEADING
Aligns text to the leading edge of the arc.LV_ARCLABEL_TEXT_ALIGN_CENTER
Centers text along the arc.LV_ARCLABEL_TEXT_ALIGN_TRAILING
Aligns text to the trailing edge of the arc.
Radius and Center Offset¶
Set the radius of the arc with lv_arclabel_set_radius(arclabel, radius).
Adjust the center offset of the arc using lv_arclabel_set_center_offset_x(arclabel, x) and lv_arclabel_set_center_offset_y(arclabel, y).
Color and Recoloring¶
Enable text recoloring with lv_arclabel_set_recolor(arclabel, true). This allows parts of the text to be colored differently using color commands embedded in the text string.
Interactive Behavior¶
By default, Arc Label is not clickable. To make it interactive, you would need to add custom event handling, as it does not inherit clickability by default.
Events¶
The Arc Label primarily inherits events from the base object class. It does not define specific events beyond those common to all widgets. You can attach custom event handlers to respond to interactions if needed.
Keys¶
The Arc Label does not define specific key bindings beyond those inherited from the base object class. Keyboard navigation and interaction would require additional implementation.
Example¶
Simple Arc Label¶
C code
View on GitHub#include "../../lv_examples.h"
#if LV_USE_ARCLABEL && LV_BUILD_EXAMPLES
static const char * ARCLABEL_TEXT =
"I'm on an #FA7C45 ARC#! Centered with #12c2E9 C##8B68E8 O##c471ed L##B654E5 O##C84AB2 R##DB417A F##f64659 U##ff8888 L# feature!\n";
void lv_example_arclabel_1(void)
{
lv_obj_t * arclabel_inner = NULL;
lv_obj_t * arclabel_outer = NULL;
lv_obj_t * arclabel_slogan_1 = NULL;
lv_obj_t * arclabel_slogan_2 = NULL;
lv_obj_set_style_bg_color(lv_screen_active(), lv_color_black(), LV_PART_MAIN);
arclabel_inner = lv_arclabel_create(lv_screen_active());
lv_obj_set_size(arclabel_inner, 200, 200);
lv_obj_set_style_text_color(arclabel_inner, lv_color_white(), LV_PART_MAIN);
lv_arclabel_set_text_static(arclabel_inner, ARCLABEL_TEXT);
lv_arclabel_set_angle_start(arclabel_inner, 180);
lv_arclabel_set_radius(arclabel_inner, LV_PCT(80));
lv_arclabel_set_recolor(arclabel_inner, true);
lv_arclabel_set_text_vertical_align(arclabel_inner, LV_ARCLABEL_TEXT_ALIGN_TRAILING);
lv_arclabel_set_dir(arclabel_inner, LV_ARCLABEL_DIR_COUNTER_CLOCKWISE);
lv_arclabel_set_text_horizontal_align(arclabel_inner, LV_ARCLABEL_TEXT_ALIGN_CENTER);
lv_obj_center(arclabel_inner);
arclabel_outer = lv_arclabel_create(lv_screen_active());
lv_obj_set_size(arclabel_outer, 200, 200);
lv_obj_set_style_text_letter_space(arclabel_outer, 2, LV_PART_MAIN);
lv_obj_set_style_text_color(arclabel_outer, lv_color_hex(0x888888), LV_PART_MAIN);
lv_arclabel_set_angle_start(arclabel_outer, -180);
lv_arclabel_set_text_static(arclabel_outer, ARCLABEL_TEXT);
lv_arclabel_set_radius(arclabel_outer, LV_PCT(100));
lv_arclabel_set_recolor(arclabel_outer, true);
lv_arclabel_set_text_vertical_align(arclabel_outer, LV_ARCLABEL_TEXT_ALIGN_LEADING);
lv_arclabel_set_dir(arclabel_outer, LV_ARCLABEL_DIR_CLOCKWISE);
lv_arclabel_set_text_horizontal_align(arclabel_outer, LV_ARCLABEL_TEXT_ALIGN_CENTER);
lv_obj_center(arclabel_outer);
arclabel_slogan_1 = lv_arclabel_create(lv_screen_active());
lv_obj_set_size(arclabel_slogan_1, 300, 200);
lv_obj_set_style_text_letter_space(arclabel_slogan_1, 2, LV_PART_MAIN);
lv_obj_set_style_text_color(arclabel_slogan_1, lv_palette_main(LV_PALETTE_AMBER), LV_PART_MAIN);
lv_arclabel_set_text_static(arclabel_slogan_1, "STAY HUNGRY");
lv_arclabel_set_offset(arclabel_slogan_1, 30);
lv_arclabel_set_radius(arclabel_slogan_1, 150);
lv_arclabel_set_recolor(arclabel_slogan_1, true);
lv_arclabel_set_text_vertical_align(arclabel_slogan_1, LV_ARCLABEL_TEXT_ALIGN_TRAILING);
lv_arclabel_set_text_horizontal_align(arclabel_slogan_1, LV_ARCLABEL_TEXT_ALIGN_CENTER);
lv_arclabel_set_dir(arclabel_slogan_1, LV_ARCLABEL_DIR_COUNTER_CLOCKWISE);
lv_obj_center(arclabel_slogan_1);
arclabel_slogan_2 = lv_arclabel_create(lv_screen_active());
lv_obj_set_size(arclabel_slogan_2, 300, 200);
lv_obj_set_style_text_letter_space(arclabel_slogan_2, 2, LV_PART_MAIN);
lv_obj_set_style_text_color(arclabel_slogan_2, lv_palette_main(LV_PALETTE_AMBER), LV_PART_MAIN);
lv_arclabel_set_text_static(arclabel_slogan_2, "STAY FOOLISH");
lv_arclabel_set_offset(arclabel_slogan_2, 30);
lv_arclabel_set_radius(arclabel_slogan_2, 150);
lv_arclabel_set_angle_start(arclabel_slogan_2, 180);
lv_arclabel_set_recolor(arclabel_slogan_2, true);
lv_arclabel_set_text_vertical_align(arclabel_slogan_2, LV_ARCLABEL_TEXT_ALIGN_TRAILING);
lv_arclabel_set_text_horizontal_align(arclabel_slogan_2, LV_ARCLABEL_TEXT_ALIGN_CENTER);
lv_arclabel_set_dir(arclabel_slogan_2, LV_ARCLABEL_DIR_COUNTER_CLOCKWISE);
lv_obj_center(arclabel_slogan_2);
#if LV_FONT_MONTSERRAT_18
lv_obj_set_style_text_font(arclabel_inner, &lv_font_montserrat_18, LV_PART_MAIN);
lv_obj_set_style_text_font(arclabel_outer, &lv_font_montserrat_18, LV_PART_MAIN);
#endif
#if LV_FONT_MONTSERRAT_24
lv_obj_set_style_text_font(arclabel_slogan_1, &lv_font_montserrat_24, LV_PART_MAIN);
lv_obj_set_style_text_font(arclabel_slogan_2, &lv_font_montserrat_24, LV_PART_MAIN);
#endif
}
#endif
- language:
c
- description:
A simple example to demonstrate the use of an arc label.