demos(render): start render demo

This commit is contained in:
Gabor Kiss-Vamosi
2023-10-25 13:38:37 +02:00
parent a61d87f840
commit 3ff625483c
19 changed files with 515 additions and 118 deletions

View File

@@ -51,6 +51,10 @@ extern "C" {
#include "multilang/lv_demo_multilang.h" #include "multilang/lv_demo_multilang.h"
#endif #endif
#if LV_USE_DEMO_RENDER
#include "render/lv_demo_render.h"
#endif
/********************* /*********************
* DEFINES * DEFINES
*********************/ *********************/

48
demos/render/README.md Normal file
View File

@@ -0,0 +1,48 @@
# Benchmark demo
![LVGL benchmark running](screenshot1.png)
## Overview
The benchmark demo tests the performance in various cases.
For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc.
All tests are repeated with 50% opacity.
The size and position of the objects during testing are set with a pseudo random number to make the benchmark repeatable.
On to top of the screen the title of the current test step, and the result of the previous step is displayed.
## Run the benchmark
- In `lv_conf.h` or equivalent places set `LV_USE_DEMO_BENCHMARK 1`
- After `lv_init()` and initializing the drivers and call `lv_demo_benchmark(mode)`
- If you only want to run a specific scene for any purpose (e.g. debug, performance optimization etc.), you can call `lv_demo_benchmark_run_scene(mode, scene_idx)` instead of `lv_demo_benchmark()`and pass the scene number.
- If you enabled trace output by setting macro `LV_USE_LOG` to `1` and trace level `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER` or higher, benchmark results are printed out in `csv` format.
## Modes
The `mode` should be passed to `lv_demo_benchmark(mode)` or `lv_demo_benchmark_run_scene(mode, scene_idx)`.
- `LV_DEMO_BENCHMARK_MODE_RENDER_AND_DRIVER` Render the scenes and show them on the display. Measure rendering time but it might contain extra time when LVGL waits for the driver. Run each scenes for a few seconds so the performance can be seen by eye too. As only the rendering time is measured and converted to FPS, really high values (e.g. 1000 FPS) are possible.
- `LV_DEMO_BENCHMARK_MODE_REAL` Similar to `RENDER_AND_DRIVER` but instead of measuring the rendering time only measure the real FPS of the system. E.g. even if a scene was rendered in 1 ms, but the screen is redrawn only in every 100 ms, the result will be 10 FPS.
- `LV_DEMO_BENCHMARK_MODE_RENDER_ONLY` Temporarily display the `flush_cb` so the pure rendering time will be measured. The display is not updated during the benchmark, only at the end when the summary table is shown. Renders a given number of frames from each scene and calculate the FPS from them.
## Result summary
In the end, a table is created to display measured FPS values.
On top of the summary screen, the "Weighted FPS" value is shown.
In this, the result of the more common cases are taken into account with a higher weight.
"Opa. speed" shows the speed of the measurements with opacity compared to full opacity.
E.g. "Opa. speed = 90%" means that rendering with opacity is 10% slower.
In the first section of the table, "Slow but common cases", those cases are displayed which are considered common but were slower than 20 FPS.
Below this in the "All cases section" all the results are shown. The < 10 FPS results are shown with red, the >= 10 but < 20 FPS values are displayed with orange.
![LVGL benchmark result summary](screenshot2.png)
**NOTE**: Compared to the past, the use of rotation and zoom(scaling) in GUI applications has become increasingly common. Therefore, starting from LVGL9, we have assigned a higher priority to zoom(scaling) and rotation operations.

View File

@@ -0,0 +1,280 @@
/**
* @file lv_demo_render.c
*
*/
/*********************
* INCLUDES
*********************/
#include "lv_demo_render.h"
#if LV_USE_DEMO_RENDER
#include "../../src/display/lv_display_private.h"
#include "../../src/core/lv_global.h"
/*********************
* DEFINES
*********************/
#define COL_CNT 8
#define ROW_CNT 8
#define DEF_WIDTH 55
#define DEF_HEIGHT 30
/**********************
* TYPEDEFS
**********************/
#define SCENE_TIME_DEF 2000
typedef struct {
const char * name;
void (*create_cb)(lv_obj_t * parent);
} scene_dsc_t;
/**********************
* STATIC PROTOTYPES
**********************/
static void add_to_cell(lv_obj_t * obj, lv_coord_t col, lv_coord_t row);
static lv_obj_t * fill_obj_create(lv_obj_t * parent, lv_coord_t col, lv_coord_t row)
{
lv_color_t colors[] = {lv_color_hex3(0x000),
lv_color_hex3(0xfff),
lv_color_hex3(0xf00),
lv_color_hex3(0x0f0),
lv_color_hex3(0x00f),
lv_color_hex3(0xff0),
lv_color_hex3(0x0ff),
lv_color_hex3(0xf0f),
};
lv_obj_t * obj = lv_obj_create(parent);
lv_obj_remove_style_all(obj);
lv_obj_set_style_bg_opa(obj, LV_OPA_COVER, 0);
lv_obj_set_style_bg_color(obj, colors[col], 0);
lv_obj_set_size(obj, DEF_WIDTH, DEF_HEIGHT);
add_to_cell(obj, col, row);
return obj;
}
static void fill_cb(lv_obj_t * parent)
{
uint32_t i;
for(i = 0; i < COL_CNT; i++) {
fill_obj_create(parent, i, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 1);
lv_obj_set_style_radius(obj, 10, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 2);
lv_obj_set_style_radius(obj, 100, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 3);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_bg_grad_dir(obj, LV_GRAD_DIR_HOR, 0);
lv_obj_set_style_bg_grad_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_bg_grad_stop(obj, 200, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 4);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_bg_grad_dir(obj, LV_GRAD_DIR_VER, 0);
lv_obj_set_style_bg_grad_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_bg_grad_stop(obj, 200, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 5);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_bg_grad_dir(obj, LV_GRAD_DIR_HOR, 0);
lv_obj_set_style_bg_grad_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_bg_grad_opa(obj, LV_OPA_TRANSP, 0);
lv_obj_set_style_bg_grad_stop(obj, 200, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = fill_obj_create(parent, i, 6);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_bg_grad_dir(obj, LV_GRAD_DIR_VER, 0);
lv_obj_set_style_bg_grad_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_bg_grad_opa(obj, LV_OPA_TRANSP, 0);
lv_obj_set_style_bg_grad_stop(obj, 200, 0);
}
}
static lv_obj_t * border_obj_create(lv_obj_t * parent, lv_coord_t col, lv_coord_t row)
{
lv_obj_t * obj = lv_obj_create(parent);
lv_obj_remove_style_all(obj);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x000), 0);
lv_obj_set_style_border_width(obj, 3, 0);
lv_obj_set_size(obj, DEF_WIDTH, DEF_HEIGHT);
add_to_cell(obj, col, row);
return obj;
}
static void border_cb(lv_obj_t * parent)
{
lv_border_side_t sides[] = {
LV_BORDER_SIDE_NONE,
LV_BORDER_SIDE_FULL,
LV_BORDER_SIDE_LEFT,
LV_BORDER_SIDE_RIGHT,
LV_BORDER_SIDE_TOP,
LV_BORDER_SIDE_BOTTOM,
LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_RIGHT,
LV_BORDER_SIDE_RIGHT | LV_BORDER_SIDE_BOTTOM,
LV_BORDER_SIDE_LEFT| LV_BORDER_SIDE_BOTTOM,
LV_BORDER_SIDE_LEFT | LV_BORDER_SIDE_TOP,
LV_BORDER_SIDE_LEFT | LV_BORDER_SIDE_RIGHT,
LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM,
LV_BORDER_SIDE_LEFT | LV_BORDER_SIDE_RIGHT | LV_BORDER_SIDE_BOTTOM,
LV_BORDER_SIDE_LEFT | LV_BORDER_SIDE_BOTTOM | LV_BORDER_SIDE_TOP,
LV_BORDER_SIDE_LEFT | LV_BORDER_SIDE_RIGHT | LV_BORDER_SIDE_TOP,
LV_BORDER_SIDE_BOTTOM | LV_BORDER_SIDE_RIGHT | LV_BORDER_SIDE_TOP,
};
uint32_t i;
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 0);
lv_obj_set_style_radius(obj, 0, 0);
lv_obj_set_style_border_side(obj, sides[i], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0xf00), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 1);
lv_obj_set_style_radius(obj, 0, 0);
lv_obj_set_style_border_side(obj, sides[i + 8], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0xf00), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 2);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_border_side(obj, sides[i], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x0f0), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 3);
lv_obj_set_style_radius(obj, 10, 0);
lv_obj_set_style_border_side(obj, sides[i + 8], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x0f0), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 4);
lv_obj_set_style_radius(obj, 100, 0);
lv_obj_set_style_border_side(obj, sides[i], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x00f), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 5);
lv_obj_set_style_radius(obj, 100, 0);
lv_obj_set_style_border_side(obj, sides[i + 8], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x00f), 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 6);
lv_obj_set_style_radius(obj, 100, 0);
lv_obj_set_style_border_side(obj, sides[i], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_border_width(obj, 10, 0);
}
for(i = 0; i < COL_CNT; i++) {
lv_obj_t * obj = border_obj_create(parent, i, 7);
lv_obj_set_style_radius(obj, 100, 0);
lv_obj_set_style_border_side(obj, sides[i + 8], 0);
lv_obj_set_style_border_color(obj, lv_color_hex3(0x888), 0);
lv_obj_set_style_border_width(obj, 10, 0);
}
}
/**********************
* STATIC VARIABLES
**********************/
//fill (radius + gradient too)
//border (each sides + radius)
//outline (radius)
//box shadow (offset, size, spread)
//text (normal text + underline/strike through, placeholder)
//triangle (just some rectangles)
//image (various formats + transformation)
//line (various angles + line caps)
//arc (some arcs + caps)
//vector (later)
//layer (blend mode, transformation)
//mask bitmap (not implemented SW render yet)
//mask rectangle
static scene_dsc_t scenes[] = {
{.name = "Fill ", .create_cb = fill_cb},
{.name = "Border", .create_cb = border_cb},
{.name = "", .create_cb = NULL}
};
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
void lv_demo_render(uint32_t idx)
{
lv_obj_t * scr = lv_screen_active();
lv_obj_clean(scr);
lv_obj_remove_style_all(scr);
lv_obj_set_style_bg_opa(scr, LV_OPA_COVER, 0);
lv_obj_set_style_text_color(scr, lv_color_black(), 0);
lv_obj_set_style_bg_color(scr, lv_color_white(), 0);
lv_obj_t * main_parent = lv_obj_create(scr);
lv_obj_remove_style_all(main_parent);
lv_obj_set_style_bg_opa(main_parent, LV_OPA_COVER, 0);
lv_obj_set_style_bg_color(main_parent, lv_color_hex3(0xaaf), 0);
lv_obj_set_size(main_parent, 480, 272);
static const lv_coord_t grid_cols[] = {60, 60, 60, 60, 60, 60, 60, 60, LV_GRID_TEMPLATE_LAST};
static const lv_coord_t grid_rows[] = {34, 34, 34, 34, 34, 34, 34, 34, LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(main_parent, grid_cols, grid_rows);
if(scenes[idx].create_cb) scenes[idx].create_cb(main_parent);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void add_to_cell(lv_obj_t * obj, lv_coord_t col, lv_coord_t row)
{
lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_CENTER, col, 1, LV_GRID_ALIGN_CENTER, row, 1);
}
#endif

View File

@@ -0,0 +1,48 @@
/**
* @file lv_demo_render.h
*
*/
#ifndef LV_DEMO_RENDER_H
#define LV_DEMO_RENDER_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "../lv_demos.h"
#if LV_USE_DEMO_RENDER
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Run the render verification for a scenario
* @param idx index of the scenario to run
*/
void lv_demo_render(uint32_t idx);
/**********************
* MACROS
**********************/
#endif /*LV_USE_DEMO_RENDER*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /*LV_DEMO_RENDER_H*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -318,19 +318,28 @@ Set the point from which the background's gradient color should start. 0 means t
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li>
</ul> </ul>
### bg_grad ### bg_main_opa
Set the gradient definition. The pointed instance must exist while the object is alive. NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors too. Set the opacity of the first gradient color
<ul> <ul>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Default</strong> `NULL`</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Default</strong> 255</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Inherited</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Inherited</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Layout</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Layout</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li>
</ul> </ul>
### bg_dither_mode ### bg_grad_opa
Set the dithering mode of the gradient of the background. The possible values are `LV_DITHER_NONE/ORDERED/ERR_DIFF`. Set the opacity of the second gradient color
<ul> <ul>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Default</strong> `LV_DITHER_NONE`</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Default</strong> 255</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Inherited</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Layout</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li>
</ul>
### bg_grad
Set the gradient definition. The pointed instance must exist while the object is alive. NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors too. If it's set other gradient related properties will be ignored'
<ul>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Default</strong> `NULL`</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Inherited</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Inherited</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Layout</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Layout</strong> No</li>
<li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li> <li style='display:inline; margin-right: 20px; margin-left: 0px'><strong>Ext. draw</strong> No</li>

View File

@@ -810,10 +810,9 @@
/*Benchmark your system*/ /*Benchmark your system*/
#define LV_USE_DEMO_BENCHMARK 0 #define LV_USE_DEMO_BENCHMARK 0
#if LV_USE_DEMO_BENCHMARK
/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ /*Render test for each primitives. Requires at least 480x272 display*/
#define LV_DEMO_BENCHMARK_RGB565A8 0 #define LV_USE_DEMO_RENDER 0
#endif
/*Stress test for LVGL*/ /*Stress test for LVGL*/
#define LV_USE_DEMO_STRESS 0 #define LV_USE_DEMO_STRESS 0

View File

@@ -145,13 +145,17 @@ props = [
'style_type': 'num', 'var_type': 'lv_coord_t', 'default':255, 'inherited': 0, 'layout': 0, 'ext_draw': 0, 'style_type': 'num', 'var_type': 'lv_coord_t', 'default':255, 'inherited': 0, 'layout': 0, 'ext_draw': 0,
'dsc': "Set the point from which the background's gradient color should start. 0 means to top/left side, 255 the bottom/right side, 128 the center, and so on"}, 'dsc': "Set the point from which the background's gradient color should start. 0 means to top/left side, 255 the bottom/right side, 128 the center, and so on"},
{'name': 'BG_MAIN_OPA',
'style_type': 'num', 'var_type': 'lv_opa_t', 'default':255, 'inherited': 0, 'layout': 0, 'ext_draw': 0,
'dsc': "Set the opacity of the first gradient color"},
{'name': 'BG_GRAD_OPA',
'style_type': 'num', 'var_type': 'lv_opa_t', 'default':255, 'inherited': 0, 'layout': 0, 'ext_draw': 0,
'dsc': "Set the opacity of the second gradient color"},
{'name': 'BG_GRAD', {'name': 'BG_GRAD',
'style_type': 'ptr', 'var_type': 'const lv_grad_dsc_t *', 'default':'`NULL`', 'inherited': 0, 'layout': 0, 'ext_draw': 0, 'style_type': 'ptr', 'var_type': 'const lv_grad_dsc_t *', 'default':'`NULL`', 'inherited': 0, 'layout': 0, 'ext_draw': 0,
'dsc': "Set the gradient definition. The pointed instance must exist while the object is alive. NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors too."}, 'dsc': "Set the gradient definition. The pointed instance must exist while the object is alive. NULL to disable. It wraps `BG_GRAD_COLOR`, `BG_GRAD_DIR`, `BG_MAIN_STOP` and `BG_GRAD_STOP` into one descriptor and allows creating gradients with more colors too. If it's set other gradient related properties will be ignored'"},
{'name': 'BG_DITHER_MODE',
'style_type': 'num', 'var_type': 'lv_dither_mode_t', 'default':'`LV_DITHER_NONE`', 'inherited': 0, 'layout': 0, 'ext_draw': 0,
'dsc': "Set the dithering mode of the gradient of the background. The possible values are `LV_DITHER_NONE/ORDERED/ERR_DIFF`."},
{'name': 'BG_IMAGE_SRC', {'name': 'BG_IMAGE_SRC',
'style_type': 'ptr', 'var_type': 'const void *', 'default':'`NULL`', 'inherited': 0, 'layout': 0, 'ext_draw': 1, 'style_type': 'ptr', 'var_type': 'const void *', 'default':'`NULL`', 'inherited': 0, 'layout': 0, 'ext_draw': 1,

View File

@@ -71,10 +71,9 @@ void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, uint32_t part, lv_draw_rect_dsc_t
draw_dsc->bg_grad.stops[1].color = lv_obj_get_style_bg_grad_color_filtered(obj, part); draw_dsc->bg_grad.stops[1].color = lv_obj_get_style_bg_grad_color_filtered(obj, part);
draw_dsc->bg_grad.stops[0].frac = lv_obj_get_style_bg_main_stop(obj, part); draw_dsc->bg_grad.stops[0].frac = lv_obj_get_style_bg_main_stop(obj, part);
draw_dsc->bg_grad.stops[1].frac = lv_obj_get_style_bg_grad_stop(obj, part); draw_dsc->bg_grad.stops[1].frac = lv_obj_get_style_bg_grad_stop(obj, part);
draw_dsc->bg_grad.stops[0].opa = 0xFF; draw_dsc->bg_grad.stops[0].opa = lv_obj_get_style_bg_main_opa(obj, part);
draw_dsc->bg_grad.stops[1].opa = 0xFF; draw_dsc->bg_grad.stops[1].opa = lv_obj_get_style_bg_grad_opa(obj, part);
} }
draw_dsc->bg_grad.dither = lv_obj_get_style_bg_dither_mode(obj, part);
} }
} }
} }

