1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00

Merge branch 'master' of github.com:littlevgl/lvgl

This commit is contained in:
Themba Dube 2021-05-07 16:56:03 -04:00
commit ac414cbb23
17 changed files with 137 additions and 71 deletions

View File

@ -1,6 +1,6 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/widgets/label.md
:github_url: |github_link_base|/widgets/core/label.md
```
# Label (lv_label)
@ -8,8 +8,7 @@
A label is the basic object type that is used to display text.
## Parts and Styles
The label has only a main part, called `LV_LABEL_PART_MAIN`. It uses all the typical background properties and the *text* properties.
The padding values can be used to make the area for the text small in the related direction.
- `LV_PART_MAIN` ut uses all the typical background properties and the text properties. The padding values can be used to add space between the text and the background.
## Usage
@ -18,61 +17,45 @@ You can set the text on a label at runtime with `lv_label_set_text(label, "New t
It will allocate a buffer dynamically, and the provided string will be copied into that buffer.
Therefore, you don't need to keep the text you pass to `lv_label_set_text` in scope after that function returns.
With `lv_label_set_text_fmt(label, "Value: %d", 15)` **printf formatting** can be used to set the text.
With `lv_label_set_text_fmt(label, "Value: %d", 15)` printf formatting can be used to set the text.
Labels are able to show text from a **static character buffer** which is `\0`-terminated.
To do so, use `lv_label_set_text_static(label, "Text")`.
Labels are able to show text from a static character buffer. To do so, use `lv_label_set_text_static(label, "Text")`.
In this case, the text is not stored in the dynamic memory and the given buffer is used directly instead.
This means that the array can't be a local variable which goes out of scope when the function exits.
Constant strings are safe to use with `lv_label_set_text_static` (except when used with `LV_LABEL_LONG_DOT`, as it modifies the buffer in-place), as they are stored in ROM memory, which is always accessible.
### New line
### Line break
Line breaks are handled automatically by the label object. You can use `\n` to make a line break. For example: `"line1\nline2\n\nline4"`
New line characters are handled automatically by the label object. You can use `\n` to make a line break. For example: `"line1\nline2\n\nline4"`
### Long modes
By default, the width of the label object automatically expands to the text size. Otherwise, the text can be manipulated according to several long mode policies:
* **LV_LABEL_LONG_EXPAND** - Expand the object size to the text size (Default)
* **LV_LABEL_LONG_BREAK** - Keep the object width, break (wrap) the too long lines and expand the object height
* **LV_LABEL_LONG_DOT** - Keep the object size, break the text and write dots in the last line (**not supported when using `lv_label_set_text_static`**)
* **LV_LABEL_LONG_SROLL** - Keep the size and scroll the label back and forth
* **LV_LABEL_LONG_SROLL_CIRC** - Keep the size and scroll the label circularly
* **LV_LABEL_LONG_CROP** - Keep the size and crop the text out of it
By default, the width and height of the label is set to `LV_SIZE_CONTENT`therefore the size of the label is automatically expands to the text size.
Otherwise, if the width or height is explicitly set (useing e.g.`lv_obj_set_width` or a layout), the lines wider than the label's width can be manipulated according to several long mode policies.
Similary, the policies can be applied if the height of the text is greater than the height of the label.
- `LV_LABEL_LONG_WRAP` Wrap too long lines. If the height is `LV_SIZE_CONTENT` the label's height will be expanded, elst the text will be clipped. (Default)
- `LV_LABEL_LONG_DOT` Replaces the last 3 characters from bottom right corner of the label with dots (`.`)
- `LV_LABEL_LONG_SCROLL` If the text is wider than the label scroll it horizontally back and forth. If it's higher, scroll vertically. Only one direction is scrolled and horizontal scrolling has higher precedence.
- `LV_LABEL_LONG_SCROLL_CIRCULAR` If the text is wider than the label scroll it horizontally continously. If it's higher, scroll vertically. Only one direction is scrolled and horizontal scrolling has higher precedence.
- `LV_LABEL_LONG_CLIP` Simply clip the parts of the text outside of the label.
You can specify the long mode with `lv_label_set_long_mode(label, LV_LABEL_LONG_...)`
It's important to note that, when a label is created and its text is set, the label's size already expanded to the text size.
In addition with the default `LV_LABEL_LONG_EXPAND`, *long mode* `lv_obj_set_width/height/size()` has no effect.
So you need to change the *long mode* first set the new *long mode* and then set the size with `lv_obj_set_width/height/size()`.
Another important note is that **`LV_LABEL_LONG_DOT` manipulates the text buffer in-place** in order to add/remove the dots.
Note that `LV_LABEL_LONG_DOT` manipulates the text buffer in-place in order to add/remove the dots.
When `lv_label_set_text` or `lv_label_set_array_text` are used, a separate buffer is allocated and this implementation detail is unnoticed.
This is not the case with `lv_label_set_text_static`! **The buffer you pass to `lv_label_set_text_static` must be writable if you plan to use `LV_LABEL_LONG_DOT`.**
### Text align
The lines of the text can be aligned to the left, right or center with `lv_label_set_align(label, LV_LABEL_ALIGN_LEFT/RIGHT/CENTER)`. Note that, it will align only the lines, not the label object itself.
Vertical alignment is not supported by the label itself; you should place the label inside a larger container and align the whole label object instead.
This is not the case with `lv_label_set_text_static`. The buffer you pass to `lv_label_set_text_static` must be writable if you plan to use `LV_LABEL_LONG_DOT`.
### Text recolor
In the text, you can use commands to recolor parts of the text. For example: `"Write a #ff0000 red# word"`.
This feature can be enabled individually for each label by `lv_label_set_recolor()` function.
Note that, recoloring work only in a single line. Therefore, `\n` should not use in a recolored text or it should be wrapped by `LV_LABEL_LONG_BREAK` else, the text in the new line won't be recolored.
### Very long texts
Lvgl can efficiently handle very long (> 40k characters) by saving some extra data (~12 bytes) to speed up drawing. To enable this feature, set `LV_LABEL_LONG_TXT_HINT 1` in *lv_conf.h*.
LVGL can efficiently handle very long (e.g. > 40k characters) by saving some extra data (~12 bytes) to speed up drawing. To enable this feature, set `LV_LABEL_LONG_TXT_HINT 1` in `lv_conf.h`.
### Symbols
The labels can display symbols alongside letters (or on their own). Read the [Font](/overview/font) section to learn more about the symbols.
## Events
Only the [Generic events](../overview/event.html#generic-events) are sent by the object type.
No special event's are send by the Label.
Learn more about [Events](/overview/event).
@ -85,7 +68,7 @@ Learn more about [Keys](/overview/indev).
```eval_rst
.. include:: /lv_examples/src/lv_ex_widgets/lv_ex_label/index.rst
.. include:: ../../../examples/widgets/label/index.rst
```

View File

@ -8,7 +8,7 @@
The Line object is capable of drawing straight lines between a set of points.
## Parts and Styles
The Line has only a main part, called `LV_LABEL_PART_MAIN`. It uses all the *line* style properties.
- `LV_PART_MAIN` It uses all the typical backgrund properties and the line style properties.
## Usage
@ -16,7 +16,8 @@ The Line has only a main part, called `LV_LABEL_PART_MAIN`. It uses all the *lin
The points has to be stored in an `lv_point_t` array and passed to the object by the `lv_line_set_points(lines, point_array, point_cnt)` function.
### Auto-size
It is possible to automatically set the size of the line object according to its points.
By default the Line's width and height is set to `LV_SIZE_CONTENT` to automatically set its size to involve all the points.
If the size if set explicitly the point out of the object
It can be enable with the `lv_line_set_auto_size(line, true)` function.
If enabled then when the points are set the object's width and height will be changed according to the maximal x and y coordinates among the points. The *auto size* is enabled by default.
@ -38,7 +39,7 @@ Learn more about [Keys](/overview/indev).
```eval_rst
.. include:: /lv_examples/src/lv_ex_widgets/lv_ex_line/index.rst
.. include:: ../../../examples/widgets/line/index.rst
```

View File

@ -3,9 +3,39 @@ C
Simple Bar
""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_bar/lv_ex_bar_1
.. lv_example:: widgets/bar/lv_example_bar_1
:language: c
Styling a bar
""""""""""""""""
.. lv_example:: widgets/bar/lv_example_bar_2
:language: c
Temperature meter
""""""""""""""""""
.. lv_example:: widgets/bar/lv_example_bar_3
:language: c
Stripe pattern and range value
""""""""""""""""""""""""""""""""
.. lv_example:: widgets/bar/lv_example_bar_4
:language: c
Bar with RTL and RTL base direction
""""""""""""""""""""""""""""""""""""
.. lv_example:: widgets/bar/lv_example_bar_5
:language: c
Custom drawr to show the current value
"""""""""""""""""""""""""""""""""""""""
.. lv_example:: widgets/bar/lv_example_bar_6
:language: c
MicroPython
^^^^^^^^^^^

View File

@ -4,10 +4,20 @@ C
Simple Buttons
""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_btn/lv_ex_btn_1
.. lv_example:: widgets/btn/lv_example_btn_1
:language: c
.. lv_example:: lv_ex_widgets/lv_ex_btn/lv_ex_btn_2
Styling buttons
""""""""""""""""
.. lv_example:: widgets/btn/lv_example_btn_2
:language: c
Gummy button
""""""""""""""""
.. lv_example:: widgets/btn/lv_example_btn_3
:language: c
MicroPython

View File

@ -4,7 +4,21 @@ C
Simple Button matrix
""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_btnmatrix/lv_ex_btnmatrix_1
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_1
:language: c
Custom buttons
""""""""""""""""""""""
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_2
:language: c
Pagination
""""""""""""""""""""""
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_3
:language: c

View File

@ -60,7 +60,7 @@ static void event_cb(lv_event_t * e)
}
/**
* Add custom drawer to the button matrix to c
* Add custom drawer to the button matrix to customize butons one by one
*/
void lv_example_btnmatrix_2(void)
{

View File

@ -22,7 +22,7 @@ static void event_cb(lv_event_t * e)
}
/**
* Make a button group
* Make a button group (pagination)
*/
void lv_example_btnmatrix_3(void)
{

View File

@ -0,0 +1,13 @@
C
^
Calendar with header
""""""""""""""""""""""
.. lv_example:: widgets/calendar/lv_example_calendar_1
:language: c
MicroPython
^^^^^^^^^^^
No examples yet.

View File

@ -4,13 +4,13 @@ C
Drawing on the Canvas and rotate
""""""""""""""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_canvas/lv_ex_canvas_1
.. lv_example:: widgets/canvas/lv_example_canvas_1
:language: c
Transparent Canvas with chroma keying
""""""""""""""""""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_canvas/lv_ex_canvas_2
.. lv_example:: widgets/canvas/lv_example_canvas_2
:language: c
MicroPython

View File

@ -1,9 +1,10 @@
C
^
Simple Checkbox
""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_checkbox/lv_ex_checkbox_1
Simple Checkboxes
"""""""""""""""""
.. lv_example:: widgets/checkbox/lv_example_checkbox_1
:language: c
MicroPython

View File

@ -4,13 +4,20 @@ C
Simple Drop down list
""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_dropdown/lv_ex_dropdown_1
.. lv_example:: widgets/dropdown/lv_example_dropdown_1
:language: c
Drop "up" list
""""""""""""""""""""""
Drop down in four directions
""""""""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_dropdown/lv_ex_dropdown_2
.. lv_example:: widgets/dropdown/lv_example_dropdown_2
:language: c
Menu
""""""""""""
.. lv_example:: widgets/dropdown/lv_example_dropdown_3
:language: c
MicroPython

View File

@ -30,7 +30,7 @@ void lv_example_dropdown_3(void)
/*Use a custom image as down icon and flip it when the list is opened*/
LV_IMG_DECLARE(img_caret_down)
lv_dropdown_set_symbol(dropdown, &img_caret_down);
lv_obj_set_style_transform_angle(dropdown, 1800, LV_STATE_CHECKED);
lv_obj_set_style_transform_angle(dropdown, 1800, LV_PART_INDICATOR | LV_STATE_CHECKED);
/*In a menu we don't need to show the last clicked item*/
lv_dropdown_set_selected_highlight(dropdown, false);

View File

@ -4,14 +4,27 @@ C
Image from variable and symbol
"""""""""""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_img/lv_ex_img_1
.. lv_example:: widgets/img/lv_example_img_1
:language: c
Image recoloring
""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_img/lv_ex_img_2
.. lv_example:: widgets/img/lv_example_img_2
:language: c
Rotate and zoom
""""""""""""""""
.. lv_example:: widgets/img/lv_example_img_3
:language: c
Image offset and styling
""""""""""""""""""""""""
.. lv_example:: widgets/img/lv_example_img_4
:language: c

View File

@ -1,22 +1,16 @@
C
^
Line wrap, recoloring and scrolling
"""""""""""""""""""""""""""""""""""
Label recoloring and scrolling
"""""""""""""""""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_label/lv_ex_label_1
.. lv_example:: widgets/label/lv_example_label_1
:language: c
Text shadow
""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_label/lv_ex_label_2
:language: c
Align labels
""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_label/lv_ex_label_3
.. lv_example:: widgets/label/lv_example_label_2
:language: c
MicroPython

View File

@ -4,7 +4,7 @@ C
Simple Line
""""""""""""""""
.. lv_example:: lv_ex_widgets/lv_ex_line/lv_ex_line_1
.. lv_example:: widgets/line/lv_example_line_1
:language: c
MicroPython

View File

@ -760,7 +760,7 @@ static void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state)
if(lv_style_get_prop_inlined(obj_style->style, LV_STYLE_TRANSITION, &v) == false) continue;
const lv_style_transition_dsc_t * tr = v.ptr;
/*Add the props t the set if not added yet or added but with smaller weight*/
/*Add the props to the set if not added yet or added but with smaller weight*/
uint32_t j;
for(j = 0; tr->props[j] != 0 && tsi < STYLE_TRANSITION_MAX; j++) {
uint32_t t;

View File

@ -424,13 +424,13 @@ void lv_dropdown_open(lv_obj_t * dropdown_obj)
lv_label_set_text_static(label, dropdown->options);
lv_obj_set_width(dropdown->list, LV_SIZE_CONTENT);
lv_obj_update_layout(label);
/*Set smaller width to the width of the button*/
if(lv_obj_get_width(dropdown->list) <= lv_obj_get_width(dropdown_obj) &&
(dropdown->dir == LV_DIR_TOP || dropdown->dir == LV_DIR_BOTTOM)) {
lv_obj_set_width(dropdown->list, lv_obj_get_width(dropdown_obj));
}
lv_obj_update_layout(label);
lv_coord_t label_h = lv_obj_get_height(label);
lv_coord_t top = lv_obj_get_style_pad_top(dropdown->list, LV_PART_MAIN);
lv_coord_t bottom = lv_obj_get_style_pad_bottom(dropdown->list, LV_PART_MAIN);