View File

@@ -344,6 +344,8 @@ static inline lv_style_value_t lv_style_prop_get_default_inlined(lv_style_prop_t
case LV_STYLE_BORDER_OPA: case LV_STYLE_BORDER_OPA:
case LV_STYLE_TEXT_OPA: case LV_STYLE_TEXT_OPA:
case LV_STYLE_IMAGE_OPA: case LV_STYLE_IMAGE_OPA:
case LV_STYLE_BG_GRAD_OPA:
case LV_STYLE_BG_MAIN_OPA:
case LV_STYLE_BG_IMAGE_OPA: case LV_STYLE_BG_IMAGE_OPA:
case LV_STYLE_OUTLINE_OPA: case LV_STYLE_OUTLINE_OPA:
case LV_STYLE_SHADOW_OPA: case LV_STYLE_SHADOW_OPA:

View File

@@ -282,6 +282,22 @@ void lv_obj_set_style_bg_grad_stop(struct _lv_obj_t * obj, lv_coord_t value, lv_
lv_obj_set_local_style_prop(obj, LV_STYLE_BG_GRAD_STOP, v, selector); lv_obj_set_local_style_prop(obj, LV_STYLE_BG_GRAD_STOP, v, selector);
} }
void lv_obj_set_style_bg_main_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_obj_set_local_style_prop(obj, LV_STYLE_BG_MAIN_OPA, v, selector);
}
void lv_obj_set_style_bg_grad_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_obj_set_local_style_prop(obj, LV_STYLE_BG_GRAD_OPA, v, selector);
}
void lv_obj_set_style_bg_grad(struct _lv_obj_t * obj, const lv_grad_dsc_t * value, lv_style_selector_t selector) void lv_obj_set_style_bg_grad(struct _lv_obj_t * obj, const lv_grad_dsc_t * value, lv_style_selector_t selector)
{ {
lv_style_value_t v = { lv_style_value_t v = {
@@ -290,14 +306,6 @@ void lv_obj_set_style_bg_grad(struct _lv_obj_t * obj, const lv_grad_dsc_t * valu
lv_obj_set_local_style_prop(obj, LV_STYLE_BG_GRAD, v, selector); lv_obj_set_local_style_prop(obj, LV_STYLE_BG_GRAD, v, selector);
} }
void lv_obj_set_style_bg_dither_mode(struct _lv_obj_t * obj, lv_dither_mode_t value, lv_style_selector_t selector)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_obj_set_local_style_prop(obj, LV_STYLE_BG_DITHER_MODE, v, selector);
}
void lv_obj_set_style_bg_image_src(struct _lv_obj_t * obj, const void * value, lv_style_selector_t selector) void lv_obj_set_style_bg_image_src(struct _lv_obj_t * obj, const void * value, lv_style_selector_t selector)
{ {
lv_style_value_t v = { lv_style_value_t v = {
@@ -658,8 +666,7 @@ void lv_obj_set_style_opa_layered(struct _lv_obj_t * obj, lv_opa_t value, lv_sty
lv_obj_set_local_style_prop(obj, LV_STYLE_OPA_LAYERED, v, selector); lv_obj_set_local_style_prop(obj, LV_STYLE_OPA_LAYERED, v, selector);
} }
void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, lv_style_selector_t selector)
lv_style_selector_t selector)
{ {
lv_style_value_t v = { lv_style_value_t v = {
.ptr = value .ptr = value
@@ -699,8 +706,7 @@ void lv_obj_set_style_anim_speed(struct _lv_obj_t * obj, uint32_t value, lv_styl
lv_obj_set_local_style_prop(obj, LV_STYLE_ANIM_SPEED, v, selector); lv_obj_set_local_style_prop(obj, LV_STYLE_ANIM_SPEED, v, selector);
} }
void lv_obj_set_style_transition(struct _lv_obj_t * obj, const lv_style_transition_dsc_t * value, void lv_obj_set_style_transition(struct _lv_obj_t * obj, const lv_style_transition_dsc_t * value, lv_style_selector_t selector)
lv_style_selector_t selector)
{ {
lv_style_value_t v = { lv_style_value_t v = {
.ptr = value .ptr = value
@@ -772,8 +778,7 @@ void lv_obj_set_style_flex_grow(struct _lv_obj_t * obj, uint8_t value, lv_style_
lv_obj_set_local_style_prop(obj, LV_STYLE_FLEX_GROW, v, selector); lv_obj_set_local_style_prop(obj, LV_STYLE_FLEX_GROW, v, selector);
} }
void lv_obj_set_style_grid_column_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, void lv_obj_set_style_grid_column_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, lv_style_selector_t selector)
lv_style_selector_t selector)
{ {
lv_style_value_t v = { lv_style_value_t v = {
.ptr = value .ptr = value

View File

@@ -208,8 +208,7 @@ static inline lv_color_t lv_obj_get_style_bg_grad_color(const struct _lv_obj_t *
static inline lv_color_t lv_obj_get_style_bg_grad_color_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_bg_grad_color_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD_COLOR));
LV_STYLE_BG_GRAD_COLOR));
return v.color; return v.color;
} }
@@ -231,18 +230,24 @@ static inline lv_coord_t lv_obj_get_style_bg_grad_stop(const struct _lv_obj_t *
return (lv_coord_t)v.num; return (lv_coord_t)v.num;
} }
static inline lv_opa_t lv_obj_get_style_bg_main_opa(const struct _lv_obj_t * obj, uint32_t part)
{
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_MAIN_OPA);
return (lv_opa_t)v.num;
}
static inline lv_opa_t lv_obj_get_style_bg_grad_opa(const struct _lv_obj_t * obj, uint32_t part)
{
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD_OPA);
return (lv_opa_t)v.num;
}
static inline const lv_grad_dsc_t * lv_obj_get_style_bg_grad(const struct _lv_obj_t * obj, uint32_t part) static inline const lv_grad_dsc_t * lv_obj_get_style_bg_grad(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD); lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD);
return (const lv_grad_dsc_t *)v.ptr; return (const lv_grad_dsc_t *)v.ptr;
} }
static inline lv_dither_mode_t lv_obj_get_style_bg_dither_mode(const struct _lv_obj_t * obj, uint32_t part)
{
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_DITHER_MODE);
return (lv_dither_mode_t)v.num;
}
static inline const void * lv_obj_get_style_bg_image_src(const struct _lv_obj_t * obj, uint32_t part) static inline const void * lv_obj_get_style_bg_image_src(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_IMAGE_SRC); lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_IMAGE_SRC);
@@ -263,8 +268,7 @@ static inline lv_color_t lv_obj_get_style_bg_image_recolor(const struct _lv_obj_
static inline lv_color_t lv_obj_get_style_bg_image_recolor_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_bg_image_recolor_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_BG_IMAGE_RECOLOR));
LV_STYLE_BG_IMAGE_RECOLOR));
return v.color; return v.color;
} }
@@ -288,8 +292,7 @@ static inline lv_color_t lv_obj_get_style_border_color(const struct _lv_obj_t *
static inline lv_color_t lv_obj_get_style_border_color_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_border_color_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_BORDER_COLOR));
LV_STYLE_BORDER_COLOR));
return v.color; return v.color;
} }
@@ -331,8 +334,7 @@ static inline lv_color_t lv_obj_get_style_outline_color(const struct _lv_obj_t *
static inline lv_color_t lv_obj_get_style_outline_color_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_outline_color_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_OUTLINE_COLOR));
LV_STYLE_OUTLINE_COLOR));
return v.color; return v.color;
} }
@@ -380,8 +382,7 @@ static inline lv_color_t lv_obj_get_style_shadow_color(const struct _lv_obj_t *
static inline lv_color_t lv_obj_get_style_shadow_color_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_shadow_color_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_SHADOW_COLOR));
LV_STYLE_SHADOW_COLOR));
return v.color; return v.color;
} }
@@ -405,8 +406,7 @@ static inline lv_color_t lv_obj_get_style_image_recolor(const struct _lv_obj_t *
static inline lv_color_t lv_obj_get_style_image_recolor_filtered(const struct _lv_obj_t * obj, uint32_t part) static inline lv_color_t lv_obj_get_style_image_recolor_filtered(const struct _lv_obj_t * obj, uint32_t part)
{ {
lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, lv_style_value_t v = _lv_obj_style_apply_color_filter(obj, part, lv_obj_get_style_prop(obj, part, LV_STYLE_IMAGE_RECOLOR));
LV_STYLE_IMAGE_RECOLOR));
return v.color; return v.color;
} }
@@ -566,8 +566,7 @@ static inline lv_opa_t lv_obj_get_style_opa_layered(const struct _lv_obj_t * obj
return (lv_opa_t)v.num; return (lv_opa_t)v.num;
} }
static inline const lv_color_filter_dsc_t * lv_obj_get_style_color_filter_dsc(const struct _lv_obj_t * obj, static inline const lv_color_filter_dsc_t * lv_obj_get_style_color_filter_dsc(const struct _lv_obj_t * obj, uint32_t part)
uint32_t part)
{ {
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_COLOR_FILTER_DSC); lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_COLOR_FILTER_DSC);
return (const lv_color_filter_dsc_t *)v.ptr; return (const lv_color_filter_dsc_t *)v.ptr;
@@ -745,8 +744,9 @@ void lv_obj_set_style_bg_grad_color(struct _lv_obj_t * obj, lv_color_t value, lv
void lv_obj_set_style_bg_grad_dir(struct _lv_obj_t * obj, lv_grad_dir_t value, lv_style_selector_t selector); void lv_obj_set_style_bg_grad_dir(struct _lv_obj_t * obj, lv_grad_dir_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_main_stop(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector); void lv_obj_set_style_bg_main_stop(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_grad_stop(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector); void lv_obj_set_style_bg_grad_stop(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_main_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_grad_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_grad(struct _lv_obj_t * obj, const lv_grad_dsc_t * value, lv_style_selector_t selector); void lv_obj_set_style_bg_grad(struct _lv_obj_t * obj, const lv_grad_dsc_t * value, lv_style_selector_t selector);
void lv_obj_set_style_bg_dither_mode(struct _lv_obj_t * obj, lv_dither_mode_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_image_src(struct _lv_obj_t * obj, const void * value, lv_style_selector_t selector); void lv_obj_set_style_bg_image_src(struct _lv_obj_t * obj, const void * value, lv_style_selector_t selector);
void lv_obj_set_style_bg_image_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector); void lv_obj_set_style_bg_image_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_bg_image_recolor(struct _lv_obj_t * obj, lv_color_t value, lv_style_selector_t selector); void lv_obj_set_style_bg_image_recolor(struct _lv_obj_t * obj, lv_color_t value, lv_style_selector_t selector);
@@ -792,14 +792,12 @@ void lv_obj_set_style_radius(struct _lv_obj_t * obj, lv_coord_t value, lv_style_
void lv_obj_set_style_clip_corner(struct _lv_obj_t * obj, bool value, lv_style_selector_t selector); void lv_obj_set_style_clip_corner(struct _lv_obj_t * obj, bool value, lv_style_selector_t selector);
void lv_obj_set_style_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector); void lv_obj_set_style_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_opa_layered(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector); void lv_obj_set_style_opa_layered(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, lv_style_selector_t selector);
lv_style_selector_t selector);
void lv_obj_set_style_color_filter_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector); void lv_obj_set_style_color_filter_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
void lv_obj_set_style_anim(struct _lv_obj_t * obj, const lv_anim_t * value, lv_style_selector_t selector); void lv_obj_set_style_anim(struct _lv_obj_t * obj, const lv_anim_t * value, lv_style_selector_t selector);
void lv_obj_set_style_anim_time(struct _lv_obj_t * obj, uint32_t value, lv_style_selector_t selector); void lv_obj_set_style_anim_time(struct _lv_obj_t * obj, uint32_t value, lv_style_selector_t selector);
void lv_obj_set_style_anim_speed(struct _lv_obj_t * obj, uint32_t value, lv_style_selector_t selector); void lv_obj_set_style_anim_speed(struct _lv_obj_t * obj, uint32_t value, lv_style_selector_t selector);
void lv_obj_set_style_transition(struct _lv_obj_t * obj, const lv_style_transition_dsc_t * value, void lv_obj_set_style_transition(struct _lv_obj_t * obj, const lv_style_transition_dsc_t * value, lv_style_selector_t selector);
lv_style_selector_t selector);
void lv_obj_set_style_blend_mode(struct _lv_obj_t * obj, lv_blend_mode_t value, lv_style_selector_t selector); void lv_obj_set_style_blend_mode(struct _lv_obj_t * obj, lv_blend_mode_t value, lv_style_selector_t selector);
void lv_obj_set_style_layout(struct _lv_obj_t * obj, uint16_t value, lv_style_selector_t selector); void lv_obj_set_style_layout(struct _lv_obj_t * obj, uint16_t value, lv_style_selector_t selector);
void lv_obj_set_style_base_dir(struct _lv_obj_t * obj, lv_base_dir_t value, lv_style_selector_t selector); void lv_obj_set_style_base_dir(struct _lv_obj_t * obj, lv_base_dir_t value, lv_style_selector_t selector);
@@ -808,11 +806,9 @@ void lv_obj_set_style_flex_main_place(struct _lv_obj_t * obj, lv_flex_align_t va
void lv_obj_set_style_flex_cross_place(struct _lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector); void lv_obj_set_style_flex_cross_place(struct _lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector);
void lv_obj_set_style_flex_track_place(struct _lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector); void lv_obj_set_style_flex_track_place(struct _lv_obj_t * obj, lv_flex_align_t value, lv_style_selector_t selector);
void lv_obj_set_style_flex_grow(struct _lv_obj_t * obj, uint8_t value, lv_style_selector_t selector); void lv_obj_set_style_flex_grow(struct _lv_obj_t * obj, uint8_t value, lv_style_selector_t selector);
void lv_obj_set_style_grid_column_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, void lv_obj_set_style_grid_column_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, lv_style_selector_t selector);
lv_style_selector_t selector);
void lv_obj_set_style_grid_column_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector); void lv_obj_set_style_grid_column_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector);
void lv_obj_set_style_grid_row_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, void lv_obj_set_style_grid_row_dsc_array(struct _lv_obj_t * obj, const lv_coord_t * value, lv_style_selector_t selector);
lv_style_selector_t selector);
void lv_obj_set_style_grid_row_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector); void lv_obj_set_style_grid_row_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector);
void lv_obj_set_style_grid_cell_column_pos(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector); void lv_obj_set_style_grid_cell_column_pos(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector);
void lv_obj_set_style_grid_cell_x_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector); void lv_obj_set_style_grid_cell_x_align(struct _lv_obj_t * obj, lv_grid_align_t value, lv_style_selector_t selector);

View File

@@ -2634,14 +2634,13 @@
#define LV_USE_DEMO_BENCHMARK 0 #define LV_USE_DEMO_BENCHMARK 0
#endif #endif
#endif #endif
#if LV_USE_DEMO_BENCHMARK
/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ /*Render test for each primitives. Requires at least 480x272 display*/
#ifndef LV_DEMO_BENCHMARK_RGB565A8 #ifndef LV_USE_DEMO_RENDER
#ifdef CONFIG_LV_DEMO_BENCHMARK_RGB565A8 #ifdef CONFIG_LV_USE_DEMO_RENDER
#define LV_DEMO_BENCHMARK_RGB565A8 CONFIG_LV_DEMO_BENCHMARK_RGB565A8 #define LV_USE_DEMO_RENDER CONFIG_LV_USE_DEMO_RENDER
#else #else
#define LV_DEMO_BENCHMARK_RGB565A8 0 #define LV_USE_DEMO_RENDER 0
#endif
#endif #endif
#endif #endif

View File

@@ -69,8 +69,9 @@ const uint8_t _lv_style_builtin_prop_flag_lookup_table[_LV_STYLE_NUM_BUILT_IN_PR
[LV_STYLE_BG_GRAD_DIR] = 0, [LV_STYLE_BG_GRAD_DIR] = 0,
[LV_STYLE_BG_MAIN_STOP] = 0, [LV_STYLE_BG_MAIN_STOP] = 0,
[LV_STYLE_BG_GRAD_STOP] = 0, [LV_STYLE_BG_GRAD_STOP] = 0,
[LV_STYLE_BG_MAIN_OPA] = 0,
[LV_STYLE_BG_GRAD_OPA] = 0,
[LV_STYLE_BG_GRAD] = 0, [LV_STYLE_BG_GRAD] = 0,
[LV_STYLE_BG_DITHER_MODE] = 0,
[LV_STYLE_BG_IMAGE_SRC] = LV_STYLE_PROP_FLAG_EXT_DRAW_UPDATE, [LV_STYLE_BG_IMAGE_SRC] = LV_STYLE_PROP_FLAG_EXT_DRAW_UPDATE,
[LV_STYLE_BG_IMAGE_OPA] = 0, [LV_STYLE_BG_IMAGE_OPA] = 0,
@@ -371,6 +372,8 @@ lv_style_value_t lv_style_prop_get_default(lv_style_prop_t prop)
case LV_STYLE_BORDER_OPA: case LV_STYLE_BORDER_OPA:
case LV_STYLE_TEXT_OPA: case LV_STYLE_TEXT_OPA:
case LV_STYLE_IMAGE_OPA: case LV_STYLE_IMAGE_OPA:
case LV_STYLE_BG_GRAD_OPA:
case LV_STYLE_BG_MAIN_OPA:
case LV_STYLE_BG_IMAGE_OPA: case LV_STYLE_BG_IMAGE_OPA:
case LV_STYLE_OUTLINE_OPA: case LV_STYLE_OUTLINE_OPA:
case LV_STYLE_SHADOW_OPA: case LV_STYLE_SHADOW_OPA:

View File

@@ -146,22 +146,6 @@ typedef uint8_t lv_grad_dir_t;
#endif /*DOXYGEN*/ #endif /*DOXYGEN*/
/**
* The dithering algorithm for the gradient
*/
enum _lv_dither_mode_t {
LV_DITHER_NONE, /**< No dithering, colors are just quantized to the output resolution*/
LV_DITHER_ORDERED, /**< Ordered dithering. Faster to compute and use less memory but lower quality*/
LV_DITHER_ERR_DIFF, /**< Error diffusion mode. Slower to compute and use more memory but give highest dither quality*/
};
#ifdef DOXYGEN
typedef _lv_dither_mode_t lv_dither_mode_t;
#else
typedef uint8_t lv_dither_mode_t;
#endif /*DOXYGEN*/
/** A gradient stop definition. /** A gradient stop definition.
* This matches a color and a position in a virtual 0-255 scale. * This matches a color and a position in a virtual 0-255 scale.
*/ */
@@ -177,8 +161,6 @@ typedef struct {
uint8_t stops_count; /**< The number of used stops in the array */ uint8_t stops_count; /**< The number of used stops in the array */
lv_grad_dir_t dir : 3; /**< The gradient direction. lv_grad_dir_t dir : 3; /**< The gradient direction.
* Any of LV_GRAD_DIR_HOR, LV_GRAD_DIR_VER, LV_GRAD_DIR_NONE */ * Any of LV_GRAD_DIR_HOR, LV_GRAD_DIR_VER, LV_GRAD_DIR_NONE */
lv_dither_mode_t dither : 3; /**< Whether to dither the gradient or not.
* Any of LV_DITHER_NONE, LV_DITHER_ORDERED, LV_DITHER_ERR_DIFF */
} lv_grad_dsc_t; } lv_grad_dsc_t;
/** /**
@@ -235,13 +217,14 @@ enum _lv_style_prop_t {
LV_STYLE_BG_GRAD_DIR = 32, LV_STYLE_BG_GRAD_DIR = 32,
LV_STYLE_BG_GRAD_COLOR = 33, LV_STYLE_BG_MAIN_STOP = 33,
LV_STYLE_BG_MAIN_STOP = 34, LV_STYLE_BG_GRAD_STOP = 34,
LV_STYLE_BG_GRAD_STOP = 35, LV_STYLE_BG_GRAD_COLOR = 35,
LV_STYLE_BG_GRAD = 36, LV_STYLE_BG_MAIN_OPA = 36,
LV_STYLE_BG_DITHER_MODE = 37, LV_STYLE_BG_GRAD_OPA = 37,
LV_STYLE_BASE_DIR = 38, LV_STYLE_BG_GRAD = 38,
LV_STYLE_BASE_DIR = 39,
LV_STYLE_BG_IMAGE_SRC = 40, LV_STYLE_BG_IMAGE_SRC = 40,
LV_STYLE_BG_IMAGE_OPA = 41, LV_STYLE_BG_IMAGE_OPA = 41,

View File

@@ -350,6 +350,26 @@ void lv_style_set_bg_grad_stop(lv_style_t * style, lv_coord_t value)
const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_STOP = LV_STYLE_BG_GRAD_STOP; const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_STOP = LV_STYLE_BG_GRAD_STOP;
void lv_style_set_bg_main_opa(lv_style_t * style, lv_opa_t value)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_style_set_prop(style, LV_STYLE_BG_MAIN_OPA, v);
}
const lv_style_prop_t _lv_style_const_prop_id_BG_MAIN_OPA = LV_STYLE_BG_MAIN_OPA;
void lv_style_set_bg_grad_opa(lv_style_t * style, lv_opa_t value)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_style_set_prop(style, LV_STYLE_BG_GRAD_OPA, v);
}
const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_OPA = LV_STYLE_BG_GRAD_OPA;
void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value) void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value)
{ {
lv_style_value_t v = { lv_style_value_t v = {
@@ -360,16 +380,6 @@ void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value)
const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD = LV_STYLE_BG_GRAD; const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD = LV_STYLE_BG_GRAD;
void lv_style_set_bg_dither_mode(lv_style_t * style, lv_dither_mode_t value)
{
lv_style_value_t v = {
.num = (int32_t)value
};
lv_style_set_prop(style, LV_STYLE_BG_DITHER_MODE, v);
}
const lv_style_prop_t _lv_style_const_prop_id_BG_DITHER_MODE = LV_STYLE_BG_DITHER_MODE;
void lv_style_set_bg_image_src(lv_style_t * style, const void * value) void lv_style_set_bg_image_src(lv_style_t * style, const void * value)
{ {
lv_style_value_t v = { lv_style_value_t v = {

View File

@@ -78,10 +78,12 @@ void lv_style_set_bg_main_stop(lv_style_t * style, lv_coord_t value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_MAIN_STOP; extern const lv_style_prop_t _lv_style_const_prop_id_BG_MAIN_STOP;
void lv_style_set_bg_grad_stop(lv_style_t * style, lv_coord_t value); void lv_style_set_bg_grad_stop(lv_style_t * style, lv_coord_t value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_STOP; extern const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_STOP;
void lv_style_set_bg_main_opa(lv_style_t * style, lv_opa_t value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_MAIN_OPA;
void lv_style_set_bg_grad_opa(lv_style_t * style, lv_opa_t value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD_OPA;
void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value); void lv_style_set_bg_grad(lv_style_t * style, const lv_grad_dsc_t * value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD; extern const lv_style_prop_t _lv_style_const_prop_id_BG_GRAD;
void lv_style_set_bg_dither_mode(lv_style_t * style, lv_dither_mode_t value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_DITHER_MODE;
void lv_style_set_bg_image_src(lv_style_t * style, const void * value); void lv_style_set_bg_image_src(lv_style_t * style, const void * value);
extern const lv_style_prop_t _lv_style_const_prop_id_BG_IMAGE_SRC; extern const lv_style_prop_t _lv_style_const_prop_id_BG_IMAGE_SRC;
void lv_style_set_bg_image_opa(lv_style_t * style, lv_opa_t value); void lv_style_set_bg_image_opa(lv_style_t * style, lv_opa_t value);
@@ -391,16 +393,21 @@ extern const lv_style_prop_t _lv_style_const_prop_id_GRID_CELL_ROW_SPAN;
.prop_ptr = &_lv_style_const_prop_id_BG_GRAD_STOP, .value = { .num = (int32_t)val } \ .prop_ptr = &_lv_style_const_prop_id_BG_GRAD_STOP, .value = { .num = (int32_t)val } \
} }
#define LV_STYLE_CONST_BG_MAIN_OPA(val) \
{ \
.prop_ptr = &_lv_style_const_prop_id_BG_MAIN_OPA, .value = { .num = (int32_t)val } \
}
#define LV_STYLE_CONST_BG_GRAD_OPA(val) \
{ \
.prop_ptr = &_lv_style_const_prop_id_BG_GRAD_OPA, .value = { .num = (int32_t)val } \
}
#define LV_STYLE_CONST_BG_GRAD(val) \ #define LV_STYLE_CONST_BG_GRAD(val) \
{ \ { \
.prop_ptr = &_lv_style_const_prop_id_BG_GRAD, .value = { .ptr = val } \ .prop_ptr = &_lv_style_const_prop_id_BG_GRAD, .value = { .ptr = val } \
} }
#define LV_STYLE_CONST_BG_DITHER_MODE(val) \
{ \
.prop_ptr = &_lv_style_const_prop_id_BG_DITHER_MODE, .value = { .num = (int32_t)val } \
}
#define LV_STYLE_CONST_BG_IMAGE_SRC(val) \ #define LV_STYLE_CONST_BG_IMAGE_SRC(val) \
{ \ { \
.prop_ptr = &_lv_style_const_prop_id_BG_IMAGE_SRC, .value = { .ptr = val } \ .prop_ptr = &_lv_style_const_prop_id_BG_IMAGE_SRC, .value = { .ptr = val } \

View File

@@ -83,6 +83,7 @@
#define LV_USE_DEMO_STRESS 1 #define LV_USE_DEMO_STRESS 1
#define LV_USE_DEMO_TRANSFORM 1 #define LV_USE_DEMO_TRANSFORM 1
#define LV_USE_DEMO_MULTILANG 1 #define LV_USE_DEMO_MULTILANG 1
#define LV_USE_DEMO_RENDER 1
#define LV_USE_DEMO_SCROLL 1 #define LV_USE_DEMO_SCROLL 1
#define LV_USE_OBJ_ID 1 #define LV_USE_OBJ_ID 1