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

multi-disp: API updates

This commit is contained in:
Gabor Kiss-Vamosi 2019-02-20 10:16:33 +01:00
commit f2bd701927
57 changed files with 2035 additions and 1396 deletions

View File

@ -382,6 +382,13 @@
/*************************
* Non-user section
*************************/
#if LV_INDEV_DRAG_THROW <= 0
#warning "LV_INDEV_DRAG_THROW must be greater than 0"
#undef LV_INDEV_DRAG_THROW
#define LV_INDEV_DRAG_THROW 1
#endif
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) /* Disable warnings for Visual Studio*/
# define _CRT_SECURE_NO_WARNINGS
#endif

View File

@ -8,7 +8,9 @@
*********************/
#include "lv_group.h"
#if USE_LV_GROUP != 0
#include "../lv_themes/lv_theme.h"
#include <stddef.h>
#include "../lv_misc/lv_gc.h"
/*********************
* DEFINES
@ -23,7 +25,8 @@
**********************/
static void style_mod_def(lv_style_t * style);
static void style_mod_edit_def(lv_style_t * style);
static void lv_group_refocus(lv_group_t *g);
static void refresh_theme(lv_group_t * g, lv_theme_t * th);
static void lv_group_refocus(lv_group_t * g);
/**********************
* STATIC VARIABLES
@ -37,24 +40,35 @@ static void lv_group_refocus(lv_group_t *g);
* GLOBAL FUNCTIONS
**********************/
/**
* Init. the group module
*/
void lv_group_init(void)
{
lv_ll_init(&LV_GC_ROOT(_lv_group_ll), sizeof(lv_group_t));
}
/**
* Create a new object group
* @return pointer to the new object group
*/
lv_group_t * lv_group_create(void)
{
lv_group_t * group = lv_mem_alloc(sizeof(lv_group_t));
lv_group_t * group = lv_ll_ins_head(&LV_GC_ROOT(_lv_group_ll));
lv_mem_assert(group);
if(group == NULL) return NULL;
lv_ll_init(&group->obj_ll, sizeof(lv_obj_t *));
group->style_mod = style_mod_def;
group->style_mod_edit = style_mod_edit_def;
group->obj_focus = NULL;
group->frozen = 0;
group->focus_cb = NULL;
group->click_focus = 1;
group->editing = 0;
group->refocus_policy = LV_GROUP_REFOCUS_POLICY_PREV;
group->wrap = 1;
/*Initialize style modification callbacks from current theme*/
refresh_theme(group, lv_theme_get_current());
return group;
}
@ -460,6 +474,25 @@ bool lv_group_get_wrap(lv_group_t * group)
return group->wrap ? true : false;
}
/**
* Notify the group that current theme changed and style modification callbacks need to be refreshed.
* @param group pointer to group. If NULL then all groups are notified.
*/
void lv_group_report_style_mod(lv_group_t * group)
{
lv_theme_t * th = lv_theme_get_current();
if(group != NULL) {
refresh_theme(group, th);
return;
}
lv_group_t * i;
LL_READ(LV_GC_ROOT(_lv_group_ll), i) {
refresh_theme(i, th);
}
}
/**********************
* STATIC FUNCTIONS
**********************/
@ -522,4 +555,16 @@ static void style_mod_edit_def(lv_style_t * style)
}
static void refresh_theme(lv_group_t * g, lv_theme_t * th)
{
g->style_mod = style_mod_def;
g->style_mod_edit = style_mod_edit_def;
if(th) {
if(th->group.style_mod)
g->style_mod = th->group.style_mod;
if(th->group.style_mod_edit)
g->style_mod_edit = th->group.style_mod_edit;
}
}
#endif /*USE_LV_GROUP != 0*/

View File

@ -36,6 +36,8 @@ extern "C" {
#define LV_GROUP_KEY_ENTER 10 /*0x0A, '\n'*/
#define LV_GROUP_KEY_NEXT 9 /*0x09, '\t'*/
#define LV_GROUP_KEY_PREV 11 /*0x0B, '*/
#define LV_GROUP_KEY_HOME 2 /*0x02, STX*/
#define LV_GROUP_KEY_END 3 /*0x03, ETX*/
#if USE_LV_GROUP != 0
/**********************
@ -70,6 +72,12 @@ typedef enum _lv_group_refocus_policy_t {
* GLOBAL PROTOTYPES
**********************/
/**
* Init. the group module
* @remarks Internal function, do not call directly.
*/
void lv_group_init(void);
/**
* Create a new object group
* @return pointer to the new object group
@ -234,6 +242,12 @@ bool lv_group_get_click_focus(const lv_group_t * group);
*/
bool lv_group_get_wrap(lv_group_t * group);
/**
* Notify the group that current theme changed and style modification callbacks need to be refreshed.
* @param group pointer to group. If NULL then all groups are notified.
*/
void lv_group_report_style_mod(lv_group_t * group);
/**********************
* MACROS
**********************/

View File

@ -582,18 +582,20 @@ static void indev_proc_press(lv_indev_proc_t * proc)
if(proc->wait_unil_release != 0) return;
lv_disp_t * disp = indev_act->driver.disp;
/*If there is no last object then search*/
if(proc->act_obj == NULL) {
pr_obj = indev_search_obj(proc, lv_layer_sys(NULL));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_layer_top(NULL));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_scr_act(NULL));
pr_obj = indev_search_obj(proc, lv_layer_sys(disp));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_layer_top(disp));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_scr_act(disp));
}
/*If there is last object but it is not dragged and not protected also search*/
else if(proc->drag_in_prog == 0 &&
lv_obj_is_protected(proc->act_obj, LV_PROTECT_PRESS_LOST) == false) {/*Now act_obj != NULL*/
pr_obj = indev_search_obj(proc, lv_layer_sys(NULL));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_layer_top(NULL));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_scr_act(NULL));
pr_obj = indev_search_obj(proc, lv_layer_sys(disp));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_layer_top(disp));
if(pr_obj == NULL) pr_obj = indev_search_obj(proc, lv_scr_act(disp));
}
/*If a dragable or a protected object was the last then keep it*/
else {

View File

@ -38,9 +38,9 @@
/**********************
* STATIC PROTOTYPES
**********************/
static void refresh_childen_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff);
static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff);
static void report_style_mod_core(void * style_p, lv_obj_t * obj);
static void refresh_childen_style(lv_obj_t * obj);
static void refresh_children_style(lv_obj_t * obj);
static void delete_children(lv_obj_t * obj);
static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode);
static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param);
@ -86,6 +86,10 @@ void lv_init(void)
lv_anim_init();
#endif
#if USE_LV_GROUP
lv_group_init();
#endif
/*Init. the sstyles*/
lv_style_init();
@ -123,9 +127,10 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
/*Create a screen if the parent is NULL*/
if(parent == NULL) {
LV_LOG_TRACE("Screen create started");
lv_disp_t * disp = lv_disp_get_last();
lv_disp_t * disp = lv_disp_get_default();
if(!disp) {
LV_LOG_WARN("lv_obj_create: not display created to so far. No place to assign the new screen")
LV_LOG_WARN("lv_obj_create: not display created to so far. No place to assign the new screen");
return NULL;
}
new_obj = lv_ll_ins_head(&disp->scr_ll);
@ -154,7 +159,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
new_obj->style_p = th->bg;
new_obj->style_p = th->style.bg;
} else {
new_obj->style_p = &lv_style_scr;
}
@ -221,7 +226,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
/*Set appearance*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
new_obj->style_p = th->panel;
new_obj->style_p = th->style.panel;
} else {
new_obj->style_p = &lv_style_plain_color;
}
@ -543,7 +548,7 @@ void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
obj->coords.x2 += diff.x;
obj->coords.y2 += diff.y;
refresh_childen_position(obj, diff.x, diff.y);
refresh_children_position(obj, diff.x, diff.y);
/*Inform the object about its new coordinates*/
obj->signal_func(obj, LV_SIGNAL_CORD_CHG, &ori);
@ -979,7 +984,7 @@ void lv_obj_set_style(lv_obj_t * obj, lv_style_t * style)
obj->style_p = style;
/*Send a signal about style change to every children with NULL style*/
refresh_childen_style(obj);
refresh_children_style(obj);
/*Notify the object about the style change too*/
lv_obj_refresh_style(obj);
@ -1015,6 +1020,7 @@ void lv_obj_report_style_mod(lv_style_t * style)
report_style_mod_core(style, i);
}
d = lv_disp_get_next(d);
}
}
@ -1306,7 +1312,7 @@ void lv_obj_animate(lv_obj_t * obj, lv_anim_builtin_t type, uint16_t time, uint1
*/
lv_obj_t * lv_scr_act(lv_disp_t * disp)
{
if(!disp) disp = lv_disp_get_last();
if(!disp) disp = lv_disp_get_default();
if(!disp) {
LV_LOG_WARN("lv_scr_act: no display registered to get its top layer");
return NULL;
@ -1321,7 +1327,7 @@ lv_obj_t * lv_scr_act(lv_disp_t * disp)
*/
lv_obj_t * lv_layer_top(lv_disp_t * disp)
{
if(!disp) disp = lv_disp_get_last();
if(!disp) disp = lv_disp_get_default();
if(!disp) {
LV_LOG_WARN("lv_layer_top: no display registered to get its top layer");
return NULL;
@ -1336,7 +1342,7 @@ lv_obj_t * lv_layer_top(lv_disp_t * disp)
*/
lv_obj_t * lv_layer_sys(lv_disp_t * disp)
{
if(!disp) disp = lv_disp_get_last();
if(!disp) disp = lv_disp_get_default();
if(!disp) {
LV_LOG_WARN("lv_layer_sys: no display registered to get its top layer");
return NULL;
@ -1908,7 +1914,7 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
* @param x_diff x coordinate shift
* @param y_diff y coordinate shift
*/
static void refresh_childen_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff)
static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff)
{
lv_obj_t * i;
LL_READ(obj->child_ll, i) {
@ -1917,7 +1923,7 @@ static void refresh_childen_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coord
i->coords.x2 += x_diff;
i->coords.y2 += y_diff;
refresh_childen_position(i, x_diff, y_diff);
refresh_children_position(i, x_diff, y_diff);
}
}
@ -1931,7 +1937,7 @@ static void report_style_mod_core(void * style_p, lv_obj_t * obj)
lv_obj_t * i;
LL_READ(obj->child_ll, i) {
if(i->style_p == style_p || style_p == NULL) {
refresh_childen_style(i);
refresh_children_style(i);
lv_obj_refresh_style(i);
}
@ -1944,16 +1950,16 @@ static void report_style_mod_core(void * style_p, lv_obj_t * obj)
* because the NULL styles are inherited from the parent
* @param obj pointer to an object
*/
static void refresh_childen_style(lv_obj_t * obj)
static void refresh_children_style(lv_obj_t * obj)
{
lv_obj_t * child = lv_obj_get_child(obj, NULL);
while(child != NULL) {
if(child->style_p == NULL) {
refresh_childen_style(child); /*Check children too*/
refresh_children_style(child); /*Check children too*/
lv_obj_refresh_style(child); /*Notify the child about the style change*/
} else if(child->style_p->glass) {
/*Children with 'glass' parent might be effected if their style == NULL*/
refresh_childen_style(child);
refresh_children_style(child);
}
child = lv_obj_get_child(obj, child);
}

View File

@ -62,19 +62,6 @@ void lv_refr_init(void)
lv_task_ready(task); /*Be sure the screen will be refreshed immediately on start up*/
}
/**
* Call in the display driver's 'disp_flush' function when the flushing is finished
*/
LV_ATTRIBUTE_FLUSH_READY void lv_flush_ready(lv_disp_t * disp)
{
disp->driver.buffer->internal.flushing = 0;
/*If the screen is transparent initialize it when the flushing is ready*/
#if LV_VDB_DOUBLE == 0 && LV_COLOR_SCREEN_TRANSP
memset(vdb_buf, 0x00, LV_VDB_SIZE_IN_BYTES);
#endif
}
/**
* Redraw the invalidated areas now.
* Normally the redrawing is periodically executed in `lv_task_handler` but a long blocking process can
@ -94,7 +81,7 @@ void lv_refr_now(void)
*/
void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p)
{
if(!disp) disp = lv_disp_get_last();
if(!disp) disp = lv_disp_get_default();
if(!disp) return;
/*Clear the invalidate buffer if the parameter is NULL*/
@ -194,7 +181,7 @@ static void lv_refr_task(void * param)
if(disp_refr->inv_p != 0) {
/*In true double buffered mode copy the refreshed areas to the new VDB to keep it up to date*/
if(lv_disp_is_true_double_buffered(disp_refr)) {
lv_vdb_t * vdb = lv_disp_get_vdb(disp_refr);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp_refr);
/*Flush the content of the VDB*/
lv_refr_vdb_flush();
@ -202,7 +189,7 @@ static void lv_refr_task(void * param)
/* With true double buffering the flushing should be only the address change of the current frame buffer.
* Wait until the address change is ready and copy the changed content to the other frame buffer (new active VDB)
* to keep the buffers synchronized*/
while(vdb->internal.flushing);
while(vdb->flushing);
uint8_t * buf_act = (uint8_t *) vdb->buf_act;
uint8_t * buf_ina = (uint8_t *) vdb->buf_act == vdb->buf1 ? vdb->buf2 : vdb->buf1;
@ -304,7 +291,7 @@ static void lv_refr_area(const lv_area_t * area_p)
{
/*True double buffering: there are two screen sized buffers. Just redraw directly into a buffer*/
if(lv_disp_is_true_double_buffered(disp_refr)) {
lv_vdb_t * vdb = lv_disp_get_vdb(disp_refr);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp_refr);
vdb->area.x1 = 0;
vdb->area.x2 = LV_HOR_RES-1;
vdb->area.y1 = 0;
@ -313,7 +300,7 @@ static void lv_refr_area(const lv_area_t * area_p)
}
/*The buffer is smaller: refresh the area in parts*/
else {
lv_vdb_t * vdb = lv_disp_get_vdb(disp_refr);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp_refr);
/*Calculate the max row num*/
lv_coord_t w = lv_area_get_width(area_p);
lv_coord_t h = lv_area_get_height(area_p);
@ -381,11 +368,11 @@ static void lv_refr_area(const lv_area_t * area_p)
static void lv_refr_area_part(const lv_area_t * area_p)
{
lv_vdb_t * vdb = lv_disp_get_vdb(disp_refr);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp_refr);
/*In non double buffered mode, before rendering the next part wait until the previous image is flushed*/
if(lv_disp_is_double_vdb(disp_refr) == false) {
while(vdb->internal.flushing);
while(vdb->flushing);
}
lv_obj_t * top_p;
@ -565,14 +552,14 @@ static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
*/
static void lv_refr_vdb_flush(void)
{
lv_vdb_t * vdb = lv_disp_get_vdb(lv_refr_get_disp_refreshing());
lv_disp_buf_t * vdb = lv_disp_get_vdb(lv_refr_get_disp_refreshing());
/*In double buffered mode wait until the other buffer is flushed before flushing the current one*/
if(vdb->buf1 && vdb->buf2) {
while(vdb->internal.flushing);
while(vdb->flushing);
}
vdb->internal.flushing = 1;
vdb->flushing = 1;
/*Flush the rendered content to the display*/
lv_disp_t * disp = lv_refr_get_disp_refreshing();

View File

@ -19,9 +19,6 @@ extern "C" {
/*********************
* DEFINES
*********************/
#ifndef LV_ATTRIBUTE_FLUSH_READY
# define LV_ATTRIBUTE_FLUSH_READY
#endif
/**********************
* TYPEDEFS
@ -48,11 +45,6 @@ extern "C" {
*/
void lv_refr_init(void);
/**
* Call in the display driver's 'disp_flush' function when the flushing is finished
*/
LV_ATTRIBUTE_FLUSH_READY void lv_flush_ready(lv_disp_t * disp);
/**
* Redraw the invalidated areas now.
* Normally the redrawing is periodically executed in `lv_task_handler` but a long blocking process can

View File

@ -79,7 +79,7 @@ void lv_draw_px(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_color_t
}
lv_disp_t * disp = lv_refr_get_disp_refreshing();
lv_vdb_t * vdb = lv_disp_get_vdb(disp);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp);
uint32_t vdb_width = lv_area_get_width(&vdb->area);
/*Make the coordinates relative to VDB*/
@ -129,7 +129,7 @@ void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p,
if(union_ok == false) return;
lv_disp_t * disp = lv_refr_get_disp_refreshing();
lv_vdb_t * vdb = lv_disp_get_vdb(disp);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp);
lv_area_t vdb_rel_a; /*Stores relative coordinates on vdb*/
vdb_rel_a.x1 = res_a.x1 - vdb->area.x1;
@ -290,7 +290,7 @@ void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * mask_p,
pos_y + letter_h < mask_p->y1 || pos_y > mask_p->y2) return;
lv_disp_t * disp = lv_refr_get_disp_refreshing();
lv_vdb_t * vdb = lv_disp_get_vdb(disp);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp);
lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
lv_color_t * vdb_buf_tmp = vdb->buf_act;
@ -409,7 +409,7 @@ void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p,
}
lv_disp_t * disp = lv_refr_get_disp_refreshing();
lv_vdb_t * vdb = lv_disp_get_vdb(disp);
lv_disp_buf_t * vdb = lv_disp_get_vdb(disp);
/*Stores coordinates relative to the current VDB*/
masked_a.x1 = masked_a.x1 - vdb->area.x1;

View File

@ -77,6 +77,14 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
pos.x = coords->x1;
pos.y = coords->y1;
lv_coord_t x_ofs = 0;
lv_coord_t y_ofs = 0;
if(offset != NULL) {
x_ofs = offset->x;
y_ofs = offset->y;
pos.y += y_ofs;
}
uint32_t line_start = 0;
uint32_t line_end = lv_txt_get_next_line(txt, font, style->text.letter_space, w, flag);
@ -114,14 +122,6 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
lv_color_t recolor;
lv_coord_t letter_w;
lv_coord_t x_ofs = 0;
lv_coord_t y_ofs = 0;
if(offset != NULL) {
x_ofs = offset->x;
y_ofs = offset->y;
pos.y += y_ofs;
}
/*Write out all lines*/
while(txt[line_start] != '\0') {
if(offset != NULL) {

View File

@ -24,6 +24,9 @@
/*********************
* DEFINES
*********************/
#ifndef LV_ATTRIBUTE_FLUSH_READY
# define LV_ATTRIBUTE_FLUSH_READY
#endif
/**********************
* TYPEDEFS
@ -36,6 +39,7 @@
/**********************
* STATIC VARIABLES
**********************/
static lv_disp_t * disp_def;
/**********************
* MACROS
@ -53,9 +57,12 @@
*/
void lv_disp_drv_init(lv_disp_drv_t * driver)
{
memset(driver, 0, sizeof(lv_disp_drv_t));
driver->disp_flush = NULL;
driver->hor_res = LV_HOR_RES_MAX;
driver->ver_res = LV_VER_RES_MAX;
driver->buffer = NULL;
#if USE_LV_GPU
driver->mem_blend = NULL;
@ -65,6 +72,33 @@ void lv_disp_drv_init(lv_disp_drv_t * driver)
driver->vdb_wr = NULL;
}
/**
* Initialize a display buffer
* @param disp_buf pointer `lv_disp_buf_t` variable to initialize
* @param buf1 A buffer to be used by LittlevGL to draw the image.
* Always has to specified and can't be NULL.
* Can be an array allocated by the user. E.g. `static lv_color_t disp_buf1[1024 * 10]`
* Or a memory address e.g. in external SRAM
* @param buf2 Optionally specify a second buffer to make image rendering and image flushing
* (sending to the display) parallel.
* In the `disp_drv->flush` you should use DMA or similar hardware to send
* the image to the display in the background.
* It lets LittlevGL to render next frame into the other buffer while previous is being sent.
* Set to `NULL` if unused.
* @param size size of the `buf1` and `buf2` in pixel count.
*/
void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size)
{
memset(disp_buf, 0, sizeof(lv_disp_buf_t));
disp_buf->buf1 = buf1;
disp_buf->buf2 = buf2;
disp_buf->buf_act = disp_buf->buf1;
disp_buf->size = size;
}
/**
* Register an initialized display driver.
* Automatically set the first display as active.
@ -83,16 +117,25 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
lv_ll_init(&disp->scr_ll, sizeof(lv_obj_t));
if(disp_def == NULL) disp_def = disp;
disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
disp->sys_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
lv_obj_set_style(disp->top_layer, &lv_style_transp);
lv_obj_set_style(disp->sys_layer, &lv_style_transp);
lv_disp_assign_screen(disp, disp->act_scr);
lv_disp_assign_screen(disp, disp->top_layer);
lv_disp_assign_screen(disp, disp->sys_layer);
disp->inv_p = 0;
disp->vdb_act = 0;
disp->vdb_flushing = 0;
lv_obj_invalidate(disp->act_scr);
return disp;
}
@ -108,19 +151,25 @@ lv_disp_t * lv_disp_get_next(lv_disp_t * disp)
}
lv_disp_t * lv_disp_get_last(void)
void lv_disp_set_default(lv_disp_t * disp)
{
return lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll));
disp_def = disp;
}
lv_vdb_t * lv_disp_get_vdb(lv_disp_t * disp)
lv_disp_t * lv_disp_get_default(void)
{
return disp_def;
}
lv_disp_buf_t * lv_disp_get_vdb(lv_disp_t * disp)
{
return disp->driver.buffer;
}
lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)
{
if(disp == NULL) disp = lv_disp_get_last();
if(disp == NULL) disp = lv_disp_get_default();
if(disp == NULL) return LV_HOR_RES_MAX;
else return disp->driver.hor_res;
@ -129,7 +178,7 @@ lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)
lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp)
{
if(disp == NULL) disp = lv_disp_get_last();
if(disp == NULL) disp = lv_disp_get_default();
if(disp == NULL) return LV_VER_RES_MAX;
else return disp->driver.ver_res;
@ -147,6 +196,21 @@ bool lv_disp_is_true_double_buffered(lv_disp_t * disp)
else return false;
}
/**
* Call in the display driver's `flush` function when the flushing is finished
*/
LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_t * disp)
{
disp->driver.buffer->flushing = 0;
/*If the screen is transparent initialize it when the flushing is ready*/
#if LV_COLOR_SCREEN_TRANSP
memset(vdb_buf, 0x00, LV_VDB_SIZE_IN_BYTES);
#endif
}
/**********************
* STATIC FUNCTIONS
**********************/

View File

@ -38,33 +38,28 @@ struct _disp_t;
typedef struct
{
void * buf_act;
void * buf1;
void * buf2;
uint32_t size; /*In pixel count*/
struct {
uint32_t double_buffered :1;
uint32_t true_double_buffered :1;
}mode;
/*Used by the library*/
void * buf_act;
uint32_t size; /*In pixel count*/
lv_area_t area;
struct {
uint32_t flushing :1;
}internal;
}lv_vdb_t;
uint32_t flushing :1;
}lv_disp_buf_t;
/**
* Display Driver structure to be registered by HAL
*/
typedef struct _disp_drv_t {
void * user_data;
int user_data;
lv_coord_t hor_res;
lv_coord_t ver_res;
lv_vdb_t * buffer;
lv_disp_buf_t * buffer;
/*Write the internal buffer (VDB) to the display. 'lv_flush_ready()' has to be called when finished*/
void (*disp_flush)(struct _disp_t * disp, const lv_area_t * area, lv_color_t * color_p);
@ -119,9 +114,29 @@ void lv_disp_drv_init(lv_disp_drv_t *driver);
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t *driver);
lv_disp_t * lv_disp_get_last(void);
/**
* Initialize a display buffer
* @param disp_buf pointer `lv_disp_buf_t` variable to initialize
* @param buf1 A buffer to be used by LittlevGL to draw the image.
* Always has to specified and can't be NULL.
* Can be an array allocated by the user. E.g. `static lv_color_t disp_buf1[1024 * 10]`
* Or a memory address e.g. in external SRAM
* @param buf2 Optionally specify a second buffer to make image rendering and image flushing
* (sending to the display) parallel.
* In the `disp_drv->flush` you should use DMA or similar hardware to send
* the image to the display in the background.
* It lets LittlevGL to render next frame into the other buffer while previous is being sent.
* Set to `NULL` if unused.
* @param size size of the `buf1` and `buf2` in pixel count.
*/
void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size);
lv_vdb_t * lv_disp_get_vdb(lv_disp_t * disp);
void lv_disp_set_default(lv_disp_t * disp);
lv_disp_t * lv_disp_get_default(void);
lv_disp_buf_t * lv_disp_get_vdb(lv_disp_t * disp);
/**
* Get the next display.
* @param disp pointer to the current display. NULL to initialize.

View File

@ -64,7 +64,7 @@ void lv_indev_drv_init(lv_indev_drv_t * driver)
lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
{
if(driver->disp == NULL) driver->disp = lv_disp_get_last();
if(driver->disp == NULL) driver->disp = lv_disp_get_default();
if(driver->disp == NULL) {
LV_LOG_WARN("lv_indev_drv_register: no display registered hence can't attache the indev to a display");

View File

@ -36,6 +36,7 @@ extern "C" {
prefix lv_ll_t _lv_drv_ll;\
prefix lv_ll_t _lv_file_ll;\
prefix lv_ll_t _lv_anim_ll;\
prefix lv_ll_t _lv_group_ll;\
prefix void * _lv_task_act;\

View File

@ -8,6 +8,7 @@
*********************/
#include "lv_math.h"
#include <stdbool.h>
#include <stdlib.h>
/*********************
* DEFINES
@ -34,7 +35,7 @@ static int16_t sin0_90_table[] = {
28377, 28659, 28932, 29196, 29451, 29697, 29934, 30162, 30381, 30591,
30791, 30982, 31163, 31335, 31498, 31650, 31794, 31927, 32051, 32165,
32269, 32364, 32448, 32523, 32587, 32642, 32687, 32722, 32747, 32762,
32767
32767
};
@ -54,53 +55,33 @@ static int16_t sin0_90_table[] = {
*/
char * lv_math_num_to_str(int32_t num, char * buf)
{
char * buf_ori = buf;
if(num == 0) {
if (num == 0) {
buf[0] = '0';
buf[1] = '\0';
return buf;
} else if(num < 0) {
(*buf) = '-';
buf++;
num = LV_MATH_ABS(num);
}
uint32_t output = 0;
int8_t i;
for(i = 31; i >= 0; i--) {
if((output & 0xF) >= 5)
output += 3;
if(((output & 0xF0) >> 4) >= 5)
output += (3 << 4);
if(((output & 0xF00) >> 8) >= 5)
output += (3 << 8);
if(((output & 0xF000) >> 12) >= 5)
output += (3 << 12);
if(((output & 0xF0000) >> 16) >= 5)
output += (3 << 16);
if(((output & 0xF00000) >> 20) >= 5)
output += (3 << 20);
if(((output & 0xF000000) >> 24) >= 5)
output += (3 << 24);
if(((output & 0xF0000000) >> 28) >= 5)
output += (3 << 28);
output = (output << 1) | ((num >> i) & 1);
int8_t digitCount = 0;
int8_t i = 0;
if (num < 0) {
buf[digitCount++] = '-';
num = abs(num);
++i;
}
uint8_t digit;
bool leading_zero_ready = false;
for(i = 28; i >= 0; i -= 4) {
digit = ((output >> i) & 0xF) + '0';
if(digit == '0' && leading_zero_ready == false) continue;
leading_zero_ready = true;
(*buf) = digit;
buf++;
while (num) {
char digit = num % 10;
buf[digitCount++] = digit + 48;
num /= 10;
}
(*buf) = '\0';
return buf_ori;
buf[digitCount] = '\0';
digitCount--;
while (digitCount > i) {
char temp = buf[i];
buf[i] = buf[digitCount];
buf[digitCount] = temp;
digitCount--;
i++;
}
return buf;
}
/**

View File

@ -19,9 +19,9 @@ extern "C" {
/*********************
* DEFINES
*********************/
#define LV_MATH_MIN(a,b) (a<b?a:b)
#define LV_MATH_MAX(a,b) (a>b?a:b)
#define LV_MATH_ABS(x) ((x)>0?(x):(-(x)))
#define LV_MATH_MIN(a,b) ((a) < (b) ? (a) : (b))
#define LV_MATH_MAX(a,b) ((a) > (b) ? (a) : (b))
#define LV_MATH_ABS(x) ((x) > 0 ? (x) : (-(x)))
#define LV_TRIGO_SIN_MAX 32767
#define LV_TRIGO_SHIFT 15 /* >> LV_TRIGO_SHIFT to normalize*/

View File

@ -73,7 +73,7 @@ extern "C" {
#define SYMBOL_BATTERY_EMPTY _SYMBOL_VALUE1(F0)
#define SYMBOL_BLUETOOTH _SYMBOL_VALUE1(F1)
#define LV_SYMBOL_GLYPH_LAST 0xF1
#define SYMBOL_DUMMY _SYMBOL_VALUE1(xFF) /*Invalid symbol. If written before a string then `lv_img` will show it as a label*/
#define SYMBOL_DUMMY _SYMBOL_VALUE1(FF) /*Invalid symbol. If written before a string then `lv_img` will show it as a label*/
#else
#define LV_SYMBOL_GLYPH_FIRST 0xF800

View File

@ -80,7 +80,7 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, th->arc);
lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, th->style.arc);
} else {
lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, &lv_style_plain_color);
}

View File

@ -84,8 +84,8 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_bar_set_style(new_bar, LV_BAR_STYLE_BG, th->bar.bg);
lv_bar_set_style(new_bar, LV_BAR_STYLE_INDIC, th->bar.indic);
lv_bar_set_style(new_bar, LV_BAR_STYLE_BG, th->style.bar.bg);
lv_bar_set_style(new_bar, LV_BAR_STYLE_INDIC, th->style.bar.indic);
} else {
lv_obj_set_style(new_bar, &lv_style_pretty);
}

View File

@ -123,11 +123,11 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_btn_set_style(new_btn, LV_BTN_STYLE_REL, th->btn.rel);
lv_btn_set_style(new_btn, LV_BTN_STYLE_PR, th->btn.pr);
lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_REL, th->btn.tgl_rel);
lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_PR, th->btn.tgl_pr);
lv_btn_set_style(new_btn, LV_BTN_STYLE_INA, th->btn.ina);
lv_btn_set_style(new_btn, LV_BTN_STYLE_REL, th->style.btn.rel);
lv_btn_set_style(new_btn, LV_BTN_STYLE_PR, th->style.btn.pr);
lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_REL, th->style.btn.tgl_rel);
lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_PR, th->style.btn.tgl_pr);
lv_btn_set_style(new_btn, LV_BTN_STYLE_INA, th->style.btn.ina);
} else {
lv_obj_set_style(new_btn, ext->styles[LV_BTN_STATE_REL]);
}

View File

@ -103,12 +103,12 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BG, th->btnm.bg);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_REL, th->btnm.btn.rel);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_PR, th->btnm.btn.pr);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_REL, th->btnm.btn.tgl_rel);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_PR, th->btnm.btn.tgl_pr);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_INA, th->btnm.btn.ina);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BG, th->style.btnm.bg);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_REL, th->style.btnm.btn.rel);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_PR, th->style.btnm.btn.pr);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_REL, th->style.btnm.btn.tgl_rel);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_PR, th->style.btnm.btn.tgl_pr);
lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_INA, th->style.btnm.btn.ina);
} else {
lv_obj_set_style(new_btnm, &lv_style_pretty);
}

View File

@ -130,14 +130,14 @@ lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, th->calendar.bg);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, th->calendar.header);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, th->calendar.header_pr);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, th->calendar.day_names);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, th->calendar.week_box);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, th->calendar.today_box);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, th->calendar.highlighted_days);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_INACTIVE_DAYS, th->calendar.inactive_days);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, th->style.calendar.bg);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, th->style.calendar.header);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER_PR, th->style.calendar.header_pr);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_DAY_NAMES, th->style.calendar.day_names);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_WEEK_BOX, th->style.calendar.week_box);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_TODAY_BOX, th->style.calendar.today_box);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS, th->style.calendar.highlighted_days);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_INACTIVE_DAYS, th->style.calendar.inactive_days);
} else {
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_BG, &lv_style_pretty);
lv_calendar_set_style(new_calendar, LV_CALENDAR_STYLE_HEADER, ext->style_header);

View File

@ -88,12 +88,12 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_cb_set_style(new_cb, LV_CB_STYLE_BG, th->cb.bg);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, th->cb.box.rel);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_PR, th->cb.box.pr);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_REL, th->cb.box.tgl_rel);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_PR, th->cb.box.tgl_pr);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_INA, th->cb.box.ina);
lv_cb_set_style(new_cb, LV_CB_STYLE_BG, th->style.cb.bg);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, th->style.cb.box.rel);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_PR, th->style.cb.box.pr);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_REL, th->style.cb.box.tgl_rel);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_TGL_PR, th->style.cb.box.tgl_pr);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_INA, th->style.cb.box.ina);
} else {
lv_cb_set_style(new_cb, LV_CB_STYLE_BG, &lv_style_transp);
lv_cb_set_style(new_cb, LV_CB_STYLE_BOX_REL, &lv_style_pretty);

View File

@ -95,7 +95,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_chart_set_style(new_chart, th->chart);
lv_chart_set_style(new_chart, th->style.chart);
} else {
lv_chart_set_style(new_chart, &lv_style_pretty);
}
@ -175,9 +175,10 @@ void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
if(chart == NULL || serie == NULL)
return;
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext == NULL)
return;
for(uint32_t i = 0; i < ext->point_cnt; i++)
if(ext == NULL) return;
uint32_t i;
for(i = 0; i < ext->point_cnt; i++)
{
serie->points[i] = LV_CHART_POINT_DEF;
}

View File

@ -89,7 +89,7 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_cont_set_style(new_cont, th->cont);
lv_cont_set_style(new_cont, th->style.cont);
} else {
lv_cont_set_style(new_cont, &lv_style_pretty);
}

View File

@ -118,9 +118,9 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, th->ddlist.bg);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, th->ddlist.sel);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, th->ddlist.sb);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, th->style.ddlist.bg);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, th->style.ddlist.sel);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, th->style.ddlist.sb);
} else {
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, &lv_style_pretty);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, &lv_style_plain_color);
@ -624,6 +624,7 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
} else if(sign == LV_SIGNAL_CLEANUP) {
ext->label = NULL;
} else if(sign == LV_SIGNAL_FOCUS) {
#if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(ddlist);
bool editing = lv_group_get_editing(g);
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
@ -651,6 +652,7 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
lv_ddlist_refr_size(ddlist, true);
}
}
#endif
} else if(sign == LV_SIGNAL_DEFOCUS) {
if(ext->opened) {
ext->opened = false;
@ -686,9 +688,11 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
ext->opened = 0;
if(ext->action) ext->action(ddlist);
#if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(ddlist);
bool editing = lv_group_get_editing(g);
if(editing) lv_group_set_editing(g, false); /*In edit mode go to navigate mode if an option is selected*/
#endif
} else {
ext->opened = 1;
}

View File

@ -95,7 +95,7 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_gauge_set_style(new_gauge, th->gauge);
lv_gauge_set_style(new_gauge, th->style.gauge);
} else {
lv_gauge_set_style(new_gauge, &lv_style_pretty_color);
}

View File

@ -81,11 +81,10 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
}
/*Copy an existing image button*/
else {
#if LV_IMGBTN_TILED == 0
memset(ext->img_src, 0, sizeof(ext->img_src));
#else
lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
#if LV_IMGBTN_TILED == 0
memcpy(ext->img_src, copy_ext->img_src, sizeof(ext->img_src));
#else
memcpy(ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left));
memcpy(ext->img_src_mid, copy_ext->img_src_mid, sizeof(ext->img_src_mid));
memcpy(ext->img_src_right, copy_ext->img_src_right, sizeof(ext->img_src_right));
@ -386,7 +385,7 @@ static void refr_img(lv_obj_t * imgbtn)
ext->act_cf = LV_IMG_CF_UNKOWN;
}
lv_obj_invalidate(imgbtn);
}
#endif

View File

@ -110,12 +110,12 @@ lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_kb_set_style(new_kb, LV_KB_STYLE_BG, th->kb.bg);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_REL, th->kb.btn.rel);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_PR, th->kb.btn.pr);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_REL, th->kb.btn.tgl_rel);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_PR, th->kb.btn.tgl_pr);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_INA, th->kb.btn.ina);
lv_kb_set_style(new_kb, LV_KB_STYLE_BG, th->style.kb.bg);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_REL, th->style.kb.btn.rel);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_PR, th->style.kb.btn.pr);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_REL, th->style.kb.btn.tgl_rel);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_TGL_PR, th->style.kb.btn.tgl_pr);
lv_kb_set_style(new_kb, LV_KB_STYLE_BTN_INA, th->style.kb.btn.ina);
} else {
/*Let the button matrix's styles*/
}

View File

@ -555,7 +555,7 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
uint32_t i = line_start;
uint32_t i_current = i;
uint32_t letter;
while(i < new_line_start - 1) {
while(i <= new_line_start - 1) {
letter = lv_txt_encoded_next(txt, &i); /*Be careful 'i' already points to the next character*/
/*Handle the recolor command*/
if((flag & LV_TXT_FLAG_RECOLOR) != 0) {

View File

@ -79,7 +79,7 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_led_set_style(new_led, th->led);
lv_led_set_style(new_led, th->style.led);
} else {
lv_led_set_style(new_led, &lv_style_pretty_color);
}

View File

@ -109,14 +109,14 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_list_set_style(new_list, LV_LIST_STYLE_BG, th->list.bg);
lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, th->list.scrl);
lv_list_set_style(new_list, LV_LIST_STYLE_SB, th->list.sb);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, th->list.btn.rel);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, th->list.btn.pr);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, th->list.btn.tgl_rel);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, th->list.btn.tgl_pr);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, th->list.btn.ina);
lv_list_set_style(new_list, LV_LIST_STYLE_BG, th->style.list.bg);
lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, th->style.list.scrl);
lv_list_set_style(new_list, LV_LIST_STYLE_SB, th->style.list.sb);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_REL, th->style.list.btn.rel);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_PR, th->style.list.btn.pr);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_REL, th->style.list.btn.tgl_rel);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_TGL_PR, th->style.list.btn.tgl_pr);
lv_list_set_style(new_list, LV_LIST_STYLE_BTN_INA, th->style.list.btn.ina);
} else {
lv_list_set_style(new_list, LV_LIST_STYLE_BG, &lv_style_transp_fit);
lv_list_set_style(new_list, LV_LIST_STYLE_SCRL, &lv_style_pretty);
@ -300,6 +300,7 @@ void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
}
ext->selected_btn = btn;
ext->last_sel = btn;
if(ext->selected_btn) {
lv_btn_state_t s = lv_btn_get_state(ext->selected_btn);
@ -760,7 +761,7 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
lv_group_t * g = lv_obj_get_group(list);
if(lv_group_get_editing(g)) {
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
if(NULL != ext->last_sel) {
if(ext->last_sel) {
/* Select the last used button */
lv_list_set_btn_selected(list, ext->last_sel);
}
@ -779,7 +780,7 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
lv_list_set_btn_selected(list, last_clicked_btn);
} else {
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
if(NULL != ext->last_sel) {
if(ext->last_sel) {
/* Select the last used button */
lv_list_set_btn_selected(list, ext->last_sel);
}

View File

@ -59,8 +59,8 @@ typedef struct
uint32_t size; /*the number of items(buttons) in the list*/
bool single_mode; /* whether single selected mode is enabled */
#if USE_LV_GROUP
lv_obj_t * last_sel; /* Last btn selected */
lv_obj_t * selected_btn;
lv_obj_t * last_sel; /* The last selected button. It will be reverted when the list is focused again */
lv_obj_t * selected_btn; /* The button is currently being selected*/
#endif
} lv_list_ext_t;

View File

@ -84,7 +84,7 @@ lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_lmeter_set_style(new_lmeter, th->lmeter);
lv_lmeter_set_style(new_lmeter, th->style.lmeter);
} else {
lv_lmeter_set_style(new_lmeter, &lv_style_pretty_color);
}

View File

@ -97,7 +97,7 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, th->mbox.bg);
lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, th->style.mbox.bg);
} else {
lv_mbox_set_style(new_mbox, LV_MBOX_STYLE_BG, &lv_style_pretty);
}
@ -144,9 +144,9 @@ void lv_mbox_add_btns(lv_obj_t * mbox, const char ** btn_map, lv_btnm_action_t a
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_BG, th->mbox.btn.bg);
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_REL, th->mbox.btn.rel);
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_PR, th->mbox.btn.pr);
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_BG, th->style.mbox.btn.bg);
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_REL, th->style.mbox.btn.rel);
lv_mbox_set_style(mbox, LV_MBOX_STYLE_BTN_PR, th->style.mbox.btn.pr);
} else {
lv_btnm_set_style(ext->btnm, LV_BTNM_STYLE_BG, &lv_style_transp_fit);
}

View File

@ -116,14 +116,14 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
lv_theme_t * th = lv_theme_get_current();
if(th) {
if(par == NULL) { /*Different styles if it is screen*/
lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->bg);
lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.bg);
lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_transp);
} else {
lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->page.bg);
lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, th->page.scrl);
lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.page.bg);
lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, th->style.page.scrl);
}
lv_page_set_style(new_page, LV_PAGE_STYLE_SB, th->page.sb);
lv_page_set_style(new_page, LV_PAGE_STYLE_SB, th->style.page.sb);
} else {
lv_page_set_style(new_page, LV_PAGE_STYLE_BG, &lv_style_pretty_color);
lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_pretty);

View File

@ -93,7 +93,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_preload_set_style(new_preload, LV_PRELOAD_STYLE_MAIN, th->preload);
lv_preload_set_style(new_preload, LV_PRELOAD_STYLE_MAIN, th->style.preload);
} else {
lv_obj_set_style(new_preload, &lv_style_pretty_color);
}

View File

@ -96,8 +96,8 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_roller_set_style(new_roller, LV_ROLLER_STYLE_BG, th->roller.bg);
lv_roller_set_style(new_roller, LV_ROLLER_STYLE_SEL, th->roller.sel);
lv_roller_set_style(new_roller, LV_ROLLER_STYLE_BG, th->style.roller.bg);
lv_roller_set_style(new_roller, LV_ROLLER_STYLE_SEL, th->style.roller.sel);
} else {
/*Let the ddlist's style*/
lv_obj_refresh_style(new_roller); /*To set scrollable size automatically*/
@ -361,6 +361,7 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
refr_position(roller, false);
}
} else if(sign == LV_SIGNAL_FOCUS) {
#if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(roller);
bool editing = lv_group_get_editing(g);
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
@ -382,12 +383,15 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Save the current value. Used to revert this state if ENER wont't be pressed*/
}
#endif
} else if(sign == LV_SIGNAL_DEFOCUS) {
#if USE_LV_GROUP
/*Revert the original state*/
if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori;
refr_position(roller, true);
}
#endif
} else if(sign == LV_SIGNAL_CONTROLL) {
char c = *((char *)param);
if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_DOWN) {
@ -402,9 +406,11 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Set the entered value as default*/
if(ext->ddlist.action) ext->ddlist.action(roller);
#if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(roller);
bool editing = lv_group_get_editing(g);
if(editing) lv_group_set_editing(g, false); /*In edit mode go to navigate mode if an option is selected*/
#endif
}
} else if(sign == LV_SIGNAL_GET_TYPE) {
lv_obj_type_t * buf = param;

View File

@ -86,9 +86,9 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_BG, th->slider.bg);
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_INDIC, th->slider.indic);
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, th->slider.knob);
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_BG, th->style.slider.bg);
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_INDIC, th->style.slider.indic);
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, th->style.slider.knob);
} else {
lv_slider_set_style(new_slider, LV_SLIDER_STYLE_KNOB, ext->style_knob);
}

View File

@ -10,6 +10,7 @@
#if USE_LV_SPINBOX != 0
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_math.h"
/*********************
* DEFINES
@ -64,7 +65,7 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
/*Initialize the allocated 'ext'*/
ext->ta.one_line = 1;
ext->ta.pwd_mode = 0;
ext->ta.accapted_chars = "1234567890+-.";
ext->ta.accapted_chars = "1234567890+-. ";
ext->value = 0;
ext->dec_point_pos = 0;
@ -86,9 +87,9 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_BG, th->spinbox.bg);
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_CURSOR, th->spinbox.cursor);
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_SB, th->spinbox.sb);
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_BG, th->style.spinbox.bg);
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_CURSOR, th->style.spinbox.cursor);
lv_spinbox_set_style(new_spinbox, LV_SPINBOX_STYLE_SB, th->style.spinbox.sb);
}
}
/*Copy an existing spinbox*/
@ -188,13 +189,11 @@ void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_m
ext->range_max = range_max;
ext->range_min = range_min;
if(ext->value > ext->range_max)
{
if(ext->value > ext->range_max) {
ext->value = ext->range_max;
lv_obj_invalidate(spinbox);
}
if(ext->value < ext->range_min)
{
if(ext->value < ext->range_min) {
ext->value = ext->range_min;
lv_obj_invalidate(spinbox);
}
@ -251,11 +250,9 @@ void lv_spinbox_step_next(lv_obj_t * spinbox)
{
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if((ext->step / 10) < ext->range_max && (ext->step / 10) > ext->range_min && (ext->step / 10) > 0)
{
ext->step /= 10;
}
int32_t new_step = ext->step / 10;
if((new_step) > 0) ext->step = new_step;
else ext->step = 1;
lv_spinbox_updatevalue(spinbox);
}
@ -267,12 +264,10 @@ void lv_spinbox_step_next(lv_obj_t * spinbox)
void lv_spinbox_step_previous(lv_obj_t * spinbox)
{
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if((ext->step * 10) <= ext->range_max && (ext->step * 10) > ext->range_min && (ext->step * 10) > 0)
{
ext->step *= 10;
}
int32_t step_limit;
step_limit = LV_MATH_MAX(ext->range_max, (ext->range_min < 0 ? (-ext->range_min) : ext->range_min));
int32_t new_step = ext->step * 10;
if(new_step <= step_limit) ext->step = new_step;
lv_spinbox_updatevalue(spinbox);
}
@ -285,20 +280,16 @@ void lv_spinbox_increment(lv_obj_t * spinbox)
{
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext->value + ext->step <= ext->range_max)
{
if(ext->value + ext->step <= ext->range_max) {
/*Special mode when zero crossing*/
if((ext->value + ext->step) > 0 && ext->value < 0)
{
ext->value = -ext->value;
}/*end special mode*/
if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = -ext->value;
ext->value += ext->step;
if(ext->value_changed_cb != NULL)
{
ext->value_changed_cb(spinbox, ext->value);
}
} else {
ext->value = ext->range_max;
}
if(ext->value_changed_cb != NULL) ext->value_changed_cb(spinbox, ext->value);
lv_spinbox_updatevalue(spinbox);
}
@ -310,20 +301,15 @@ void lv_spinbox_decrement(lv_obj_t * spinbox)
{
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext->value - ext->step >= ext->range_min)
{
if(ext->value - ext->step >= ext->range_min) {
/*Special mode when zero crossing*/
if((ext->value - ext->step) < 0 && ext->value > 0)
{
ext->value = -ext->value;
}/*end special mode*/
if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = -ext->value;
ext->value -= ext->step;
if(ext->value_changed_cb != NULL)
{
ext->value_changed_cb(spinbox, ext->value);
}
} else {
ext->value = ext->range_min;
}
if(ext->value_changed_cb != NULL) ext->value_changed_cb(spinbox, ext->value);
lv_spinbox_updatevalue(spinbox);
}
@ -365,137 +351,121 @@ static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * p
if(buf->type[i] == NULL) break;
}
buf->type[i] = "lv_spinbox";
}else if(sign == LV_SIGNAL_CONTROLL)
{
}
else if(sign == LV_SIGNAL_CONTROLL) {
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
if(c == LV_GROUP_KEY_RIGHT)
{
if(indev_type == LV_INDEV_TYPE_ENCODER)
{
lv_spinbox_increment(spinbox);
}
else
{
lv_spinbox_step_next(spinbox);
}
if(c == LV_GROUP_KEY_RIGHT) {
if(indev_type == LV_INDEV_TYPE_ENCODER) lv_spinbox_increment(spinbox);
else lv_spinbox_step_next(spinbox);
}
else if(c == LV_GROUP_KEY_LEFT)
{
if(indev_type == LV_INDEV_TYPE_ENCODER)
{
lv_spinbox_decrement(spinbox);
}
else
{
else if(c == LV_GROUP_KEY_LEFT) {
if(indev_type == LV_INDEV_TYPE_ENCODER) lv_spinbox_decrement(spinbox);
else lv_spinbox_step_previous(spinbox);
}
else if(c == LV_GROUP_KEY_UP) {
lv_spinbox_increment(spinbox);
}
else if(c == LV_GROUP_KEY_DOWN) {
lv_spinbox_decrement(spinbox);
}
else if(c == LV_GROUP_KEY_ENTER) {
if(ext->step > 1) {
lv_spinbox_step_next(spinbox);
} else {
/*Restart from the MSB*/
ext->step = 1;
uint32_t i;
for(i = 0; i < ext->digit_count; i++) {
int32_t new_step = ext->step * 10;
if(new_step >= ext->range_max) break;
ext->step = new_step;
}
lv_spinbox_step_previous(spinbox);
}
}
else if(c == LV_GROUP_KEY_UP)
{
lv_spinbox_increment(spinbox);
}
else if(c == LV_GROUP_KEY_DOWN)
{
lv_spinbox_decrement(spinbox);
}
else
{
if(c == LV_GROUP_KEY_ENTER)
{
int p = lv_ta_get_cursor_pos(spinbox);
if(p == (1 + ext->digit_padding_left + ext->digit_count))
{
for(int i = 0; i < ext->digit_count; i++)
lv_spinbox_step_previous(spinbox);
} else
{
lv_spinbox_step_next(spinbox);
}
lv_spinbox_updatevalue(spinbox);
}
else
{
lv_ta_add_char(spinbox, c);
}
else {
lv_ta_add_char(spinbox, c);
}
}
return res;
}
static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
{
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
int32_t v = ext->value;
int32_t intDigits, decDigits;
uint8_t dc = ext->digit_count;
intDigits = (ext->dec_point_pos==0) ? ext->digit_count : ext->dec_point_pos;
decDigits = ext->digit_count - intDigits;
char buf[LV_SPINBOX_MAX_DIGIT_COUNT + 8];
memset(buf, 0, sizeof(buf));
char * buf_p = buf;
ext->digits[0] = v>=0 ? '+' : '-';
/*Add the sign*/
(*buf_p) = ext->value >= 0 ? '+' : '-';
buf_p++;
int pl; /*padding left*/
for(pl = 0; pl < ext->digit_padding_left; pl++)
{
ext->digits[1 + pl] = ' ';
int i;
/*padding left*/
for(i = 0; i < ext->digit_padding_left; i++) {
(*buf_p) = ' ';
buf_p++;
}
int i = 0;
uint8_t digits[16];
char digits[64];
/*Convert the numbers to string (the sign is already handled so always covert positive number)*/
lv_math_num_to_str(ext->value < 0 ? -ext->value : ext->value, digits);
if(v < 0) v = -v;
for(i = 0; i < dc; i++)
{
digits[i] = v%10;
v = v/10;
/*Add leading zeros*/
int lz_cnt = ext->digit_count - (int)strlen(digits);
if(lz_cnt > 0) {
for(i = strlen(digits); i >= 0; i--) {
digits[i + lz_cnt] = digits[i];
}
for(i = 0; i < lz_cnt; i++) {
digits[i] = '0';
}
}
int k;
for(k = 0; k < intDigits; k++)
{
ext->digits[1 + pl + k] = '0' + digits[--i];
int32_t intDigits;
intDigits = (ext->dec_point_pos == 0) ? ext->digit_count : ext->dec_point_pos;
/*Add the decimal part*/
for(i = 0; i < intDigits && digits[i] != '\0'; i++) {
(*buf_p) = digits[i];
buf_p++;
}
if(ext->dec_point_pos != 0) {
ext->digits[1 + pl + intDigits] = '.';
/*Insert the decimal point*/
(*buf_p) = '.';
buf_p++;
int d;
for(d = 0; d < decDigits; d++)
{
ext->digits[1 + pl + intDigits + 1 + d] = '0' + digits[--i];
for(/*Leave i*/ ;i < ext->digit_count && digits[i] != '\0'; i++) {
(*buf_p) = digits[i];
buf_p++;
}
ext->digits[1 + pl + intDigits + 1 + decDigits] = '\0';
} else {
ext->digits[1 + pl + intDigits] = '\0';
}
/*Refresh the text*/
lv_ta_set_text(spinbox, (char*)buf);
lv_ta_set_text(spinbox, (char*)ext->digits);
/*Set the cursor position*/
int32_t step = ext->step;
uint8_t cPos = ext->digit_count + pl;
uint8_t cur_pos = ext->digit_count;
while(step >= 10)
{
step /= 10;
cPos--;
cur_pos--;
}
if(cPos > pl + intDigits )
{
cPos ++;
}
if(cur_pos > intDigits ) cur_pos ++; /*Skip teh decimal point*/
lv_ta_set_cursor_pos(spinbox, cPos);
cur_pos += ext->digit_padding_left;
lv_ta_set_cursor_pos(spinbox, cur_pos);
}
#endif

View File

@ -50,11 +50,9 @@ typedef struct {
int32_t range_max;
int32_t range_min;
int32_t step;
uint8_t digit_count:4;
uint8_t dec_point_pos:4; /*if 0, there is no separator and the number is an integer*/
uint8_t digit_padding_left:4;
uint8_t digit_padding_right:4;
uint8_t digits[1+1+LV_SPINBOX_MAX_DIGIT_COUNT]; /*1 sign, 1 point, 16 num digits*/
uint16_t digit_count:4;
uint16_t dec_point_pos:4; /*if 0, there is no separator and the number is an integer*/
uint16_t digit_padding_left:4;
lv_spinbox_value_changed_cb_t value_changed_cb;
} lv_spinbox_ext_t;

View File

@ -88,10 +88,10 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_sw_set_style(new_sw, LV_SW_STYLE_BG, th->sw.bg);
lv_sw_set_style(new_sw, LV_SW_STYLE_INDIC, th->sw.indic);
lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_OFF, th->sw.knob_off);
lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_ON, th->sw.knob_on);
lv_sw_set_style(new_sw, LV_SW_STYLE_BG, th->style.sw.bg);
lv_sw_set_style(new_sw, LV_SW_STYLE_INDIC, th->style.sw.indic);
lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_OFF, th->style.sw.knob_off);
lv_sw_set_style(new_sw, LV_SW_STYLE_KNOB_ON, th->style.sw.knob_on);
} else {
/*Let the slider' style*/
}

View File

@ -53,6 +53,8 @@ static void pwd_char_hider(lv_obj_t * ta);
static bool char_is_accepted(lv_obj_t * ta, uint32_t c);
static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res);
static void refr_cursor_area(lv_obj_t * ta);
static void placeholder_update(lv_obj_t * ta);
static void update_cursor_position_on_click(lv_obj_t * ta, lv_indev_t * click_source);
/**********************
* STATIC VARIABLES
@ -127,8 +129,8 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_ta_set_style(new_ta, LV_TA_STYLE_BG, th->ta.area);
lv_ta_set_style(new_ta, LV_TA_STYLE_SB, th->ta.sb);
lv_ta_set_style(new_ta, LV_TA_STYLE_BG, th->style.ta.area);
lv_ta_set_style(new_ta, LV_TA_STYLE_SB, th->style.ta.sb);
} else {
lv_ta_set_style(new_ta, LV_TA_STYLE_BG, &lv_style_pretty);
}
@ -247,6 +249,8 @@ void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
/*Revert the original edge flash state*/
lv_ta_set_edge_flash(ta, edge_flash_en);
placeholder_update(ta);
}
/**
@ -310,6 +314,8 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt)
/*Revert the original edge flash state*/
lv_ta_set_edge_flash(ta, edge_flash_en);
placeholder_update(ta);
}
/**
@ -349,6 +355,19 @@ void lv_ta_del_char(lv_obj_t * ta)
/*Move the cursor to the place of the deleted character*/
lv_ta_set_cursor_pos(ta, ext->cursor.pos - 1);
placeholder_update(ta);
}
/**
* Delete the right character from the current cursor position
* @param ta pointer to a text area object
*/
void lv_ta_del_char_forward(lv_obj_t * ta)
{
uint16_t cp = lv_ta_get_cursor_pos(ta);
lv_ta_set_cursor_pos(ta, cp + 1);
if(cp != lv_ta_get_cursor_pos(ta)) lv_ta_del_char(ta);
}
/*=====================
@ -411,6 +430,33 @@ void lv_ta_set_text(lv_obj_t * ta, const char * txt)
pwd_char_hider(ta);
#endif
}
placeholder_update(ta);
}
/**
* Set the placeholder text of a text area
* @param ta pointer to a text area
* @param txt pointer to the text
*/
void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
{
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
/*Create the placeholder label only when it is needed*/
if(ext->placeholder == NULL) {
ext->placeholder = lv_label_create(ta, NULL);
if(ext->one_line) {
lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
} else {
lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
}
}
lv_label_set_text(ext->placeholder, txt);
placeholder_update(ta);
}
/**
@ -564,6 +610,7 @@ void lv_ta_set_one_line(lv_obj_t * ta, bool en)
lv_page_set_scrl_fit(ta, true, true);
lv_obj_set_height(ta, font_h + (style_ta->body.padding.ver + style_scrl->body.padding.ver) * 2);
lv_label_set_long_mode(ext->label, LV_LABEL_LONG_EXPAND);
if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.hor, style_ta->body.padding.ver);
} else {
lv_style_t * style_ta = lv_obj_get_style(ta);
@ -571,10 +618,13 @@ void lv_ta_set_one_line(lv_obj_t * ta, bool en)
ext->one_line = 0;
lv_page_set_scrl_fit(ta, false, true);
lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
lv_obj_set_height(ta, LV_TA_DEF_HEIGHT);
lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.hor, style_ta->body.padding.ver);
}
placeholder_update(ta);
refr_cursor_area(ta);
}
@ -663,6 +713,9 @@ void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, lv_style_t * style)
lv_obj_refresh_ext_size(lv_page_get_scrl(ta)); /*Refresh ext. size because of cursor drawing*/
refr_cursor_area(ta);
break;
case LV_TA_STYLE_PLACEHOLDER:
if(ext->placeholder) lv_label_set_style(ext->placeholder, style);
break;
}
}
@ -689,6 +742,21 @@ const char * lv_ta_get_text(const lv_obj_t * ta)
return txt;
}
/**
* Get the placeholder text of a text area
* @param ta pointer to a text area object
* @return pointer to the text
*/
const char * lv_ta_get_placeholder_text(lv_obj_t * ta)
{
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
const char * txt = NULL;
if(ext->placeholder) txt = lv_label_get_text(ext->label);
return txt;
}
/**
* Get the label of a text area
@ -793,6 +861,9 @@ lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
case LV_TA_STYLE_CURSOR:
style = ext->cursor.style;
break;
case LV_TA_STYLE_PLACEHOLDER:
if(ext->placeholder) style = lv_label_get_style(ext->placeholder);
break;
default:
style = NULL;
break;
@ -1026,6 +1097,11 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
/*In not one line mode refresh the Label width because 'hpad' can modify it*/
lv_obj_set_width(ext->label, lv_obj_get_width(scrl) - 2 * style_scrl->body.padding.hor);
lv_obj_set_pos(ext->label, style_scrl->body.padding.hor, style_scrl->body.padding.ver); /*Be sure the Label is in the correct position*/
if(ext->placeholder) {
lv_obj_set_width(ext->placeholder, lv_obj_get_width(scrl) - 2 * style_scrl->body.padding.hor);
lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.hor, style_scrl->body.padding.ver); /*Be sure the placeholder is in the correct position*/
}
}
lv_label_set_text(ext->label, NULL);
@ -1041,6 +1117,19 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
lv_obj_set_pos(ext->label, style_scrl->body.padding.hor, style_scrl->body.padding.ver);
lv_label_set_text(ext->label, NULL); /*Refresh the label*/
refr_cursor_area(ta);
}
}
/*Set the placeholder width according to the text area width*/
if(ext->placeholder) {
if(lv_obj_get_width(ta) != lv_area_get_width(param) ||
lv_obj_get_height(ta) != lv_area_get_height(param)) {
lv_obj_t * scrl = lv_page_get_scrl(ta);
lv_style_t * style_scrl = lv_obj_get_style(scrl);
lv_obj_set_width(ext->placeholder, lv_obj_get_width(scrl) - 2 * style_scrl->body.padding.hor);
lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.hor, style_scrl->body.padding.ver);
lv_label_set_text(ext->placeholder, NULL); /*Refresh the label*/
refr_cursor_area(ta);
}
}
@ -1051,11 +1140,9 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
else if(c == LV_GROUP_KEY_UP) lv_ta_cursor_up(ta);
else if(c == LV_GROUP_KEY_DOWN) lv_ta_cursor_down(ta);
else if(c == LV_GROUP_KEY_BACKSPACE) lv_ta_del_char(ta);
else if(c == LV_GROUP_KEY_DEL) {
uint16_t cp = lv_ta_get_cursor_pos(ta);
lv_ta_set_cursor_pos(ta, cp + 1);
if(cp != lv_ta_get_cursor_pos(ta)) lv_ta_del_char(ta);
}
else if(c == LV_GROUP_KEY_DEL) lv_ta_del_char_forward(ta);
else if(c == LV_GROUP_KEY_HOME) lv_ta_set_cursor_pos(ta, 0);
else if(c == LV_GROUP_KEY_END) lv_ta_set_cursor_pos(ta, LV_TA_CURSOR_LAST);
else {
lv_ta_add_char(ta, c);
}
@ -1091,6 +1178,9 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
}
#endif
}
else if(sign == LV_SIGNAL_PRESSED) {
update_cursor_position_on_click(ta, (lv_indev_t *) param);
}
return res;
}
@ -1109,14 +1199,18 @@ static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void
res = scrl_signal(scrl, sign, param);
if(res != LV_RES_OK) return res;
lv_obj_t * ta = lv_obj_get_parent(scrl);
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(sign == LV_SIGNAL_REFR_EXT_SIZE) {
/*Set ext. size because the cursor might be out of this object*/
lv_obj_t * ta = lv_obj_get_parent(scrl);
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
lv_style_t * style_label = lv_obj_get_style(ext->label);
lv_coord_t font_h = lv_font_get_height(style_label->text.font);
scrl->ext_size = LV_MATH_MAX(scrl->ext_size, style_label->text.line_space + font_h);
}
else if(sign == LV_SIGNAL_PRESSED) {
update_cursor_position_on_click(ta, (lv_indev_t *)param);
}
return res;
}
@ -1347,4 +1441,56 @@ static void refr_cursor_area(lv_obj_t * ta)
lv_inv_area(disp, &area_tmp);
}
static void placeholder_update(lv_obj_t * ta)
{
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
const char * ta_text;
if(ext->placeholder == NULL) return;
ta_text = lv_ta_get_text(ta);
if(ta_text[0] == '\0') {
/*Be sure the main label and the placeholder has the same coordinates*/
lv_obj_t * scrl = lv_page_get_scrl(ta);
lv_style_t * style_scrl = lv_obj_get_style(scrl);
lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.hor, style_scrl->body.padding.ver);
lv_obj_set_pos(ext->label, style_scrl->body.padding.hor, style_scrl->body.padding.ver);
lv_obj_set_width(ext->placeholder, lv_obj_get_width(scrl) - 2 * style_scrl->body.padding.hor);
lv_obj_set_hidden(ext->placeholder, false);
}
else lv_obj_set_hidden(ext->placeholder, true);
}
static void update_cursor_position_on_click(lv_obj_t * ta, lv_indev_t * click_source)
{
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
lv_area_t label_coords;
uint16_t index_of_char_at_position;
lv_obj_get_coords(ext->label, &label_coords);
lv_point_t relative_position;
relative_position.x = click_source->proc.act_point.x - label_coords.x1;
relative_position.y = click_source->proc.act_point.y - label_coords.y1;
lv_coord_t label_width = lv_obj_get_width(ext->label);
/*Check if the click happened on the left side of the area outside the label*/
if (relative_position.x < 0) {
index_of_char_at_position = 0;
}
/*Check if the click happened on the right side of the area outside the label*/
else if (relative_position.x >= label_width) {
index_of_char_at_position = LV_TA_CURSOR_LAST;
}
else {
index_of_char_at_position = lv_label_get_letter_on(ext->label, &relative_position);
}
lv_ta_set_cursor_pos(ta, index_of_char_at_position);
}
#endif

View File

@ -59,6 +59,7 @@ typedef struct
lv_page_ext_t page; /*Ext. of ancestor*/
/*New data for this type */
lv_obj_t * label; /*Label of the text area*/
lv_obj_t * placeholder; /*Place holder label of the text area, only visible if text is an empty string*/
char * pwd_tmp; /*Used to store the original text in password mode*/
const char * accapted_chars;/*Only these characters will be accepted. NULL: accept all*/
uint16_t max_length; /*The max. number of characters. 0: no limit*/
@ -80,6 +81,7 @@ enum {
LV_TA_STYLE_SB,
LV_TA_STYLE_EDGE_FLASH,
LV_TA_STYLE_CURSOR,
LV_TA_STYLE_PLACEHOLDER,
};
typedef uint8_t lv_ta_style_t;
@ -122,6 +124,12 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt);
*/
void lv_ta_del_char(lv_obj_t * ta);
/**
* Delete the right character from the current cursor position
* @param ta pointer to a text area object
*/
void lv_ta_del_char_forward(lv_obj_t * ta);
/*=====================
* Setter functions
*====================*/
@ -133,6 +141,13 @@ void lv_ta_del_char(lv_obj_t * ta);
*/
void lv_ta_set_text(lv_obj_t * ta, const char * txt);
/**
* Set the placeholder text of a text area
* @param ta pointer to a text area
* @param txt pointer to the text
*/
void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt);
/**
* Set the cursor position
* @param obj pointer to a text area object
@ -245,6 +260,13 @@ void lv_ta_set_style(lv_obj_t *ta, lv_ta_style_t type, lv_style_t *style);
*/
const char * lv_ta_get_text(const lv_obj_t * ta);
/**
* Get the placeholder text of a text area
* @param ta pointer to a text area object
* @return pointer to the text
*/
const char * lv_ta_get_placeholder_text(lv_obj_t * ta);
/**
* Get the label of a text area
* @param ta pointer to a text area object

View File

@ -89,11 +89,11 @@ lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_table_set_style(new_table, LV_TABLE_STYLE_BG, th->table.bg);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL1, th->table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL2, th->table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL3, th->table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL4, th->table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_BG, th->style.table.bg);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL1, th->style.table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL2, th->style.table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL3, th->style.table.cell);
lv_table_set_style(new_table, LV_TABLE_STYLE_CELL4, th->style.table.cell);
} else {
lv_table_set_style(new_table, LV_TABLE_STYLE_BG, &lv_style_plain_color);
}

View File

@ -130,13 +130,13 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, th->tabview.bg);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, th->tabview.indic);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, th->tabview.btn.bg);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_REL, th->tabview.btn.rel);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_PR, th->tabview.btn.pr);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_REL, th->tabview.btn.tgl_rel);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_PR, th->tabview.btn.tgl_pr);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, th->style.tabview.bg);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, th->style.tabview.indic);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, th->style.tabview.btn.bg);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_REL, th->style.tabview.btn.rel);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_PR, th->style.tabview.btn.pr);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_REL, th->style.tabview.btn.tgl_rel);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_PR, th->style.tabview.btn.tgl_pr);
} else {
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, &lv_style_plain);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, &lv_style_transp);
@ -622,12 +622,14 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
/*With ENCODER select the first button only in edit mode*/
if(indev_type == LV_INDEV_TYPE_ENCODER) {
#if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(tabview);
if(lv_group_get_editing(g)) {
lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
btnm_ext->btn_id_pr = 0;
lv_obj_invalidate(ext->btns);
}
#endif
} else {
lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
btnm_ext->btn_id_pr = 0;

View File

@ -95,9 +95,9 @@ lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, th->tileview.bg);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, th->tileview.scrl);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_SB, th->tileview.sb);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, th->style.tileview.bg);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, th->style.tileview.scrl);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_SB, th->style.tileview.sb);
} else {
lv_page_set_style(new_tileview, LV_PAGE_STYLE_BG, &lv_style_transp_tight);
lv_page_set_style(new_tileview, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);

View File

@ -95,13 +95,13 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
lv_win_set_style(new_win, LV_WIN_STYLE_BG, th->win.bg);
lv_win_set_style(new_win, LV_WIN_STYLE_SB, th->win.sb);
lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, th->win.header);
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT_BG, th->win.content.bg);
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT_SCRL, th->win.content.scrl);
lv_win_set_style(new_win, LV_WIN_STYLE_BTN_REL, th->win.btn.rel);
lv_win_set_style(new_win, LV_WIN_STYLE_BTN_PR, th->win.btn.pr);
lv_win_set_style(new_win, LV_WIN_STYLE_BG, th->style.win.bg);
lv_win_set_style(new_win, LV_WIN_STYLE_SB, th->style.win.sb);
lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, th->style.win.header);
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT_BG, th->style.win.content.bg);
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT_SCRL, th->style.win.content.scrl);
lv_win_set_style(new_win, LV_WIN_STYLE_BTN_REL, th->style.win.btn.rel);
lv_win_set_style(new_win, LV_WIN_STYLE_BTN_PR, th->style.win.btn.pr);
} else {
lv_win_set_style(new_win, LV_WIN_STYLE_BG, &lv_style_plain);
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT_BG, &lv_style_plain);

View File

@ -34,10 +34,8 @@ static lv_theme_t * current_theme;
* This way the theme styles will always point to the same memory address even after theme is change.
* (The pointers in the theme points to the styles declared by the theme itself) */
/* Store the styles in this array.
* Can't determine the size in compile time because sizeof is not evaluated (should be `sizeof(lv_theme_t) / sizeof(lv_style_t*)`).
* Error will be generated in run time if too small.*/
static lv_style_t th_styles[120];
/* Store the styles in this array. */
static lv_style_t th_styles[LV_THEME_STYLE_COUNT];
static bool inited = false;
static lv_theme_t current_theme;
#endif
@ -60,18 +58,12 @@ void lv_theme_set_current(lv_theme_t * th)
#if LV_THEME_LIVE_UPDATE == 0
current_theme = th;
#else
uint32_t style_num = sizeof(lv_theme_t) / sizeof(lv_style_t *); /*Number of styles in a theme*/
uint32_t style_num = sizeof(th->style) / sizeof(lv_style_t *); /*Number of styles in a theme*/
if(!inited) {
/*It's not sure `th_styles` is big enough. Check it now!*/
if(style_num > sizeof(th_styles) / sizeof(lv_style_t)) {
LV_LOG_ERROR("Themes: th_styles array is too small. Increase it's size!");
while(1);
}
/*Initialize the style pointers `current_theme` to point to the `th_styles` style array */
uint16_t i;
lv_style_t ** cur_th_style_p = (lv_style_t **) &current_theme;
lv_style_t ** cur_th_style_p = (lv_style_t **) &current_theme.style;
for(i = 0; i < style_num; i++) {
uintptr_t adr = (uintptr_t)&th_styles[i];
memcpy(&cur_th_style_p[i], &adr, sizeof(lv_style_t *));
@ -82,14 +74,24 @@ void lv_theme_set_current(lv_theme_t * th)
/*Copy the styles pointed by the new theme to the `th_styles` style array*/
uint16_t i;
lv_style_t ** th_style = (lv_style_t **) th;
lv_style_t ** th_style = (lv_style_t **) &th->style;
for(i = 0; i < style_num; i++) {
uintptr_t s = (uintptr_t)th_style[i];
if(s) memcpy(&th_styles[i], (void *)s, sizeof(lv_style_t));
}
#if USE_LV_GROUP
/*Copy group style modification callback functions*/
memcpy(&current_theme.group, &th->group, sizeof(th->group));
#endif
/*Let the object know their style might change*/
lv_obj_report_style_mod(NULL);
#if USE_LV_GROUP
lv_group_report_style_mod(NULL);
#endif
#endif
}

View File

@ -20,6 +20,7 @@ extern "C" {
#endif
#include "../lv_core/lv_style.h"
#include "../lv_core/lv_group.h"
/*********************
* DEFINES
@ -30,264 +31,274 @@ extern "C" {
**********************/
typedef struct {
lv_style_t *bg;
lv_style_t *panel;
struct {
lv_style_t *bg;
lv_style_t *panel;
#if USE_LV_CONT != 0
lv_style_t *cont;
lv_style_t *cont;
#endif
#if USE_LV_BTN != 0
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
#endif
#if USE_LV_IMGBTN != 0
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} imgbtn;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} imgbtn;
#endif
#if USE_LV_LABEL != 0
struct {
lv_style_t *prim;
lv_style_t *sec;
lv_style_t *hint;
} label;
struct {
lv_style_t *prim;
lv_style_t *sec;
lv_style_t *hint;
} label;
#endif
#if USE_LV_IMG != 0
struct {
lv_style_t *light;
lv_style_t *dark;
} img;
struct {
lv_style_t *light;
lv_style_t *dark;
} img;
#endif
#if USE_LV_LINE != 0
struct {
lv_style_t *decor;
} line;
struct {
lv_style_t *decor;
} line;
#endif
#if USE_LV_LED != 0
lv_style_t *led;
lv_style_t *led;
#endif
#if USE_LV_BAR != 0
struct {
lv_style_t *bg;
lv_style_t *indic;
} bar;
struct {
lv_style_t *bg;
lv_style_t *indic;
} bar;
#endif
#if USE_LV_SLIDER != 0
struct {
lv_style_t *bg;
lv_style_t *indic;
lv_style_t *knob;
} slider;
struct {
lv_style_t *bg;
lv_style_t *indic;
lv_style_t *knob;
} slider;
#endif
#if USE_LV_LMETER != 0
lv_style_t *lmeter;
lv_style_t *lmeter;
#endif
#if USE_LV_GAUGE != 0
lv_style_t *gauge;
lv_style_t *gauge;
#endif
#if USE_LV_ARC != 0
lv_style_t *arc;
lv_style_t *arc;
#endif
#if USE_LV_PRELOAD != 0
lv_style_t *preload;
lv_style_t *preload;
#endif
#if USE_LV_SW != 0
struct {
lv_style_t *bg;
lv_style_t *indic;
lv_style_t *knob_off;
lv_style_t *knob_on;
} sw;
struct {
lv_style_t *bg;
lv_style_t *indic;
lv_style_t *knob_off;
lv_style_t *knob_on;
} sw;
#endif
#if USE_LV_CHART != 0
lv_style_t *chart;
lv_style_t *chart;
#endif
#if USE_LV_CALENDAR != 0
struct {
lv_style_t *bg;
lv_style_t *header;
lv_style_t *header_pr;
lv_style_t *day_names;
lv_style_t *highlighted_days;
lv_style_t *inactive_days;
lv_style_t *week_box;
lv_style_t *today_box;
} calendar;
struct {
lv_style_t *bg;
lv_style_t *header;
lv_style_t *header_pr;
lv_style_t *day_names;
lv_style_t *highlighted_days;
lv_style_t *inactive_days;
lv_style_t *week_box;
lv_style_t *today_box;
} calendar;
#endif
#if USE_LV_CB != 0
struct {
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} box;
} cb;
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} box;
} cb;
#endif
#if USE_LV_BTNM != 0
struct {
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} btnm;
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} btnm;
#endif
#if USE_LV_KB != 0
struct {
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} kb;
lv_style_t *bg;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} kb;
#endif
#if USE_LV_MBOX != 0
struct {
lv_style_t *bg;
struct {
lv_style_t *bg;
lv_style_t *rel;
lv_style_t *pr;
} btn;
} mbox;
struct {
lv_style_t *bg;
lv_style_t *rel;
lv_style_t *pr;
} btn;
} mbox;
#endif
#if USE_LV_PAGE != 0
struct {
lv_style_t *bg;
lv_style_t *scrl;
lv_style_t *sb;
} page;
#endif
#if USE_LV_TA != 0
struct {
lv_style_t *area;
lv_style_t *oneline;
lv_style_t *cursor;
lv_style_t *sb;
} ta;
#endif
#if USE_LV_SPINBOX != 0
struct {
lv_style_t *bg;
lv_style_t *cursor;
lv_style_t *sb;
} spinbox;
#endif
#if USE_LV_LIST
struct {
lv_style_t *bg;
lv_style_t *scrl;
lv_style_t *sb;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} list;
#endif
#if USE_LV_DDLIST != 0
struct {
lv_style_t *bg;
lv_style_t *sel;
lv_style_t *sb;
} ddlist;
#endif
#if USE_LV_ROLLER != 0
struct {
lv_style_t *bg;
lv_style_t *sel;
} roller;
#endif
#if USE_LV_TABVIEW != 0
struct {
lv_style_t *bg;
lv_style_t *indic;
struct {
lv_style_t *bg;
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
} btn;
} tabview;
#endif
#if USE_LV_TILEVIEW != 0
struct {
lv_style_t *bg;
lv_style_t *scrl;
lv_style_t *sb;
} tileview;
#endif
#if USE_LV_TABLE != 0
struct {
lv_style_t *bg;
lv_style_t *cell;
} table;
#endif
#if USE_LV_WIN != 0
struct {
lv_style_t *bg;
lv_style_t *sb;
lv_style_t *header;
struct {
lv_style_t *bg;
lv_style_t *scrl;
} content;
lv_style_t *sb;
} page;
#endif
#if USE_LV_TA != 0
struct {
lv_style_t *rel;
lv_style_t *pr;
} btn;
} win;
lv_style_t *area;
lv_style_t *oneline;
lv_style_t *cursor;
lv_style_t *sb;
} ta;
#endif
#if USE_LV_SPINBOX != 0
struct {
lv_style_t *bg;
lv_style_t *cursor;
lv_style_t *sb;
} spinbox;
#endif
#if USE_LV_LIST
struct {
lv_style_t *bg;
lv_style_t *scrl;
lv_style_t *sb;
struct {
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
lv_style_t *ina;
} btn;
} list;
#endif
#if USE_LV_DDLIST != 0
struct {
lv_style_t *bg;
lv_style_t *sel;
lv_style_t *sb;
} ddlist;
#endif
#if USE_LV_ROLLER != 0
struct {
lv_style_t *bg;
lv_style_t *sel;
} roller;
#endif
#if USE_LV_TABVIEW != 0
struct {
lv_style_t *bg;
lv_style_t *indic;
struct {
lv_style_t *bg;
lv_style_t *rel;
lv_style_t *pr;
lv_style_t *tgl_rel;
lv_style_t *tgl_pr;
} btn;
} tabview;
#endif
#if USE_LV_TILEVIEW != 0
struct {
lv_style_t *bg;
lv_style_t *scrl;
lv_style_t *sb;
} tileview;
#endif
#if USE_LV_TABLE != 0
struct {
lv_style_t *bg;
lv_style_t *cell;
} table;
#endif
#if USE_LV_WIN != 0
struct {
lv_style_t *bg;
lv_style_t *sb;
lv_style_t *header;
struct {
lv_style_t *bg;
lv_style_t *scrl;
} content;
struct {
lv_style_t *rel;
lv_style_t *pr;
} btn;
} win;
#endif
} style;
#if USE_LV_GROUP
struct
{
lv_group_style_mod_func_t style_mod;
lv_group_style_mod_func_t style_mod_edit;
} group;
#endif
} lv_theme_t;
@ -312,6 +323,9 @@ lv_theme_t * lv_theme_get_current(void);
* MACROS
**********************/
/* Returns number of styles within the `lv_theme_t` structure. */
#define LV_THEME_STYLE_COUNT (sizeof(((lv_theme_t *)0)->style) / sizeof(lv_style_t *))
/**********************
* POST INCLUDE
*********************/

View File

@ -130,15 +130,15 @@ static void basic_init(void)
sb.body.padding.ver = 1;
sb.body.padding.inner = LV_DPI / 15; /*Scrollbar width*/
theme.bg = &bg;
theme.panel = &panel;
theme.style.bg = &bg;
theme.style.panel = &panel;
}
static void cont_init(void)
{
#if USE_LV_CONT != 0
theme.cont = &panel;
theme.style.cont = &panel;
#endif
}
@ -197,11 +197,11 @@ static void btn_init(void)
btn_ina.text.font = _font;
btn_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
theme.btn.rel = &btn_rel;
theme.btn.pr = &btn_pr;
theme.btn.tgl_rel = &btn_trel;
theme.btn.tgl_pr = &btn_tpr;
theme.btn.ina = &btn_ina;
theme.style.btn.rel = &btn_rel;
theme.style.btn.pr = &btn_pr;
theme.style.btn.tgl_rel = &btn_trel;
theme.style.btn.tgl_pr = &btn_tpr;
theme.style.btn.ina = &btn_ina;
#endif
}
@ -221,9 +221,9 @@ static void label_init(void)
lv_style_copy(&label_hint, &label_prim);
label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
theme.label.prim = &label_prim;
theme.label.sec = &label_sec;
theme.label.hint = &label_hint;
theme.style.label.prim = &label_prim;
theme.style.label.sec = &label_sec;
theme.style.label.hint = &label_hint;
#endif
}
@ -255,8 +255,8 @@ static void bar_init(void)
bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
bar_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
theme.bar.bg = &bar_bg;
theme.bar.indic = &bar_indic;
theme.style.bar.bg = &bar_bg;
theme.style.bar.indic = &bar_indic;
#endif
}
@ -272,8 +272,8 @@ static void img_init(void)
img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 65);
img_light.image.intense = LV_OPA_80;
theme.img.light = &img_light;
theme.img.dark = &img_dark;
theme.style.img.light = &img_light;
theme.style.img.dark = &img_dark;
#endif
}
@ -285,7 +285,7 @@ static void line_init(void)
line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
line_decor.line.width = 1;
theme.line.decor = &line_decor;
theme.style.line.decor = &line_decor;
#endif
}
@ -303,7 +303,7 @@ static void led_init(void)
led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -319,9 +319,9 @@ static void slider_init(void)
slider_knob.body.border.color = LV_COLOR_GRAY;
slider_knob.body.border.opa = LV_OPA_50;
theme.slider.bg = &bar_bg;
theme.slider.indic = &bar_indic;
theme.slider.knob = &slider_knob;
theme.style.slider.bg = &bar_bg;
theme.style.slider.indic = &bar_indic;
theme.style.slider.knob = &slider_knob;
#endif
}
@ -346,10 +346,10 @@ static void sw_init(void)
lv_style_copy(&sw_knob, &slider_knob);
sw_knob.body.opa = LV_OPA_80;
theme.sw.bg = &sw_bg;
theme.sw.indic = &sw_indic;
theme.sw.knob_off = &sw_knob;
theme.sw.knob_on = &sw_knob;
theme.style.sw.bg = &sw_bg;
theme.style.sw.indic = &sw_indic;
theme.style.sw.knob_off = &sw_knob;
theme.style.sw.knob_on = &sw_knob;
#endif
}
@ -364,7 +364,7 @@ static void lmeter_init(void)
lmeter_bg.line.color = LV_COLOR_HEX3(0x222);
lmeter_bg.line.width = 2;
theme.lmeter = &lmeter_bg;
theme.style.lmeter = &lmeter_bg;
#endif
}
@ -385,7 +385,7 @@ static void gauge_init(void)
gauge_bg.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
gauge_bg.text.font = _font;
theme.gauge = &gauge_bg;
theme.style.gauge = &gauge_bg;
#endif
}
@ -405,7 +405,7 @@ static void arc_init(void)
arc.body.padding.hor = 3;
arc.body.padding.ver = 3;
theme.arc = &arc;
theme.style.arc = &arc;
#endif
}
@ -413,14 +413,14 @@ static void preload_init(void)
{
#if USE_LV_PRELOAD != 0
theme.preload = theme.arc;
theme.style.preload = theme.style.arc;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = &panel;
theme.style.chart = &panel;
#endif
}
@ -454,13 +454,13 @@ static void calendar_init(void)
lv_style_copy(&gray_text, &def);
gray_text.text.color = lv_color_hsv_to_rgb(_hue, 10, 65);
theme.calendar.bg = &panel;
theme.calendar.header = &header;
theme.calendar.week_box = &header;
theme.calendar.today_box = &today_box;
theme.calendar.day_names = &color_text;
theme.calendar.highlighted_days = &color_text;
theme.calendar.inactive_days = &gray_text;
theme.style.calendar.bg = &panel;
theme.style.calendar.header = &header;
theme.style.calendar.week_box = &header;
theme.style.calendar.today_box = &today_box;
theme.style.calendar.day_names = &color_text;
theme.style.calendar.highlighted_days = &color_text;
theme.style.calendar.inactive_days = &gray_text;
#endif
}
@ -506,12 +506,12 @@ static void cb_init(void)
cb_ina.body.main_color = LV_COLOR_SILVER;
cb_ina.body.grad_color = LV_COLOR_SILVER;
theme.cb.bg = &cb_bg;
theme.cb.box.rel = &cb_rel;
theme.cb.box.pr = &cb_pr;
theme.cb.box.tgl_rel = &cb_trel;
theme.cb.box.tgl_pr = &cb_tpr;
theme.cb.box.ina = &cb_ina;
theme.style.cb.bg = &cb_bg;
theme.style.cb.box.rel = &cb_rel;
theme.style.cb.box.pr = &cb_pr;
theme.style.cb.box.tgl_rel = &cb_trel;
theme.style.cb.box.tgl_pr = &cb_tpr;
theme.style.cb.box.ina = &cb_ina;
#endif
}
@ -545,24 +545,24 @@ static void btnm_init(void)
lv_style_copy(&btnm_ina, &btnm_rel);
btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
theme.btnm.bg = &btnm_bg;
theme.btnm.btn.rel = &btnm_rel;
theme.btnm.btn.pr = &btnm_pr;
theme.btnm.btn.tgl_rel = &btnm_trel;
theme.btnm.btn.tgl_pr = &btnm_pr;
theme.btnm.btn.ina = &btnm_ina;
theme.style.btnm.bg = &btnm_bg;
theme.style.btnm.btn.rel = &btnm_rel;
theme.style.btnm.btn.pr = &btnm_pr;
theme.style.btnm.btn.tgl_rel = &btnm_trel;
theme.style.btnm.btn.tgl_pr = &btnm_pr;
theme.style.btnm.btn.ina = &btnm_ina;
#endif
}
static void kb_init(void)
{
#if USE_LV_KB
theme.kb.bg = &btnm_bg;
theme.kb.btn.rel = &btnm_rel;
theme.kb.btn.pr = &btnm_pr;
theme.kb.btn.tgl_rel = &btnm_trel;
theme.kb.btn.tgl_pr = &btnm_pr;
theme.kb.btn.ina = &btnm_ina;
theme.style.kb.bg = &btnm_bg;
theme.style.kb.btn.rel = &btnm_rel;
theme.style.kb.btn.pr = &btnm_pr;
theme.style.kb.btn.tgl_rel = &btnm_trel;
theme.style.kb.btn.tgl_pr = &btnm_pr;
theme.style.kb.btn.ina = &btnm_ina;
#endif
}
@ -574,38 +574,38 @@ static void mbox_init(void)
lv_style_copy(&mbox_bg, &panel);
mbox_bg.body.shadow.width = LV_DPI / 12;
theme.mbox.bg = &mbox_bg;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &btn_trel;
theme.mbox.btn.pr = &btn_tpr;
theme.style.mbox.bg = &mbox_bg;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &btn_trel;
theme.style.mbox.btn.pr = &btn_tpr;
#endif
}
static void page_init(void)
{
#if USE_LV_PAGE
theme.page.bg = &panel;
theme.page.scrl = &lv_style_transp_fit;
theme.page.sb = &sb;
theme.style.page.bg = &panel;
theme.style.page.scrl = &lv_style_transp_fit;
theme.style.page.sb = &sb;
#endif
}
static void ta_init(void)
{
#if USE_LV_TA
theme.ta.area = &panel;
theme.ta.oneline = &panel;
theme.ta.cursor = NULL;
theme.ta.sb = &sb;
theme.style.ta.area = &panel;
theme.style.ta.oneline = &panel;
theme.style.ta.cursor = NULL;
theme.style.ta.sb = &sb;
#endif
}
static void spinbox_init(void)
{
#if USE_LV_SPINBOX
theme.spinbox.bg= &panel;
theme.spinbox.cursor = theme.ta.cursor;
theme.spinbox.sb = theme.ta.sb;
theme.style.spinbox.bg= &panel;
theme.style.spinbox.cursor = theme.style.ta.cursor;
theme.style.spinbox.sb = theme.style.ta.sb;
#endif
}
@ -638,14 +638,14 @@ static void list_init(void)
list_bg.body.padding.hor = 0;
list_bg.body.padding.ver = 0;
theme.list.sb = &sb;
theme.list.bg = &list_bg;
theme.list.scrl = &lv_style_transp_tight;
theme.list.btn.rel = &list_rel;
theme.list.btn.pr = &list_pr;
theme.list.btn.tgl_rel = &list_trel;
theme.list.btn.tgl_pr = &list_tpr;
theme.list.btn.ina = &list_ina;
theme.style.list.sb = &sb;
theme.style.list.bg = &list_bg;
theme.style.list.scrl = &lv_style_transp_tight;
theme.style.list.btn.rel = &list_rel;
theme.style.list.btn.pr = &list_pr;
theme.style.list.btn.tgl_rel = &list_trel;
theme.style.list.btn.tgl_pr = &list_tpr;
theme.style.list.btn.ina = &list_ina;
#endif
}
@ -663,9 +663,9 @@ static void ddlist_init(void)
ddlist_sel.body.opa = LV_OPA_COVER;
ddlist_sel.body.radius = 0;
theme.ddlist.bg = &ddlist_bg;
theme.ddlist.sel = &ddlist_sel;
theme.ddlist.sb = &sb;
theme.style.ddlist.bg = &ddlist_bg;
theme.style.ddlist.sel = &ddlist_sel;
theme.style.ddlist.sb = &sb;
#endif
}
@ -689,8 +689,8 @@ static void roller_init(void)
roller_sel.text.opa = LV_OPA_COVER;
roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 70, 95);
theme.roller.bg = &roller_bg;
theme.roller.sel = &roller_sel;
theme.style.roller.bg = &roller_bg;
theme.style.roller.sel = &roller_sel;
#endif
}
@ -743,22 +743,22 @@ static void tabview_init(void)
tab_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 87);
tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
theme.tabview.bg = &bg;
theme.tabview.indic = &tab_indic;
theme.tabview.btn.bg = &lv_style_transp_tight;
theme.tabview.btn.rel = &tab_rel;
theme.tabview.btn.pr = &tab_pr;
theme.tabview.btn.tgl_rel = &tab_trel;
theme.tabview.btn.tgl_pr = &tab_tpr;
theme.style.tabview.bg = &bg;
theme.style.tabview.indic = &tab_indic;
theme.style.tabview.btn.bg = &lv_style_transp_tight;
theme.style.tabview.btn.rel = &tab_rel;
theme.style.tabview.btn.pr = &tab_pr;
theme.style.tabview.btn.tgl_rel = &tab_trel;
theme.style.tabview.btn.tgl_pr = &tab_tpr;
#endif
}
static void tileview_init(void)
{
#if USE_LV_TILEVIEW != 0
theme.tileview.bg = &lv_style_transp_tight;
theme.tileview.scrl = &lv_style_transp_tight;
theme.tileview.sb = theme.page.sb;
theme.style.tileview.bg = &lv_style_transp_tight;
theme.style.tileview.scrl = &lv_style_transp_tight;
theme.style.tileview.sb = theme.style.page.sb;
#endif
}
@ -773,8 +773,8 @@ static void table_init(void)
cell.body.padding.ver = LV_DPI / 12;
theme.table.bg = &lv_style_transp_tight;
theme.table.cell = &cell;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
#endif
}
@ -796,16 +796,55 @@ static void win_init(void)
header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
header.image.color = lv_color_hsv_to_rgb(_hue, 5, 100);
theme.win.bg = &bg;
theme.win.sb = &sb;
theme.win.header = &header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &btn_rel;
theme.win.btn.pr = &btn_pr;
theme.style.win.bg = &bg;
theme.style.win.sb = &sb;
theme.style.win.header = &header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &btn_rel;
theme.style.win.btn.pr = &btn_pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -825,8 +864,8 @@ lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -862,6 +901,11 @@ lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font)
table_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -63,19 +63,19 @@ static void basic_init(void)
plain_bordered.body.border.width = 2;
plain_bordered.body.border.color = LV_COLOR_HEX3(0xbbb);
theme.bg = &lv_style_plain;
theme.panel = &lv_style_pretty;
theme.style.bg = &lv_style_plain;
theme.style.panel = &lv_style_pretty;
}
static void btn_init(void)
{
#if USE_LV_BTN != 0
theme.btn.rel = &lv_style_btn_rel;
theme.btn.pr = &lv_style_btn_pr;
theme.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.btn.ina = &lv_style_btn_ina;
theme.style.btn.rel = &lv_style_btn_rel;
theme.style.btn.pr = &lv_style_btn_pr;
theme.style.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.btn.ina = &lv_style_btn_ina;
#endif
}
@ -92,9 +92,9 @@ static void label_init(void)
label_hint.text.color = LV_COLOR_HEX3(0xaaa);
theme.label.prim = &label_prim;
theme.label.sec = &label_sec;
theme.label.hint = &label_hint;
theme.style.label.prim = &label_prim;
theme.style.label.sec = &label_sec;
theme.style.label.hint = &label_hint;
#endif
}
@ -104,8 +104,8 @@ static void img_init(void)
#if USE_LV_IMG != 0
theme.img.light = &def;
theme.img.dark = &def;
theme.style.img.light = &def;
theme.style.img.dark = &def;
#endif
}
@ -113,7 +113,7 @@ static void line_init(void)
{
#if USE_LV_LINE != 0
theme.line.decor = &def;
theme.style.line.decor = &def;
#endif
}
@ -130,7 +130,7 @@ static void led_init(void)
led.body.shadow.color = led.body.main_color;
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -138,8 +138,8 @@ static void bar_init(void)
{
#if USE_LV_BAR
theme.bar.bg = &lv_style_pretty;
theme.bar.indic = &lv_style_pretty_color;
theme.style.bar.bg = &lv_style_pretty;
theme.style.bar.indic = &lv_style_pretty_color;
#endif
}
@ -150,9 +150,9 @@ static void slider_init(void)
slider_bg.body.padding.hor = LV_DPI / 20;
slider_bg.body.padding.ver = LV_DPI / 20;
theme.slider.bg = &slider_bg;
theme.slider.indic = &lv_style_pretty_color;
theme.slider.knob = &lv_style_pretty;
theme.style.slider.bg = &slider_bg;
theme.style.slider.indic = &lv_style_pretty_color;
theme.style.slider.knob = &lv_style_pretty;
#endif
}
@ -163,10 +163,10 @@ static void sw_init(void)
sw_bg.body.padding.hor = 3;
sw_bg.body.padding.ver = 3;
theme.sw.bg = &sw_bg;
theme.sw.indic = &lv_style_pretty_color;
theme.sw.knob_off = &lv_style_pretty;
theme.sw.knob_on = &lv_style_pretty;
theme.style.sw.bg = &sw_bg;
theme.style.sw.indic = &lv_style_pretty_color;
theme.style.sw.knob_off = &lv_style_pretty;
theme.style.sw.knob_on = &lv_style_pretty;
#endif
}
@ -181,7 +181,7 @@ static void lmeter_init(void)
lmeter.body.main_color = lv_color_mix(lmeter.body.main_color, LV_COLOR_WHITE, LV_OPA_50);
lmeter.body.grad_color = lv_color_mix(lmeter.body.grad_color, LV_COLOR_BLACK, LV_OPA_50);
theme.lmeter = &lmeter;
theme.style.lmeter = &lmeter;
#endif
}
@ -196,7 +196,7 @@ static void gauge_init(void)
gauge.body.grad_color = lmeter.body.main_color;
gauge.text.color = LV_COLOR_HEX3(0x888);
theme.gauge = &gauge;
theme.style.gauge = &gauge;
#endif
}
@ -205,7 +205,7 @@ static void chart_init(void)
#if USE_LV_CHART
theme.chart = &lv_style_pretty;
theme.style.chart = &lv_style_pretty;
#endif
}
@ -214,12 +214,12 @@ static void cb_init(void)
#if USE_LV_CB != 0
theme.cb.bg = &lv_style_transp;
theme.cb.box.rel = &lv_style_pretty;
theme.cb.box.pr = &lv_style_btn_pr;
theme.cb.box.tgl_rel = &lv_style_btn_tgl_rel;
theme.cb.box.tgl_pr = &lv_style_btn_tgl_pr;
theme.cb.box.ina = &lv_style_btn_ina;
theme.style.cb.bg = &lv_style_transp;
theme.style.cb.box.rel = &lv_style_pretty;
theme.style.cb.box.pr = &lv_style_btn_pr;
theme.style.cb.box.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.cb.box.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.cb.box.ina = &lv_style_btn_ina;
#endif
}
@ -229,12 +229,12 @@ static void btnm_init(void)
#if USE_LV_BTNM
theme.btnm.bg = &lv_style_pretty;
theme.btnm.btn.rel = &lv_style_btn_rel;
theme.btnm.btn.pr = &lv_style_btn_pr;
theme.btnm.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.btnm.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.btnm.btn.ina = &lv_style_btn_ina;
theme.style.btnm.bg = &lv_style_pretty;
theme.style.btnm.btn.rel = &lv_style_btn_rel;
theme.style.btnm.btn.pr = &lv_style_btn_pr;
theme.style.btnm.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.btnm.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.btnm.btn.ina = &lv_style_btn_ina;
#endif
}
@ -243,12 +243,12 @@ static void kb_init(void)
#if USE_LV_KB
theme.kb.bg = &lv_style_pretty;
theme.kb.btn.rel = &lv_style_btn_rel;
theme.kb.btn.pr = &lv_style_btn_pr;
theme.kb.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.kb.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.kb.btn.ina = &lv_style_btn_ina;
theme.style.kb.bg = &lv_style_pretty;
theme.style.kb.btn.rel = &lv_style_btn_rel;
theme.style.kb.btn.pr = &lv_style_btn_pr;
theme.style.kb.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.kb.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.kb.btn.ina = &lv_style_btn_ina;
#endif
}
@ -258,10 +258,10 @@ static void mbox_init(void)
#if USE_LV_MBOX
theme.mbox.bg = &lv_style_pretty;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &lv_style_btn_rel;
theme.mbox.btn.pr = &lv_style_btn_tgl_pr;
theme.style.mbox.bg = &lv_style_pretty;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &lv_style_btn_rel;
theme.style.mbox.btn.pr = &lv_style_btn_tgl_pr;
#endif
}
@ -270,9 +270,9 @@ static void page_init(void)
#if USE_LV_PAGE
theme.page.bg = &lv_style_pretty;
theme.page.scrl = &lv_style_transp_tight;
theme.page.sb = &sb;
theme.style.page.bg = &lv_style_pretty;
theme.style.page.scrl = &lv_style_transp_tight;
theme.style.page.sb = &sb;
#endif
}
@ -281,10 +281,10 @@ static void ta_init(void)
#if USE_LV_TA
theme.ta.area = &lv_style_pretty;
theme.ta.oneline = &lv_style_pretty;
theme.ta.cursor = NULL;
theme.ta.sb = &sb;
theme.style.ta.area = &lv_style_pretty;
theme.style.ta.oneline = &lv_style_pretty;
theme.style.ta.cursor = NULL;
theme.style.ta.sb = &sb;
#endif
}
@ -292,14 +292,14 @@ static void list_init(void)
{
#if USE_LV_LIST != 0
theme.list.bg = &lv_style_pretty;
theme.list.scrl = &lv_style_transp_fit;
theme.list.sb = &sb;
theme.list.btn.rel = &lv_style_btn_rel;
theme.list.btn.pr = &lv_style_btn_pr;
theme.list.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.list.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.list.btn.ina = &lv_style_btn_ina;
theme.style.list.bg = &lv_style_pretty;
theme.style.list.scrl = &lv_style_transp_fit;
theme.style.list.sb = &sb;
theme.style.list.btn.rel = &lv_style_btn_rel;
theme.style.list.btn.pr = &lv_style_btn_pr;
theme.style.list.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.list.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.list.btn.ina = &lv_style_btn_ina;
#endif
}
@ -308,9 +308,9 @@ static void ddlist_init(void)
#if USE_LV_DDLIST != 0
theme.ddlist.bg = &lv_style_pretty;
theme.ddlist.sel = &lv_style_plain_color;
theme.ddlist.sb = &sb;
theme.style.ddlist.bg = &lv_style_pretty;
theme.style.ddlist.sel = &lv_style_plain_color;
theme.style.ddlist.sb = &sb;
#endif
}
@ -319,8 +319,8 @@ static void roller_init(void)
#if USE_LV_ROLLER != 0
theme.roller.bg = &lv_style_pretty;
theme.roller.sel = &lv_style_plain_color;
theme.style.roller.bg = &lv_style_pretty;
theme.style.roller.sel = &lv_style_plain_color;
#endif
}
@ -329,13 +329,13 @@ static void tabview_init(void)
#if USE_LV_TABVIEW != 0
theme.tabview.bg = &plain_bordered;
theme.tabview.indic = &lv_style_plain_color;
theme.tabview.btn.bg = &lv_style_transp;
theme.tabview.btn.rel = &lv_style_btn_rel;
theme.tabview.btn.pr = &lv_style_btn_pr;
theme.tabview.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.tabview.btn.tgl_pr = &lv_style_btn_tgl_pr;
theme.style.tabview.bg = &plain_bordered;
theme.style.tabview.indic = &lv_style_plain_color;
theme.style.tabview.btn.bg = &lv_style_transp;
theme.style.tabview.btn.rel = &lv_style_btn_rel;
theme.style.tabview.btn.pr = &lv_style_btn_pr;
theme.style.tabview.btn.tgl_rel = &lv_style_btn_tgl_rel;
theme.style.tabview.btn.tgl_pr = &lv_style_btn_tgl_pr;
#endif
}
@ -345,16 +345,64 @@ static void win_init(void)
#if USE_LV_WIN != 0
theme.win.bg = &plain_bordered;
theme.win.sb = &sb;
theme.win.header = &lv_style_plain_color;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &lv_style_btn_rel;
theme.win.btn.pr = &lv_style_btn_pr;
theme.style.win.bg = &plain_bordered;
theme.style.win.sb = &sb;
theme.style.win.header = &lv_style_plain_color;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &lv_style_btn_rel;
theme.style.win.btn.pr = &lv_style_btn_pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_ORANGE;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -376,8 +424,8 @@ lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -406,6 +454,11 @@ lv_theme_t * lv_theme_default_init(uint16_t hue, lv_font_t * font)
tabview_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -80,8 +80,8 @@ static void basic_init(void)
sb.body.opa = LV_OPA_40;
sb.body.padding.hor = LV_DPI / 25;
theme.bg = &bg;
theme.panel = &panel;
theme.style.bg = &bg;
theme.style.panel = &panel;
}
@ -90,7 +90,7 @@ static void cont_init(void)
#if USE_LV_CONT != 0
theme.cont = theme.panel;
theme.style.cont = theme.style.panel;
#endif
}
@ -135,11 +135,11 @@ static void btn_init(void)
ina.text.color = lv_color_hsv_to_rgb(_hue, 95, 5);
ina.image.color = lv_color_hsv_to_rgb(_hue, 95, 5);
theme.btn.rel = &rel;
theme.btn.pr = &pr;
theme.btn.tgl_rel = &tgl_rel;
theme.btn.tgl_pr = &tgl_pr;
theme.btn.ina = &ina;
theme.style.btn.rel = &rel;
theme.style.btn.pr = &pr;
theme.style.btn.tgl_rel = &tgl_rel;
theme.style.btn.tgl_pr = &tgl_pr;
theme.style.btn.ina = &ina;
#endif
}
@ -159,9 +159,9 @@ static void label_init(void)
lv_style_copy(&hint, &prim);
hint.text.color = lv_color_hsv_to_rgb(_hue, 40, 90);
theme.label.prim = &prim;
theme.label.sec = &sec;
theme.label.hint = &hint;
theme.style.label.prim = &prim;
theme.style.label.sec = &sec;
theme.style.label.hint = &hint;
#endif
}
@ -178,8 +178,8 @@ static void img_init(void)
img_light.image.intense = LV_OPA_80;
theme.img.light = &def;
theme.img.dark = &def;
theme.style.img.light = &def;
theme.style.img.dark = &def;
#endif
}
@ -188,7 +188,7 @@ static void line_init(void)
#if USE_LV_LINE != 0
theme.line.decor = &def;
theme.style.line.decor = &def;
#endif
}
@ -207,7 +207,7 @@ static void led_init(void)
led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -230,8 +230,8 @@ static void bar_init(void)
bar_indic.body.padding.hor = 0;
bar_indic.body.padding.ver = 0;
theme.bar.bg = &bar_bg;
theme.bar.indic = &bar_indic;
theme.style.bar.bg = &bar_bg;
theme.style.bar.indic = &bar_indic;
#endif
}
@ -243,12 +243,12 @@ static void slider_init(void)
lv_style_copy(&knob, &def);
knob.body.radius = LV_RADIUS_CIRCLE;
knob.body.border.width = 0;
knob.body.main_color = theme.bar.indic->body.main_color;
knob.body.main_color = theme.style.bar.indic->body.main_color;
knob.body.grad_color = knob.body.main_color;
theme.slider.bg = theme.bar.bg;
theme.slider.indic = theme.bar.indic;
theme.slider.knob = &knob;
theme.style.slider.bg = theme.style.bar.bg;
theme.style.slider.indic = theme.style.bar.indic;
theme.style.slider.knob = &knob;
#endif
}
@ -256,13 +256,13 @@ static void sw_init(void)
{
#if USE_LV_SW != 0
static lv_style_t sw_bg, sw_indic, sw_knob_off, sw_knob_on;
lv_style_copy(&sw_bg, theme.slider.bg);
lv_style_copy(&sw_bg, theme.style.slider.bg);
sw_bg.body.radius = LV_RADIUS_CIRCLE;
lv_style_copy(&sw_indic, theme.slider.bg);
lv_style_copy(&sw_indic, theme.style.slider.bg);
sw_indic.body.radius = LV_RADIUS_CIRCLE;
lv_style_copy(&sw_knob_on, theme.slider.knob);
lv_style_copy(&sw_knob_on, theme.style.slider.knob);
sw_knob_on.body.shadow.width = 3;
sw_knob_on.body.shadow.type = LV_SHADOW_BOTTOM;
sw_knob_on.body.shadow.color = DEF_SHADOW_COLOR;
@ -275,10 +275,10 @@ static void sw_init(void)
sw_knob_off.body.border.color = LV_COLOR_HEX3(0x999);
sw_knob_off.body.border.opa = LV_OPA_COVER;
theme.sw.bg = &sw_bg;
theme.sw.indic = &sw_indic;
theme.sw.knob_off = &sw_knob_off;
theme.sw.knob_on = &sw_knob_on;
theme.style.sw.bg = &sw_bg;
theme.style.sw.indic = &sw_indic;
theme.style.sw.knob_off = &sw_knob_off;
theme.style.sw.knob_on = &sw_knob_on;
#endif
}
@ -294,7 +294,7 @@ static void lmeter_init(void)
lmeter.line.color = LV_COLOR_HEX3(0x999);
lmeter.line.width = 2;
theme.lmeter = &lmeter;
theme.style.lmeter = &lmeter;
#endif
}
@ -313,7 +313,7 @@ static void gauge_init(void)
gauge.line.width = 3;
gauge.line.color = lv_color_hsv_to_rgb(_hue, 95, 70);
theme.gauge = &gauge;
theme.style.gauge = &gauge;
#endif
}
@ -332,7 +332,7 @@ static void arc_init(void)
arc.body.padding.hor = 0;
arc.body.padding.ver = 0;
theme.arc = &arc;
theme.style.arc = &arc;
#endif
}
@ -340,14 +340,14 @@ static void preload_init(void)
{
#if USE_LV_PRELOAD != 0
theme.preload = theme.arc;
theme.style.preload = theme.style.arc;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = theme.panel;
theme.style.chart = theme.style.panel;
#endif
}
@ -367,9 +367,9 @@ static void calendar_init(void)
week_box.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 100);
week_box.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 100);
week_box.body.padding.ver = LV_DPI / 20;
week_box.body.padding.hor = theme.panel->body.padding.hor;
week_box.body.border.color = theme.panel->body.border.color;
week_box.body.border.width = theme.panel->body.border.width;
week_box.body.padding.hor = theme.style.panel->body.padding.hor;
week_box.body.border.color = theme.style.panel->body.border.color;
week_box.body.border.width = theme.style.panel->body.border.width;
week_box.body.border.part = LV_BORDER_LEFT | LV_BORDER_RIGHT;
week_box.body.radius = 0;
@ -380,12 +380,12 @@ static void calendar_init(void)
today_box.body.padding.ver = LV_DPI / 20;
today_box.body.radius = 0;
theme.calendar.bg = theme.panel;
theme.calendar.header = &lv_style_transp;
theme.calendar.inactive_days = &ina_days;
theme.calendar.highlighted_days = &high_days;
theme.calendar.week_box = &week_box;
theme.calendar.today_box = &today_box;
theme.style.calendar.bg = theme.style.panel;
theme.style.calendar.header = &lv_style_transp;
theme.style.calendar.inactive_days = &ina_days;
theme.style.calendar.highlighted_days = &high_days;
theme.style.calendar.week_box = &week_box;
theme.style.calendar.today_box = &today_box;
#endif
}
@ -393,7 +393,7 @@ static void cb_init(void)
{
#if USE_LV_CB != 0
static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
lv_style_copy(&rel, theme.panel);
lv_style_copy(&rel, theme.style.panel);
rel.body.shadow.type = LV_SHADOW_BOTTOM;
rel.body.shadow.width = 3;
@ -413,14 +413,14 @@ static void cb_init(void)
tgl_pr.body.grad_color = tgl_pr.body.main_color;
tgl_pr.body.shadow.width = 0;
lv_style_copy(&ina, theme.btn.ina);
lv_style_copy(&ina, theme.style.btn.ina);
theme.cb.bg = &lv_style_transp;
theme.cb.box.rel = &rel;
theme.cb.box.pr = &pr;
theme.cb.box.tgl_rel = &tgl_rel;
theme.cb.box.tgl_pr = &tgl_pr;
theme.cb.box.ina = &ina;
theme.style.cb.bg = &lv_style_transp;
theme.style.cb.box.rel = &rel;
theme.style.cb.box.pr = &pr;
theme.style.cb.box.tgl_rel = &tgl_rel;
theme.style.cb.box.tgl_pr = &tgl_pr;
theme.style.cb.box.ina = &ina;
#endif
}
@ -430,13 +430,13 @@ static void btnm_init(void)
#if USE_LV_BTNM
static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
lv_style_copy(&bg, theme.panel);
lv_style_copy(&bg, theme.style.panel);
bg.body.padding.hor = 0;
bg.body.padding.ver = 0;
bg.body.padding.inner = 0;
bg.text.color = LV_COLOR_HEX3(0x555);
lv_style_copy(&rel, theme.panel);
lv_style_copy(&rel, theme.style.panel);
rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
rel.body.border.width = 1;
rel.body.border.color = LV_COLOR_HEX3(0xbbb);
@ -465,12 +465,12 @@ static void btnm_init(void)
ina.body.main_color = LV_COLOR_HEX3(0xccc);
ina.body.grad_color = ina.body.main_color;
theme.btnm.bg = &bg;
theme.btnm.btn.rel = &rel;
theme.btnm.btn.pr = &pr;
theme.btnm.btn.tgl_rel = &tgl_rel;
theme.btnm.btn.tgl_pr = &tgl_pr;
theme.btnm.btn.ina = &def;
theme.style.btnm.bg = &bg;
theme.style.btnm.btn.rel = &rel;
theme.style.btnm.btn.pr = &pr;
theme.style.btnm.btn.tgl_rel = &tgl_rel;
theme.style.btnm.btn.tgl_pr = &tgl_pr;
theme.style.btnm.btn.ina = &def;
#endif
}
@ -482,12 +482,12 @@ static void kb_init(void)
lv_style_copy(&rel, &lv_style_transp);
rel.text.font = _font;
theme.kb.bg = theme.btnm.bg;
theme.kb.btn.rel = &rel;
theme.kb.btn.pr = theme.btnm.btn.pr;
theme.kb.btn.tgl_rel = theme.btnm.btn.tgl_rel;
theme.kb.btn.tgl_pr = theme.btnm.btn.tgl_pr;
theme.kb.btn.ina = theme.btnm.btn.ina;
theme.style.kb.bg = theme.style.btnm.bg;
theme.style.kb.btn.rel = &rel;
theme.style.kb.btn.pr = theme.style.btnm.btn.pr;
theme.style.kb.btn.tgl_rel = theme.style.btnm.btn.tgl_rel;
theme.style.kb.btn.tgl_pr = theme.style.btnm.btn.tgl_pr;
theme.style.kb.btn.ina = theme.style.btnm.btn.ina;
#endif
}
@ -502,13 +502,13 @@ static void mbox_init(void)
rel.text.font = _font;
rel.text.color = lv_color_hsv_to_rgb(_hue, 85, 75);
lv_style_copy(&pr, theme.btnm.btn.pr);
lv_style_copy(&pr, theme.style.btnm.btn.pr);
pr.text.color = lv_color_hsv_to_rgb(_hue, 85, 60);
theme.mbox.bg = theme.panel;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &rel;
theme.mbox.btn.pr = &pr;
theme.style.mbox.bg = theme.style.panel;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &rel;
theme.style.mbox.btn.pr = &pr;
#endif
}
@ -517,9 +517,9 @@ static void page_init(void)
#if USE_LV_PAGE
theme.page.bg = theme.panel;
theme.page.scrl = &lv_style_transp;
theme.page.sb = &sb;
theme.style.page.bg = theme.style.panel;
theme.style.page.scrl = &lv_style_transp;
theme.style.page.sb = &sb;
#endif
}
@ -537,19 +537,19 @@ static void ta_init(void)
oneline.body.border.opa = LV_OPA_COVER;
oneline.text.color = LV_COLOR_HEX3(0x333);
theme.ta.area = theme.panel;
theme.ta.oneline = &oneline;
theme.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.ta.sb = &sb;
theme.style.ta.area = theme.style.panel;
theme.style.ta.oneline = &oneline;
theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.style.ta.sb = &sb;
#endif
}
static void spinbox_init(void)
{
#if USE_LV_SPINBOX
theme.spinbox.bg= theme.panel;
theme.spinbox.cursor = theme.ta.cursor;
theme.spinbox.sb = theme.ta.sb;
theme.style.spinbox.bg= theme.style.panel;
theme.style.spinbox.cursor = theme.style.ta.cursor;
theme.style.spinbox.sb = theme.style.ta.sb;
#endif
}
@ -559,7 +559,7 @@ static void list_init(void)
static lv_style_t list_bg, rel, pr, tgl_rel, tgl_pr, ina;
lv_style_copy(&list_bg, theme.panel);
lv_style_copy(&list_bg, theme.style.panel);
list_bg.body.padding.hor = 0;
list_bg.body.padding.ver = 0;
list_bg.body.padding.inner = 0;
@ -597,14 +597,14 @@ static void list_init(void)
ina.body.grad_color = ina.body.main_color;
theme.list.sb = &sb;
theme.list.bg = &list_bg;
theme.list.scrl = &lv_style_transp_tight;
theme.list.btn.rel = &rel;
theme.list.btn.pr = &pr;
theme.list.btn.tgl_rel = &tgl_rel;
theme.list.btn.tgl_pr = &tgl_pr;
theme.list.btn.ina = &ina;
theme.style.list.sb = &sb;
theme.style.list.bg = &list_bg;
theme.style.list.scrl = &lv_style_transp_tight;
theme.style.list.btn.rel = &rel;
theme.style.list.btn.pr = &pr;
theme.style.list.btn.tgl_rel = &tgl_rel;
theme.style.list.btn.tgl_pr = &tgl_pr;
theme.style.list.btn.ina = &ina;
#endif
}
@ -612,7 +612,7 @@ static void ddlist_init(void)
{
#if USE_LV_DDLIST != 0
static lv_style_t bg, sel;
lv_style_copy(&bg, theme.panel);
lv_style_copy(&bg, theme.style.panel);
bg.body.padding.hor = LV_DPI / 6;
bg.body.padding.ver = LV_DPI / 6;
bg.text.line_space = LV_DPI / 8;
@ -626,9 +626,9 @@ static void ddlist_init(void)
sel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
theme.ddlist.bg = &bg;
theme.ddlist.sel = &sel;
theme.ddlist.sb = &sb;
theme.style.ddlist.bg = &bg;
theme.style.ddlist.sel = &sel;
theme.style.ddlist.sb = &sb;
#endif
}
@ -648,8 +648,8 @@ static void roller_init(void)
roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 90, 70);
theme.roller.bg = &roller_bg;
theme.roller.sel = &roller_sel;
theme.style.roller.bg = &roller_bg;
theme.style.roller.sel = &roller_sel;
#endif
}
@ -711,22 +711,22 @@ static void tabview_init(void)
tgl_pr.body.radius = 0;
tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 90, 60);
theme.tabview.bg = theme.bg;
theme.tabview.indic = &indic;
theme.tabview.btn.bg = &btn_bg;
theme.tabview.btn.rel = &rel;
theme.tabview.btn.pr = &pr;
theme.tabview.btn.tgl_rel = &tgl_rel;
theme.tabview.btn.tgl_pr = &tgl_pr;
theme.style.tabview.bg = theme.style.bg;
theme.style.tabview.indic = &indic;
theme.style.tabview.btn.bg = &btn_bg;
theme.style.tabview.btn.rel = &rel;
theme.style.tabview.btn.pr = &pr;
theme.style.tabview.btn.tgl_rel = &tgl_rel;
theme.style.tabview.btn.tgl_pr = &tgl_pr;
#endif
}
static void tileview_init(void)
{
#if USE_LV_TILEVIEW != 0
theme.tileview.bg = &lv_style_transp_tight;
theme.tileview.scrl = &lv_style_transp_tight;
theme.tileview.sb = theme.page.sb;
theme.style.tileview.bg = &lv_style_transp_tight;
theme.style.tileview.scrl = &lv_style_transp_tight;
theme.style.tileview.sb = theme.style.page.sb;
#endif
}
@ -734,15 +734,15 @@ static void table_init(void)
{
#if USE_LV_TABLE != 0
static lv_style_t cell;
lv_style_copy(&cell, theme.panel);
lv_style_copy(&cell, theme.style.panel);
cell.body.radius = 0;
cell.body.border.width = 1;
cell.body.padding.hor = LV_DPI / 12;
cell.body.padding.ver = LV_DPI / 12;
theme.table.bg = &lv_style_transp_tight;
theme.table.cell = &cell;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
#endif
}
@ -775,16 +775,64 @@ static void win_init(void)
pr.image.color = LV_COLOR_HEX3(0x111);
theme.win.bg = theme.panel;
theme.win.sb = &sb;
theme.win.header = &header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &lv_style_transp;
theme.win.btn.pr = &pr;
theme.style.win.bg = theme.style.panel;
theme.style.win.sb = &sb;
theme.style.win.header = &header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &lv_style_transp;
theme.style.win.btn.pr = &pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = lv_color_hsv_to_rgb(_hue, 90, 70);
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, lv_color_hsv_to_rgb(_hue, 90, 70), LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, lv_color_hsv_to_rgb(_hue, 90, 70), LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, lv_color_hsv_to_rgb(_hue, 90, 70), LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, lv_color_hsv_to_rgb(_hue, 90, 70), LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -806,8 +854,8 @@ lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -843,6 +891,11 @@ lv_theme_t * lv_theme_material_init(uint16_t hue, lv_font_t * font)
table_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -91,8 +91,8 @@ static void basic_init(void)
lv_style_copy(&dark_frame, &dark_plain);
dark_frame.body.radius = LV_DPI / 20;
theme.bg = &def;
theme.panel = &light_frame;
theme.style.bg = &def;
theme.style.panel = &light_frame;
}
@ -101,7 +101,7 @@ static void cont_init(void)
#if USE_LV_CONT != 0
theme.cont = &def;
theme.style.cont = &def;
#endif
}
@ -110,11 +110,11 @@ static void btn_init(void)
#if USE_LV_BTN != 0
theme.btn.rel = &light_frame;
theme.btn.pr = &dark_frame;
theme.btn.tgl_rel = &dark_frame;
theme.btn.tgl_pr = &light_frame;
theme.btn.ina = &light_frame;
theme.style.btn.rel = &light_frame;
theme.style.btn.pr = &dark_frame;
theme.style.btn.tgl_rel = &dark_frame;
theme.style.btn.tgl_pr = &light_frame;
theme.style.btn.ina = &light_frame;
#endif
}
@ -124,9 +124,9 @@ static void label_init(void)
#if USE_LV_LABEL != 0
theme.label.prim = NULL;
theme.label.sec = NULL;
theme.label.hint = NULL;
theme.style.label.prim = NULL;
theme.style.label.sec = NULL;
theme.style.label.hint = NULL;
#endif
}
@ -135,15 +135,15 @@ static void img_init(void)
#if USE_LV_IMG != 0
theme.img.light = &def;
theme.img.dark = &def;
theme.style.img.light = &def;
theme.style.img.dark = &def;
#endif
}
static void line_init(void)
{
#if USE_LV_LINE != 0
theme.line.decor = NULL;
theme.style.line.decor = NULL;
#endif
}
@ -157,7 +157,7 @@ static void led_init(void)
led.body.shadow.color = LV_COLOR_BLACK;
led.body.shadow.type = LV_SHADOW_FULL;
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -177,8 +177,8 @@ static void bar_init(void)
bar_indic.body.padding.ver = LV_DPI / 30;
bar_indic.body.radius = LV_RADIUS_CIRCLE;
theme.bar.bg = &bar_bg;
theme.bar.indic = &bar_indic;
theme.style.bar.bg = &bar_bg;
theme.style.bar.indic = &bar_indic;
#endif
}
@ -191,9 +191,9 @@ static void slider_init(void)
slider_knob.body.padding.hor = LV_DPI / 30;
slider_knob.body.padding.ver = LV_DPI / 30;
theme.slider.bg = theme.bar.bg;
theme.slider.indic = theme.bar.indic;
theme.slider.knob = &slider_knob;
theme.style.slider.bg = theme.style.bar.bg;
theme.style.slider.indic = theme.style.bar.indic;
theme.style.slider.knob = &slider_knob;
#endif
}
@ -202,10 +202,10 @@ static void sw_init(void)
#if USE_LV_SW != 0
theme.sw.bg = theme.slider.bg;
theme.sw.indic = theme.slider.indic;
theme.sw.knob_off = theme.slider.knob;
theme.sw.knob_on = theme.slider.knob;
theme.style.sw.bg = theme.style.slider.bg;
theme.style.sw.indic = theme.style.slider.indic;
theme.style.sw.knob_off = theme.style.slider.knob;
theme.style.sw.knob_on = theme.style.slider.knob;
#endif
}
@ -223,7 +223,7 @@ static void lmeter_init(void)
lmeter_bg.line.color = LV_COLOR_WHITE;
lmeter_bg.line.width = 1;
theme.lmeter = &lmeter_bg;
theme.style.lmeter = &lmeter_bg;
#endif
}
@ -231,19 +231,19 @@ static void gauge_init(void)
{
#if USE_LV_GAUGE != 0
static lv_style_t gauge_bg;
lv_style_copy(&gauge_bg, theme.lmeter);
lv_style_copy(&gauge_bg, theme.style.lmeter);
gauge_bg.line.color = LV_COLOR_BLACK;
gauge_bg.line.width = 1;
theme.gauge = &gauge_bg;
theme.style.gauge = &gauge_bg;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = &light_frame;
theme.style.chart = &light_frame;
#endif
}
@ -255,8 +255,8 @@ static void calendar_init(void)
box.body.padding.ver = LV_DPI / 20;
/*Can't handle highlighted dates in this theme*/
theme.calendar.week_box = &box;
theme.calendar.today_box = &box;
theme.style.calendar.week_box = &box;
theme.style.calendar.today_box = &box;
#endif
}
@ -265,12 +265,12 @@ static void cb_init(void)
#if USE_LV_CB != 0
theme.cb.bg = &lv_style_transp;
theme.cb.box.rel = &light_frame;
theme.cb.box.pr = &dark_frame;
theme.cb.box.tgl_rel = &dark_frame;
theme.cb.box.tgl_pr = &light_frame;
theme.cb.box.ina = &light_frame;
theme.style.cb.bg = &lv_style_transp;
theme.style.cb.box.rel = &light_frame;
theme.style.cb.box.pr = &dark_frame;
theme.style.cb.box.tgl_rel = &dark_frame;
theme.style.cb.box.tgl_pr = &light_frame;
theme.style.cb.box.ina = &light_frame;
#endif
}
@ -280,24 +280,24 @@ static void btnm_init(void)
#if USE_LV_BTNM
theme.btnm.bg = &light_frame;
theme.btnm.btn.rel = &light_frame;
theme.btnm.btn.pr = &dark_frame;
theme.btnm.btn.tgl_rel = &dark_frame;
theme.btnm.btn.tgl_pr = &light_frame;
theme.btnm.btn.ina = &light_frame;
theme.style.btnm.bg = &light_frame;
theme.style.btnm.btn.rel = &light_frame;
theme.style.btnm.btn.pr = &dark_frame;
theme.style.btnm.btn.tgl_rel = &dark_frame;
theme.style.btnm.btn.tgl_pr = &light_frame;
theme.style.btnm.btn.ina = &light_frame;
#endif
}
static void kb_init(void)
{
#if USE_LV_KB
theme.kb.bg = &lv_style_transp_fit;
theme.kb.btn.rel = &light_frame;
theme.kb.btn.pr = &light_frame;
theme.kb.btn.tgl_rel = &dark_frame;
theme.kb.btn.tgl_pr = &dark_frame;
theme.kb.btn.ina = &light_frame;
theme.style.kb.bg = &lv_style_transp_fit;
theme.style.kb.btn.rel = &light_frame;
theme.style.kb.btn.pr = &light_frame;
theme.style.kb.btn.tgl_rel = &dark_frame;
theme.style.kb.btn.tgl_pr = &dark_frame;
theme.style.kb.btn.ina = &light_frame;
#endif
}
@ -307,10 +307,10 @@ static void mbox_init(void)
#if USE_LV_MBOX
theme.mbox.bg = &dark_frame;
theme.mbox.btn.bg = &lv_style_transp_fit;
theme.mbox.btn.rel = &light_frame;
theme.mbox.btn.pr = &dark_frame;
theme.style.mbox.bg = &dark_frame;
theme.style.mbox.btn.bg = &lv_style_transp_fit;
theme.style.mbox.btn.rel = &light_frame;
theme.style.mbox.btn.pr = &dark_frame;
#endif
}
@ -319,9 +319,9 @@ static void page_init(void)
#if USE_LV_PAGE
theme.page.bg = &light_frame;
theme.page.scrl = &light_frame;
theme.page.sb = &dark_frame;
theme.style.page.bg = &light_frame;
theme.style.page.scrl = &light_frame;
theme.style.page.sb = &dark_frame;
#endif
}
@ -330,10 +330,10 @@ static void ta_init(void)
#if USE_LV_TA
theme.ta.area = &light_frame;
theme.ta.oneline = &light_frame;
theme.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.ta.sb = &dark_frame;
theme.style.ta.area = &light_frame;
theme.style.ta.oneline = &light_frame;
theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.style.ta.sb = &dark_frame;
#endif
}
@ -342,14 +342,14 @@ static void list_init(void)
#if USE_LV_LIST != 0
theme.list.sb = &dark_frame;
theme.list.bg = &light_frame;
theme.list.scrl = &lv_style_transp_fit;
theme.list.btn.rel = &light_plain;
theme.list.btn.pr = &dark_plain;
theme.list.btn.tgl_rel = &dark_plain;
theme.list.btn.tgl_pr = &light_plain;
theme.list.btn.ina = &light_plain;
theme.style.list.sb = &dark_frame;
theme.style.list.bg = &light_frame;
theme.style.list.scrl = &lv_style_transp_fit;
theme.style.list.btn.rel = &light_plain;
theme.style.list.btn.pr = &dark_plain;
theme.style.list.btn.tgl_rel = &dark_plain;
theme.style.list.btn.tgl_pr = &light_plain;
theme.style.list.btn.ina = &light_plain;
#endif
}
@ -360,9 +360,9 @@ static void ddlist_init(void)
lv_style_copy(&bg, &light_frame);
bg.text.line_space = LV_DPI / 12;
theme.ddlist.bg = &bg;
theme.ddlist.sel = &dark_plain;
theme.ddlist.sb = &dark_frame;
theme.style.ddlist.bg = &bg;
theme.style.ddlist.sel = &dark_plain;
theme.style.ddlist.sb = &dark_frame;
#endif
}
@ -373,8 +373,8 @@ static void roller_init(void)
lv_style_copy(&bg, &light_frame);
bg.text.line_space = LV_DPI / 12;
theme.roller.bg = &bg;
theme.roller.sel = &dark_frame;
theme.style.roller.bg = &bg;
theme.style.roller.sel = &dark_frame;
#endif
}
@ -383,13 +383,13 @@ static void tabview_init(void)
#if USE_LV_TABVIEW != 0
theme.tabview.bg = &light_frame;
theme.tabview.indic = &light_plain;
theme.tabview.btn.bg = &lv_style_transp_fit;
theme.tabview.btn.rel = &light_frame;
theme.tabview.btn.pr = &dark_frame;
theme.tabview.btn.tgl_rel = &dark_frame;
theme.tabview.btn.tgl_pr = &light_frame;
theme.style.tabview.bg = &light_frame;
theme.style.tabview.indic = &light_plain;
theme.style.tabview.btn.bg = &lv_style_transp_fit;
theme.style.tabview.btn.rel = &light_frame;
theme.style.tabview.btn.pr = &dark_frame;
theme.style.tabview.btn.tgl_rel = &dark_frame;
theme.style.tabview.btn.tgl_pr = &light_frame;
#endif
}
@ -402,16 +402,52 @@ static void win_init(void)
win_header.body.padding.hor = LV_DPI / 30;
win_header.body.padding.ver = LV_DPI / 30;
theme.win.bg = &light_frame;
theme.win.sb = &dark_frame;
theme.win.header = &win_header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &light_frame;
theme.win.btn.pr = &dark_frame;
theme.style.win.bg = &light_frame;
theme.style.win.sb = &dark_frame;
theme.style.win.header = &win_header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &light_frame;
theme.style.win.btn.pr = &dark_frame;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -435,8 +471,8 @@ lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -467,6 +503,11 @@ lv_theme_t * lv_theme_mono_init(uint16_t hue, lv_font_t * font)
tabview_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -132,8 +132,8 @@ static void basic_init(void)
sb.body.padding.ver = 1;
sb.body.padding.inner = LV_DPI / 15; /*Scrollbar width*/
theme.bg = &bg;
theme.panel = &panel;
theme.style.bg = &bg;
theme.style.panel = &panel;
}
@ -188,11 +188,11 @@ static void btn_init(void)
btn_ina.text.font = _font;
btn_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
theme.btn.rel = &btn_rel;
theme.btn.pr = &btn_pr;
theme.btn.tgl_rel = &btn_trel;
theme.btn.tgl_pr = &btn_tpr;
theme.btn.ina = &btn_ina;
theme.style.btn.rel = &btn_rel;
theme.style.btn.pr = &btn_pr;
theme.style.btn.tgl_rel = &btn_trel;
theme.style.btn.tgl_pr = &btn_tpr;
theme.style.btn.ina = &btn_ina;
#endif
}
@ -214,9 +214,9 @@ static void label_init(void)
lv_style_copy(&label_hint, &label_prim);
label_hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 70);
theme.label.prim = &label_prim;
theme.label.sec = &label_sec;
theme.label.hint = &label_hint;
theme.style.label.prim = &label_prim;
theme.style.label.sec = &label_sec;
theme.style.label.hint = &label_hint;
#endif
}
@ -248,8 +248,8 @@ static void bar_init(void)
bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
bar_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
theme.bar.bg = &bar_bg;
theme.bar.indic = &bar_indic;
theme.style.bar.bg = &bar_bg;
theme.style.bar.indic = &bar_indic;
#endif
}
@ -265,8 +265,8 @@ static void img_init(void)
img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 65);
img_light.image.intense = LV_OPA_80;
theme.img.light = &img_light;
theme.img.dark = &img_dark;
theme.style.img.light = &img_light;
theme.style.img.dark = &img_dark;
#endif
}
@ -278,7 +278,7 @@ static void line_init(void)
line_decor.line.color = lv_color_hsv_to_rgb(_hue, 50, 50);
line_decor.line.width = 1;
theme.line.decor = &line_decor;
theme.style.line.decor = &line_decor;
#endif
}
@ -296,7 +296,7 @@ static void led_init(void)
led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -312,9 +312,9 @@ static void slider_init(void)
slider_knob.body.border.color = LV_COLOR_ORANGE;
slider_knob.body.border.opa = LV_OPA_50;
theme.slider.bg = &bar_bg;
theme.slider.indic = &bar_indic;
theme.slider.knob = &slider_knob;
theme.style.slider.bg = &bar_bg;
theme.style.slider.indic = &bar_indic;
theme.style.slider.knob = &slider_knob;
#endif
}
@ -339,10 +339,10 @@ static void sw_init(void)
lv_style_copy(&sw_knob, &slider_knob);
sw_knob.body.opa = LV_OPA_80;
theme.sw.bg = &sw_bg;
theme.sw.indic = &sw_indic;
theme.sw.knob_off = &sw_knob;
theme.sw.knob_on = &sw_knob;
theme.style.sw.bg = &sw_bg;
theme.style.sw.indic = &sw_indic;
theme.style.sw.knob_off = &sw_knob;
theme.style.sw.knob_on = &sw_knob;
#endif
}
@ -357,7 +357,7 @@ static void lmeter_init(void)
lmeter_bg.line.color = LV_COLOR_HEX3(0x500);
lmeter_bg.line.width = 2;
theme.lmeter = &lmeter_bg;
theme.style.lmeter = &lmeter_bg;
#endif
}
@ -378,7 +378,7 @@ static void gauge_init(void)
gauge_bg.text.color = lv_color_hsv_to_rgb(_hue, 10, 90);
gauge_bg.text.font = _font;
theme.gauge = &gauge_bg;
theme.style.gauge = &gauge_bg;
#endif
}
@ -395,7 +395,7 @@ static void arc_init(void)
/*For preloader*/
arc.body.border.width = 0;
theme.arc = &arc;
theme.style.arc = &arc;
#endif
}
@ -403,14 +403,14 @@ static void preload_init(void)
{
#if USE_LV_PRELOAD != 0
theme.preload = theme.arc;
theme.style.preload = theme.style.arc;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = &panel;
theme.style.chart = &panel;
#endif
}
@ -428,7 +428,7 @@ static void calendar_init(void)
static lv_style_t week_box;
lv_style_copy(&week_box, &def);
week_box.body.empty = 1;
week_box.body.border.color = theme.panel->body.border.color;
week_box.body.border.color = theme.style.panel->body.border.color;
week_box.body.padding.ver = LV_DPI / 20;
static lv_style_t today_box;
@ -438,13 +438,13 @@ static void calendar_init(void)
today_box.body.padding.ver = LV_DPI / 20;
today_box.body.radius = 0;
theme.calendar.bg = theme.panel;
theme.calendar.header = theme.label.prim;
theme.calendar.inactive_days = theme.label.hint;
theme.calendar.highlighted_days = theme.label.sec;
theme.calendar.week_box = &week_box;
theme.calendar.today_box = &week_box;
theme.calendar.header_pr = theme.label.prim;
theme.style.calendar.bg = theme.style.panel;
theme.style.calendar.header = theme.style.label.prim;
theme.style.calendar.inactive_days = theme.style.label.hint;
theme.style.calendar.highlighted_days = theme.style.label.sec;
theme.style.calendar.week_box = &week_box;
theme.style.calendar.today_box = &week_box;
theme.style.calendar.header_pr = theme.style.label.prim;
#endif
}
@ -490,12 +490,12 @@ static void cb_init(void)
cb_ina.body.main_color = LV_COLOR_PURPLE;
cb_ina.body.grad_color = LV_COLOR_SILVER;
theme.cb.bg = &cb_bg;
theme.cb.box.rel = &cb_rel;
theme.cb.box.pr = &cb_pr;
theme.cb.box.tgl_rel = &cb_trel;
theme.cb.box.tgl_pr = &cb_tpr;
theme.cb.box.ina = &cb_ina;
theme.style.cb.bg = &cb_bg;
theme.style.cb.box.rel = &cb_rel;
theme.style.cb.box.pr = &cb_pr;
theme.style.cb.box.tgl_rel = &cb_trel;
theme.style.cb.box.tgl_pr = &cb_tpr;
theme.style.cb.box.ina = &cb_ina;
#endif
}
@ -529,24 +529,24 @@ static void btnm_init(void)
lv_style_copy(&btnm_ina, &btnm_rel);
btnm_ina.text.color = lv_color_hsv_to_rgb(_hue, 10, 60);
theme.btnm.bg = &btnm_bg;
theme.btnm.btn.rel = &btnm_rel;
theme.btnm.btn.pr = &btnm_pr;
theme.btnm.btn.tgl_rel = &btnm_trel;
theme.btnm.btn.tgl_pr = &btnm_pr;
theme.btnm.btn.ina = &btnm_ina;
theme.style.btnm.bg = &btnm_bg;
theme.style.btnm.btn.rel = &btnm_rel;
theme.style.btnm.btn.pr = &btnm_pr;
theme.style.btnm.btn.tgl_rel = &btnm_trel;
theme.style.btnm.btn.tgl_pr = &btnm_pr;
theme.style.btnm.btn.ina = &btnm_ina;
#endif
}
static void kb_init(void)
{
#if USE_LV_KB
theme.kb.bg = &btnm_bg;
theme.kb.btn.rel = &btnm_rel;
theme.kb.btn.pr = &btnm_pr;
theme.kb.btn.tgl_rel = &btnm_trel;
theme.kb.btn.tgl_pr = &btnm_pr;
theme.kb.btn.ina = &btnm_ina;
theme.style.kb.bg = &btnm_bg;
theme.style.kb.btn.rel = &btnm_rel;
theme.style.kb.btn.pr = &btnm_pr;
theme.style.kb.btn.tgl_rel = &btnm_trel;
theme.style.kb.btn.tgl_pr = &btnm_pr;
theme.style.kb.btn.ina = &btnm_ina;
#endif
}
@ -558,38 +558,38 @@ static void mbox_init(void)
lv_style_copy(&mbox_bg, &panel);
mbox_bg.body.shadow.width = LV_DPI / 12;
theme.mbox.bg = &mbox_bg;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &btn_trel;
theme.mbox.btn.pr = &btn_tpr;
theme.style.mbox.bg = &mbox_bg;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &btn_trel;
theme.style.mbox.btn.pr = &btn_tpr;
#endif
}
static void page_init(void)
{
#if USE_LV_PAGE
theme.page.bg = &panel;
theme.page.scrl = &lv_style_transp_fit;
theme.page.sb = &sb;
theme.style.page.bg = &panel;
theme.style.page.scrl = &lv_style_transp_fit;
theme.style.page.sb = &sb;
#endif
}
static void ta_init(void)
{
#if USE_LV_TA
theme.ta.area = &panel;
theme.ta.oneline = &panel;
theme.ta.cursor = NULL;
theme.ta.sb = &sb;
theme.style.ta.area = &panel;
theme.style.ta.oneline = &panel;
theme.style.ta.cursor = NULL;
theme.style.ta.sb = &sb;
#endif
}
static void spinbox_init(void)
{
#if USE_LV_SPINBOX
theme.spinbox.bg= &panel;
theme.spinbox.cursor = theme.ta.cursor;
theme.spinbox.sb = theme.ta.sb;
theme.style.spinbox.bg= &panel;
theme.style.spinbox.cursor = theme.style.ta.cursor;
theme.style.spinbox.sb = theme.style.ta.sb;
#endif
}
@ -620,14 +620,14 @@ static void list_init(void)
list_bg.body.padding.hor = 0;
list_bg.body.padding.ver = 0;
theme.list.sb = &sb;
theme.list.bg = &list_bg;
theme.list.scrl = &lv_style_transp_tight;
theme.list.btn.rel = &list_rel;
theme.list.btn.pr = &list_pr;
theme.list.btn.tgl_rel = &list_trel;
theme.list.btn.tgl_pr = &list_tpr;
theme.list.btn.ina = &list_ina;
theme.style.list.sb = &sb;
theme.style.list.bg = &list_bg;
theme.style.list.scrl = &lv_style_transp_tight;
theme.style.list.btn.rel = &list_rel;
theme.style.list.btn.pr = &list_pr;
theme.style.list.btn.tgl_rel = &list_trel;
theme.style.list.btn.tgl_pr = &list_tpr;
theme.style.list.btn.ina = &list_ina;
#endif
}
@ -645,9 +645,9 @@ static void ddlist_init(void)
ddlist_sel.body.opa = LV_OPA_COVER;
ddlist_sel.body.radius = 0;
theme.ddlist.bg = &ddlist_bg;
theme.ddlist.sel = &ddlist_sel;
theme.ddlist.sb = &sb;
theme.style.ddlist.bg = &ddlist_bg;
theme.style.ddlist.sel = &ddlist_sel;
theme.style.ddlist.sb = &sb;
#endif
}
@ -671,8 +671,8 @@ static void roller_init(void)
roller_sel.text.opa = LV_OPA_COVER;
roller_sel.text.color = lv_color_hsv_to_rgb(_hue, 70, 95);
theme.roller.bg = &roller_bg;
theme.roller.sel = &roller_sel;
theme.style.roller.bg = &roller_bg;
theme.style.roller.sel = &roller_sel;
#endif
}
@ -725,22 +725,22 @@ static void tabview_init(void)
tab_indic.body.grad_color = lv_color_hsv_to_rgb(_hue, 80, 87);
tab_indic.body.padding.inner = LV_DPI / 10; /*Indicator height*/
theme.tabview.bg = &bg;
theme.tabview.indic = &tab_indic;
theme.tabview.btn.bg = &lv_style_transp_tight;
theme.tabview.btn.rel = &tab_rel;
theme.tabview.btn.pr = &tab_pr;
theme.tabview.btn.tgl_rel = &tab_trel;
theme.tabview.btn.tgl_pr = &tab_tpr;
theme.style.tabview.bg = &bg;
theme.style.tabview.indic = &tab_indic;
theme.style.tabview.btn.bg = &lv_style_transp_tight;
theme.style.tabview.btn.rel = &tab_rel;
theme.style.tabview.btn.pr = &tab_pr;
theme.style.tabview.btn.tgl_rel = &tab_trel;
theme.style.tabview.btn.tgl_pr = &tab_tpr;
#endif
}
static void tileview_init(void)
{
#if USE_LV_TILEVIEW != 0
theme.tileview.bg = &lv_style_transp_tight;
theme.tileview.scrl = &lv_style_transp_tight;
theme.tileview.sb = theme.page.sb;
theme.style.tileview.bg = &lv_style_transp_tight;
theme.style.tileview.scrl = &lv_style_transp_tight;
theme.style.tileview.sb = theme.style.page.sb;
#endif
}
@ -752,8 +752,8 @@ static void table_init(void)
cell.body.radius = 0;
cell.body.border.width = 1;
theme.table.bg = &lv_style_transp_tight;
theme.table.cell = &cell;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
#endif
}
@ -771,16 +771,39 @@ static void win_init(void)
win_header.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 80);
win_header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
theme.win.bg = &bg;
theme.win.sb = &sb;
theme.win.header = &win_header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &btn_rel;
theme.win.btn.pr = &btn_pr;
theme.style.win.bg = &bg;
theme.style.win.sb = &sb;
theme.style.win.header = &win_header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &btn_rel;
theme.style.win.btn.pr = &btn_pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
style->body.border.width = 2;
style->body.border.color = LV_COLOR_SILVER;
style->body.border.opa = LV_OPA_70;
style->body.padding.hor = 0;
style->body.padding.ver = 0;
style->body.shadow.width = LV_DPI / 20;
style->body.shadow.color = lv_color_hsv_to_rgb(_hue, 20, 90);
style->body.main_color = lv_color_hsv_to_rgb(_hue, 40, 80);
style->body.grad_color = lv_color_hsv_to_rgb(_hue, 40, 80);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -800,8 +823,8 @@ lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -836,6 +859,11 @@ lv_theme_t * lv_theme_nemo_init(uint16_t hue, lv_font_t * font)
table_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod;
#endif
return &theme;
}

View File

@ -82,8 +82,8 @@ static void basic_init(void)
panel.body.padding.hor = LV_DPI / 10;
panel.line.color = lv_color_hsv_to_rgb(_hue, 20, 40);
panel.line.width = 1;
theme.bg = &bg;
theme.panel = &def;
theme.style.bg = &bg;
theme.style.panel = &def;
}
static void cont_init(void)
@ -91,7 +91,7 @@ static void cont_init(void)
#if USE_LV_CONT != 0
theme.cont = &panel;
theme.style.cont = &panel;
#endif
}
static void btn_init(void)
@ -137,11 +137,11 @@ static void btn_init(void)
btn_ina.text.color = LV_COLOR_HEX3(0xaaa);
btn_ina.image.color = LV_COLOR_HEX3(0xaaa);
theme.btn.rel = &btn_rel;
theme.btn.pr = &btn_pr;
theme.btn.tgl_rel = &btn_tgl_rel;
theme.btn.tgl_pr = &btn_tgl_pr;
theme.btn.ina = &btn_ina;
theme.style.btn.rel = &btn_rel;
theme.style.btn.pr = &btn_pr;
theme.style.btn.tgl_rel = &btn_tgl_rel;
theme.style.btn.tgl_pr = &btn_tgl_pr;
theme.style.btn.ina = &btn_ina;
#endif
}
@ -159,9 +159,9 @@ static void label_init(void)
lv_style_copy(&hint, &bg);
hint.text.color = lv_color_hsv_to_rgb(_hue, 20, 55);
theme.label.prim = &prim;
theme.label.sec = &sec;
theme.label.hint = &hint;
theme.style.label.prim = &prim;
theme.style.label.sec = &sec;
theme.style.label.hint = &hint;
#endif
}
@ -170,7 +170,7 @@ static void line_init(void)
#if USE_LV_LINE != 0
theme.line.decor = &def;
theme.style.line.decor = &def;
#endif
}
@ -188,7 +188,7 @@ static void led_init(void)
led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 100, 100);
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -197,8 +197,8 @@ static void img_init(void)
#if USE_LV_IMG != 0
theme.img.light = &def;
theme.img.dark = &def;
theme.style.img.light = &def;
theme.style.img.dark = &def;
#endif
}
@ -220,8 +220,8 @@ static void bar_init(void)
bar_indic.body.padding.hor = 0;
bar_indic.body.padding.ver = 0;
theme.bar.bg = &bar_bg;
theme.bar.indic = &bar_indic;
theme.style.bar.bg = &bar_bg;
theme.style.bar.indic = &bar_indic;
#endif
}
@ -232,9 +232,9 @@ static void slider_init(void)
lv_style_copy(&slider_knob, &btn_rel);
slider_knob.body.radius = LV_RADIUS_CIRCLE;
theme.slider.bg = &bar_bg;
theme.slider.indic = &bar_indic;
theme.slider.knob = &slider_knob;
theme.style.slider.bg = &bar_bg;
theme.style.slider.indic = &bar_indic;
theme.style.slider.knob = &slider_knob;
#endif
}
@ -243,10 +243,10 @@ static void sw_init(void)
#if USE_LV_SW != 0
theme.sw.bg = &bar_bg;
theme.sw.indic = &bar_indic;
theme.sw.knob_off = &slider_knob;
theme.sw.knob_on = &slider_knob;
theme.style.sw.bg = &bar_bg;
theme.style.sw.indic = &bar_indic;
theme.style.sw.knob_off = &slider_knob;
theme.style.sw.knob_on = &slider_knob;
#endif
}
@ -264,7 +264,7 @@ static void lmeter_init(void)
lmeter_bg.line.width = 1;
lmeter_bg.text.color = LV_COLOR_HEX3(0xddd);
theme.lmeter = &lmeter_bg;
theme.style.lmeter = &lmeter_bg;
#endif
}
@ -279,7 +279,7 @@ static void gauge_init(void)
gauge_bg.line.width = 1;
gauge_bg.text.color = LV_COLOR_HEX3(0xddd);
theme.gauge = &gauge_bg;
theme.style.gauge = &gauge_bg;
#endif
}
@ -299,7 +299,7 @@ static void arc_init(void)
arc.body.padding.hor = 1;
arc.body.padding.ver = 1;
theme.arc = &arc;
theme.style.arc = &arc;
#endif
}
@ -307,14 +307,14 @@ static void preload_init(void)
{
#if USE_LV_PRELOAD != 0
theme.preload = theme.arc;
theme.style.preload = theme.style.arc;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = &panel;
theme.style.chart = &panel;
#endif
}
@ -366,13 +366,13 @@ static void calendar_init(void)
lv_style_copy(&ina_days, &bg);
ina_days.text.color = lv_color_hsv_to_rgb(_hue, 0, 60);
theme.calendar.bg = &cal_bg;
theme.calendar.header = &cal_header;
theme.calendar.week_box = &week_box;
theme.calendar.today_box = &today_box;
theme.calendar.highlighted_days = &highlighted_days;
theme.calendar.day_names = &cal_bg;
theme.calendar.inactive_days = &ina_days;
theme.style.calendar.bg = &cal_bg;
theme.style.calendar.header = &cal_header;
theme.style.calendar.week_box = &week_box;
theme.style.calendar.today_box = &today_box;
theme.style.calendar.highlighted_days = &highlighted_days;
theme.style.calendar.day_names = &cal_bg;
theme.style.calendar.inactive_days = &ina_days;
#endif
}
@ -412,12 +412,12 @@ static void cb_init(void)
ina.body.grad_color = LV_COLOR_HEX3(0x777);
ina.body.border.width = 0;
theme.cb.bg = &lv_style_transp;
theme.cb.box.rel = &rel;
theme.cb.box.pr = &pr;
theme.cb.box.tgl_rel = &tgl_rel;
theme.cb.box.tgl_pr = &tgl_pr;
theme.cb.box.ina = &def;
theme.style.cb.bg = &lv_style_transp;
theme.style.cb.box.rel = &rel;
theme.style.cb.box.pr = &pr;
theme.style.cb.box.tgl_rel = &tgl_rel;
theme.style.cb.box.tgl_pr = &tgl_pr;
theme.style.cb.box.ina = &def;
#endif
}
@ -458,24 +458,24 @@ static void btnm_init(void)
ina.body.border.width = rel.body.border.width;
ina.body.radius = rel.body.radius;
theme.btnm.bg = &btnm_bg;
theme.btnm.btn.rel = &rel;
theme.btnm.btn.pr = &pr;
theme.btnm.btn.tgl_rel = &tgl_rel;
theme.btnm.btn.tgl_pr = &tgl_pr;
theme.btnm.btn.ina = &ina;
theme.style.btnm.bg = &btnm_bg;
theme.style.btnm.btn.rel = &rel;
theme.style.btnm.btn.pr = &pr;
theme.style.btnm.btn.tgl_rel = &tgl_rel;
theme.style.btnm.btn.tgl_pr = &tgl_pr;
theme.style.btnm.btn.ina = &ina;
#endif
}
static void kb_init(void)
{
#if USE_LV_KB
theme.kb.bg = &bg;
theme.kb.btn.rel = &btn_rel;
theme.kb.btn.pr = &btn_pr;
theme.kb.btn.tgl_rel = &btn_tgl_rel;
theme.kb.btn.tgl_pr = &btn_tgl_pr;
theme.kb.btn.ina = &btn_ina;
theme.style.kb.bg = &bg;
theme.style.kb.btn.rel = &btn_rel;
theme.style.kb.btn.pr = &btn_pr;
theme.style.kb.btn.tgl_rel = &btn_tgl_rel;
theme.style.kb.btn.tgl_pr = &btn_tgl_pr;
theme.style.kb.btn.ina = &btn_ina;
#endif
}
@ -492,10 +492,10 @@ static void mbox_init(void)
mbox_bg.body.shadow.width = LV_DPI / 10;
mbox_bg.body.shadow.color = LV_COLOR_HEX3(0x222);
mbox_bg.body.radius = LV_DPI / 20;
theme.mbox.bg = &mbox_bg;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &btn_rel;
theme.mbox.btn.pr = &btn_pr;
theme.style.mbox.bg = &mbox_bg;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &btn_rel;
theme.style.mbox.btn.pr = &btn_pr;
#endif
}
@ -511,28 +511,28 @@ static void page_init(void)
page_scrl.body.border.width = 1;
page_scrl.body.radius = LV_DPI / 20;
theme.page.bg = &panel;
theme.page.scrl = &page_scrl;
theme.page.sb = &sb;
theme.style.page.bg = &panel;
theme.style.page.scrl = &page_scrl;
theme.style.page.sb = &sb;
#endif
}
static void ta_init(void)
{
#if USE_LV_TA
theme.ta.area = &panel;
theme.ta.oneline = &panel;
theme.ta.cursor = NULL;
theme.ta.sb = &def;
theme.style.ta.area = &panel;
theme.style.ta.oneline = &panel;
theme.style.ta.cursor = NULL;
theme.style.ta.sb = &def;
#endif
}
static void spinbox_init(void)
{
#if USE_LV_SPINBOX
theme.spinbox.bg= &panel;
theme.spinbox.cursor = theme.ta.cursor;
theme.spinbox.sb = theme.ta.sb;
theme.style.spinbox.bg= &panel;
theme.style.spinbox.cursor = theme.style.ta.cursor;
theme.style.spinbox.sb = theme.style.ta.sb;
#endif
}
@ -576,14 +576,14 @@ static void list_init(void)
list_btn_tgl_pr.body.main_color = btn_tgl_pr.body.main_color;
list_btn_tgl_pr.body.grad_color = btn_tgl_pr.body.grad_color;
theme.list.sb = &sb;
theme.list.bg = &list_bg;
theme.list.scrl = &lv_style_transp_tight;
theme.list.btn.rel = &list_btn_rel;
theme.list.btn.pr = &list_btn_pr;
theme.list.btn.tgl_rel = &list_btn_tgl_rel;
theme.list.btn.tgl_pr = &list_btn_tgl_pr;
theme.list.btn.ina = &def;
theme.style.list.sb = &sb;
theme.style.list.bg = &list_bg;
theme.style.list.scrl = &lv_style_transp_tight;
theme.style.list.btn.rel = &list_btn_rel;
theme.style.list.btn.pr = &list_btn_pr;
theme.style.list.btn.tgl_rel = &list_btn_tgl_rel;
theme.style.list.btn.tgl_pr = &list_btn_tgl_pr;
theme.style.list.btn.ina = &def;
#endif
}
@ -601,9 +601,9 @@ static void ddlist_init(void)
ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(_hue, 20, 50);
ddlist_sel.body.radius = 0;
theme.ddlist.bg = &ddlist_bg;
theme.ddlist.sel = &ddlist_sel;
theme.ddlist.sb = &def;
theme.style.ddlist.bg = &ddlist_bg;
theme.style.ddlist.sel = &ddlist_sel;
theme.style.ddlist.sb = &def;
#endif
}
@ -618,30 +618,30 @@ static void roller_init(void)
roller_bg.text.color = lv_color_hsv_to_rgb(_hue, 5, 70);
roller_bg.text.opa = LV_OPA_60;
theme.roller.bg = &roller_bg;
theme.roller.sel = &ddlist_sel;
theme.style.roller.bg = &roller_bg;
theme.style.roller.sel = &ddlist_sel;
#endif
}
static void tabview_init(void)
{
#if USE_LV_TABVIEW != 0
theme.tabview.bg = &bg;
theme.tabview.indic = &lv_style_transp;
theme.tabview.btn.bg = &lv_style_transp;
theme.tabview.btn.rel = &btn_rel;
theme.tabview.btn.pr = &btn_pr;
theme.tabview.btn.tgl_rel = &btn_tgl_rel;
theme.tabview.btn.tgl_pr = &btn_tgl_pr;
theme.style.tabview.bg = &bg;
theme.style.tabview.indic = &lv_style_transp;
theme.style.tabview.btn.bg = &lv_style_transp;
theme.style.tabview.btn.rel = &btn_rel;
theme.style.tabview.btn.pr = &btn_pr;
theme.style.tabview.btn.tgl_rel = &btn_tgl_rel;
theme.style.tabview.btn.tgl_pr = &btn_tgl_pr;
#endif
}
static void tileview_init(void)
{
#if USE_LV_TILEVIEW != 0
theme.tileview.bg = &lv_style_transp_tight;
theme.tileview.scrl = &lv_style_transp_tight;
theme.tileview.sb = theme.page.sb;
theme.style.tileview.bg = &lv_style_transp_tight;
theme.style.tileview.scrl = &lv_style_transp_tight;
theme.style.tileview.sb = theme.style.page.sb;
#endif
}
@ -656,8 +656,8 @@ static void table_init(void)
cell.body.padding.ver = LV_DPI / 12;
theme.table.bg = &lv_style_transp_tight;
theme.table.cell = &cell;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
#endif
}
@ -685,16 +685,52 @@ static void win_init(void)
win_btn_pr.text.color = LV_COLOR_HEX3(0xaaa);
win_btn_pr.image.color = LV_COLOR_HEX3(0xaaa);
theme.win.bg = &win_bg;
theme.win.sb = &sb;
theme.win.header = &win_header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &lv_style_transp;
theme.win.btn.pr = &win_btn_pr;
theme.style.win.bg = &win_bg;
theme.style.win.sb = &sb;
theme.style.win.header = &win_header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &lv_style_transp;
theme.style.win.btn.pr = &win_btn_pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = lv_color_hsv_to_rgb(_hue, 80, 70);
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -716,8 +752,8 @@ lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -753,6 +789,11 @@ lv_theme_t * lv_theme_night_init(uint16_t hue, lv_font_t * font)
table_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -47,8 +47,8 @@ static void basic_init(void)
lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
def.text.font = _font;
theme.bg = &def;
theme.panel = &def;
theme.style.bg = &def;
theme.style.panel = &def;
}
@ -57,7 +57,7 @@ static void cont_init(void)
#if USE_LV_CONT != 0
theme.cont = &def;
theme.style.cont = &def;
#endif
}
@ -66,22 +66,22 @@ static void btn_init(void)
#if USE_LV_BTN != 0
theme.btn.rel = &def;
theme.btn.pr = &def;
theme.btn.tgl_rel = &def;
theme.btn.tgl_pr = &def;
theme.btn.ina = &def;
theme.style.btn.rel = &def;
theme.style.btn.pr = &def;
theme.style.btn.tgl_rel = &def;
theme.style.btn.tgl_pr = &def;
theme.style.btn.ina = &def;
#endif
}
static void imgbtn_init(void)
{
#if USE_LV_IMGBTN != 0
theme.imgbtn.rel = &def;
theme.imgbtn.pr = &def;
theme.imgbtn.tgl_rel = &def;
theme.imgbtn.tgl_pr = &def;
theme.imgbtn.ina = &def;
theme.style.imgbtn.rel = &def;
theme.style.imgbtn.pr = &def;
theme.style.imgbtn.tgl_rel = &def;
theme.style.imgbtn.tgl_pr = &def;
theme.style.imgbtn.ina = &def;
#endif
}
@ -90,9 +90,9 @@ static void label_init(void)
#if USE_LV_LABEL != 0
theme.label.prim = &def;
theme.label.sec = &def;
theme.label.hint = &def;
theme.style.label.prim = &def;
theme.style.label.sec = &def;
theme.style.label.hint = &def;
#endif
}
@ -101,8 +101,8 @@ static void img_init(void)
#if USE_LV_IMG != 0
theme.img.light = &def;
theme.img.dark = &def;
theme.style.img.light = &def;
theme.style.img.dark = &def;
#endif
}
@ -111,7 +111,7 @@ static void line_init(void)
#if USE_LV_LINE != 0
theme.line.decor = &def;
theme.style.line.decor = &def;
#endif
}
@ -120,7 +120,7 @@ static void led_init(void)
#if USE_LV_LED != 0
theme.led = &def;
theme.style.led = &def;
#endif
}
@ -129,8 +129,8 @@ static void bar_init(void)
#if USE_LV_BAR
theme.bar.bg = &def;
theme.bar.indic = &def;
theme.style.bar.bg = &def;
theme.style.bar.indic = &def;
#endif
}
@ -139,9 +139,9 @@ static void slider_init(void)
#if USE_LV_SLIDER != 0
theme.slider.bg = &def;
theme.slider.indic = &def;
theme.slider.knob = &def;
theme.style.slider.bg = &def;
theme.style.slider.indic = &def;
theme.style.slider.knob = &def;
#endif
}
@ -150,10 +150,10 @@ static void sw_init(void)
#if USE_LV_SW != 0
theme.sw.bg = &def;
theme.sw.indic = &def;
theme.sw.knob_off = &def;
theme.sw.knob_on = &def;
theme.style.sw.bg = &def;
theme.style.sw.indic = &def;
theme.style.sw.knob_off = &def;
theme.style.sw.knob_on = &def;
#endif
}
@ -163,7 +163,7 @@ static void lmeter_init(void)
#if USE_LV_LMETER != 0
theme.lmeter = &def;
theme.style.lmeter = &def;
#endif
}
@ -172,7 +172,7 @@ static void gauge_init(void)
#if USE_LV_GAUGE != 0
theme.gauge = &def;
theme.style.gauge = &def;
#endif
}
@ -181,7 +181,7 @@ static void arc_init(void)
#if USE_LV_ARC != 0
theme.arc = &def;
theme.style.arc = &def;
#endif
}
@ -190,7 +190,7 @@ static void preload_init(void)
#if USE_LV_PRELOAD != 0
theme.preload = &def;
theme.style.preload = &def;
#endif
}
@ -198,7 +198,7 @@ static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = &def;
theme.style.chart = &def;
#endif
}
@ -206,14 +206,14 @@ static void calendar_init(void)
{
#if USE_LV_CALENDAR
theme.calendar.bg = theme.panel;
theme.calendar.header = &def;
theme.calendar.inactive_days = &def;
theme.calendar.highlighted_days = &def;
theme.calendar.week_box = &def;
theme.calendar.today_box = &def;
theme.calendar.header_pr = &def;
theme.calendar.day_names = &def;
theme.style.calendar.bg = theme.style.panel;
theme.style.calendar.header = &def;
theme.style.calendar.inactive_days = &def;
theme.style.calendar.highlighted_days = &def;
theme.style.calendar.week_box = &def;
theme.style.calendar.today_box = &def;
theme.style.calendar.header_pr = &def;
theme.style.calendar.day_names = &def;
#endif
}
@ -222,12 +222,12 @@ static void cb_init(void)
#if USE_LV_CB != 0
theme.cb.bg = &def;
theme.cb.box.rel = &def;
theme.cb.box.pr = &def;
theme.cb.box.tgl_rel = &def;
theme.cb.box.tgl_pr = &def;
theme.cb.box.ina = &def;
theme.style.cb.bg = &def;
theme.style.cb.box.rel = &def;
theme.style.cb.box.pr = &def;
theme.style.cb.box.tgl_rel = &def;
theme.style.cb.box.tgl_pr = &def;
theme.style.cb.box.ina = &def;
#endif
}
@ -237,12 +237,12 @@ static void btnm_init(void)
#if USE_LV_BTNM
theme.btnm.bg = &def;
theme.btnm.btn.rel = &def;
theme.btnm.btn.pr = &def;
theme.btnm.btn.tgl_rel = &def;
theme.btnm.btn.tgl_pr = &def;
theme.btnm.btn.ina = &def;
theme.style.btnm.bg = &def;
theme.style.btnm.btn.rel = &def;
theme.style.btnm.btn.pr = &def;
theme.style.btnm.btn.tgl_rel = &def;
theme.style.btnm.btn.tgl_pr = &def;
theme.style.btnm.btn.ina = &def;
#endif
}
@ -251,12 +251,12 @@ static void kb_init(void)
#if USE_LV_KB
theme.kb.bg = &def;
theme.kb.btn.rel = &def;
theme.kb.btn.pr = &def;
theme.kb.btn.tgl_rel = &def;
theme.kb.btn.tgl_pr = &def;
theme.kb.btn.ina = &def;
theme.style.kb.bg = &def;
theme.style.kb.btn.rel = &def;
theme.style.kb.btn.pr = &def;
theme.style.kb.btn.tgl_rel = &def;
theme.style.kb.btn.tgl_pr = &def;
theme.style.kb.btn.ina = &def;
#endif
}
@ -266,10 +266,10 @@ static void mbox_init(void)
#if USE_LV_MBOX
theme.mbox.bg = &def;
theme.mbox.btn.bg = &def;
theme.mbox.btn.rel = &def;
theme.mbox.btn.pr = &def;
theme.style.mbox.bg = &def;
theme.style.mbox.btn.bg = &def;
theme.style.mbox.btn.rel = &def;
theme.style.mbox.btn.pr = &def;
#endif
}
@ -278,9 +278,9 @@ static void page_init(void)
#if USE_LV_PAGE
theme.page.bg = &def;
theme.page.scrl = &def;
theme.page.sb = &def;
theme.style.page.bg = &def;
theme.style.page.scrl = &def;
theme.style.page.sb = &def;
#endif
}
@ -289,10 +289,10 @@ static void ta_init(void)
#if USE_LV_TA
theme.ta.area = &def;
theme.ta.oneline = &def;
theme.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.ta.sb = &def;
theme.style.ta.area = &def;
theme.style.ta.oneline = &def;
theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.style.ta.sb = &def;
#endif
}
@ -301,14 +301,14 @@ static void list_init(void)
#if USE_LV_LIST != 0
theme.list.sb = &def;
theme.list.bg = &def;
theme.list.scrl = &def;
theme.list.btn.rel = &def;
theme.list.btn.pr = &def;
theme.list.btn.tgl_rel = &def;
theme.list.btn.tgl_pr = &def;
theme.list.btn.ina = &def;
theme.style.list.sb = &def;
theme.style.list.bg = &def;
theme.style.list.scrl = &def;
theme.style.list.btn.rel = &def;
theme.style.list.btn.pr = &def;
theme.style.list.btn.tgl_rel = &def;
theme.style.list.btn.tgl_pr = &def;
theme.style.list.btn.ina = &def;
#endif
}
@ -317,9 +317,9 @@ static void ddlist_init(void)
#if USE_LV_DDLIST != 0
theme.ddlist.bg = &def;
theme.ddlist.sel = &def;
theme.ddlist.sb = &def;
theme.style.ddlist.bg = &def;
theme.style.ddlist.sel = &def;
theme.style.ddlist.sb = &def;
#endif
}
@ -328,8 +328,8 @@ static void roller_init(void)
#if USE_LV_ROLLER != 0
theme.roller.bg = &def;
theme.roller.sel = &def;
theme.style.roller.bg = &def;
theme.style.roller.sel = &def;
#endif
}
@ -338,13 +338,13 @@ static void tabview_init(void)
#if USE_LV_TABVIEW != 0
theme.tabview.bg = &def;
theme.tabview.indic = &def;
theme.tabview.btn.bg = &def;
theme.tabview.btn.rel = &def;
theme.tabview.btn.pr = &def;
theme.tabview.btn.tgl_rel = &def;
theme.tabview.btn.tgl_pr = &def;
theme.style.tabview.bg = &def;
theme.style.tabview.indic = &def;
theme.style.tabview.btn.bg = &def;
theme.style.tabview.btn.rel = &def;
theme.style.tabview.btn.pr = &def;
theme.style.tabview.btn.tgl_rel = &def;
theme.style.tabview.btn.tgl_pr = &def;
#endif
}
@ -354,16 +354,64 @@ static void win_init(void)
#if USE_LV_WIN != 0
theme.win.bg = &def;
theme.win.sb = &def;
theme.win.header = &def;
theme.win.content.bg = &def;
theme.win.content.scrl = &def;
theme.win.btn.rel = &def;
theme.win.btn.pr = &def;
theme.style.win.bg = &def;
theme.style.win.sb = &def;
theme.style.win.header = &def;
theme.style.win.content.bg = &def;
theme.style.win.content.scrl = &def;
theme.style.win.btn.rel = &def;
theme.style.win.btn.pr = &def;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_ORANGE;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -385,8 +433,8 @@ lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -419,6 +467,11 @@ lv_theme_t * lv_theme_templ_init(uint16_t hue, lv_font_t * font)
tabview_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}

View File

@ -79,8 +79,8 @@ static void basic_init(void)
sb.body.radius = LV_RADIUS_CIRCLE;
sb.body.padding.inner = LV_DPI / 10;
theme.bg = &bg;
theme.panel = &panel;
theme.style.bg = &bg;
theme.style.panel = &panel;
}
static void cont_init(void)
@ -88,7 +88,7 @@ static void cont_init(void)
#if USE_LV_CONT != 0
theme.cont = theme.panel;
theme.style.cont = theme.style.panel;
#endif
}
@ -125,11 +125,11 @@ static void btn_init(void)
ina.text.color = LV_COLOR_HEX3(0xbbb);
ina.image.color = LV_COLOR_HEX3(0xbbb);
theme.btn.rel = &rel;
theme.btn.pr = &pr;
theme.btn.tgl_rel = &pr;
theme.btn.tgl_pr = &tgl_pr;
theme.btn.ina = &ina;
theme.style.btn.rel = &rel;
theme.style.btn.pr = &pr;
theme.style.btn.tgl_rel = &pr;
theme.style.btn.tgl_pr = &tgl_pr;
theme.style.btn.ina = &ina;
#endif
}
@ -145,9 +145,9 @@ static void label_init(void)
sec.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
hint.text.color = lv_color_hsv_to_rgb(_hue, 25, 85);
theme.label.prim = &prim;
theme.label.sec = &sec;
theme.label.hint = &hint;
theme.style.label.prim = &prim;
theme.style.label.sec = &sec;
theme.style.label.hint = &hint;
#endif
}
@ -163,8 +163,8 @@ static void img_init(void)
img_light.image.color = lv_color_hsv_to_rgb(_hue, 85, 55);
img_light.image.intense = LV_OPA_80;
theme.img.light = &img_light;
theme.img.dark = &img_dark;
theme.style.img.light = &img_light;
theme.style.img.dark = &img_dark;
#endif
}
@ -173,7 +173,7 @@ static void line_init(void)
#if USE_LV_LINE != 0
theme.line.decor = &def;
theme.style.line.decor = &def;
#endif
}
@ -192,7 +192,7 @@ static void led_init(void)
led.body.border.color = lv_color_hsv_to_rgb(_hue, 60, 60);
led.body.shadow.color = lv_color_hsv_to_rgb(_hue, 80, 100);
theme.led = &led;
theme.style.led = &led;
#endif
}
@ -217,8 +217,8 @@ static void bar_init(void)
indic.body.padding.ver = LV_DPI / 20;
theme.bar.bg = &bg;
theme.bar.indic = &indic;
theme.style.bar.bg = &bg;
theme.style.bar.indic = &indic;
#endif
}
@ -228,14 +228,14 @@ static void slider_init(void)
static lv_style_t knob;
lv_style_copy(&knob, &def);
knob.body.main_color = theme.bar.indic->body.main_color;
knob.body.main_color = theme.style.bar.indic->body.main_color;
knob.body.grad_color = knob.body.main_color;
knob.body.radius = LV_RADIUS_CIRCLE;
knob.body.border.width = 0;
theme.slider.bg = theme.bar.bg;
theme.slider.indic = theme.bar.indic;
theme.slider.knob = &knob;
theme.style.slider.bg = theme.style.bar.bg;
theme.style.slider.indic = theme.style.bar.indic;
theme.style.slider.knob = &knob;
#endif
}
@ -244,22 +244,22 @@ static void sw_init(void)
#if USE_LV_SW != 0
static lv_style_t indic;
lv_style_copy(&indic, theme.slider.indic);
lv_style_copy(&indic, theme.style.slider.indic);
indic.body.radius = LV_RADIUS_CIRCLE;
indic.body.main_color = lv_color_hsv_to_rgb(_hue, 15, 95);
indic.body.grad_color = indic.body.main_color;
indic.body.border.width = theme.slider.bg->body.border.width;
indic.body.border.color = theme.slider.bg->body.border.color;
indic.body.border.opa = theme.slider.bg->body.border.opa;
indic.body.border.width = theme.style.slider.bg->body.border.width;
indic.body.border.color = theme.style.slider.bg->body.border.color;
indic.body.border.opa = theme.style.slider.bg->body.border.opa;
indic.body.padding.hor = 0;
indic.body.padding.ver = 0;
theme.sw.bg = theme.slider.bg;
theme.sw.indic = &indic;
theme.sw.knob_off = theme.slider.knob;
theme.sw.knob_on = theme.slider.knob;
theme.style.sw.bg = theme.style.slider.bg;
theme.style.sw.indic = &indic;
theme.style.sw.knob_off = theme.style.slider.knob;
theme.style.sw.knob_on = theme.style.slider.knob;
#endif
}
@ -276,7 +276,7 @@ static void lmeter_init(void)
lmeter.body.grad_color = lmeter.body.main_color;
lmeter.body.padding.hor = LV_DPI / 8;
theme.lmeter = &lmeter;
theme.style.lmeter = &lmeter;
#endif
}
@ -293,7 +293,7 @@ static void gauge_init(void)
gauge.body.padding.hor = LV_DPI / 16;
gauge.body.border.color = LV_COLOR_HEX3(0x666); /*Needle middle color*/
theme.gauge = &gauge;
theme.style.gauge = &gauge;
#endif
}
@ -310,7 +310,7 @@ static void arc_init(void)
/*For preloader*/
arc.body.border.width = 0;
theme.arc = &arc;
theme.style.arc = &arc;
#endif
}
@ -318,14 +318,14 @@ static void preload_init(void)
{
#if USE_LV_PRELOAD != 0
theme.preload = theme.arc;
theme.style.preload = theme.style.arc;
#endif
}
static void chart_init(void)
{
#if USE_LV_CHART
theme.chart = theme.panel;
theme.style.chart = theme.style.panel;
#endif
}
@ -343,16 +343,16 @@ static void calendar_init(void)
static lv_style_t today_box;
lv_style_copy(&today_box, &def);
today_box.body.empty = 1;
today_box.body.border.color = theme.panel->body.border.color;
today_box.body.border.color = theme.style.panel->body.border.color;
today_box.body.padding.ver = LV_DPI / 20;
today_box.body.radius = LV_RADIUS_CIRCLE;
theme.calendar.bg = theme.panel;
theme.calendar.header = &lv_style_transp;
theme.calendar.inactive_days = &ina_days;
theme.calendar.highlighted_days = &high_days;
theme.calendar.week_box = &lv_style_transp_fit;
theme.calendar.today_box = &today_box;
theme.style.calendar.bg = theme.style.panel;
theme.style.calendar.header = &lv_style_transp;
theme.style.calendar.inactive_days = &ina_days;
theme.style.calendar.highlighted_days = &high_days;
theme.style.calendar.week_box = &lv_style_transp_fit;
theme.style.calendar.today_box = &today_box;
#endif
}
@ -389,12 +389,12 @@ static void cb_init(void)
ina.body.border.color = LV_COLOR_HEX3(0xaaa);
theme.cb.bg = &lv_style_transp;
theme.cb.box.rel = &rel;
theme.cb.box.pr = &pr;
theme.cb.box.tgl_rel = &tgl_rel;
theme.cb.box.tgl_pr = &tgl_pr;
theme.cb.box.ina = &ina;
theme.style.cb.bg = &lv_style_transp;
theme.style.cb.box.rel = &rel;
theme.style.cb.box.pr = &pr;
theme.style.cb.box.tgl_rel = &tgl_rel;
theme.style.cb.box.tgl_pr = &tgl_pr;
theme.style.cb.box.ina = &ina;
#endif
}
@ -439,12 +439,12 @@ static void btnm_init(void)
ina.body.grad_color = tgl_pr.body.main_color;
ina.text.color = LV_COLOR_HEX3(0x888);;
theme.btnm.bg = &bg;
theme.btnm.btn.rel = &rel;
theme.btnm.btn.pr = &pr;
theme.btnm.btn.tgl_rel = &tgl_rel;
theme.btnm.btn.tgl_pr = &tgl_pr;
theme.btnm.btn.ina = &ina;
theme.style.btnm.bg = &bg;
theme.style.btnm.btn.rel = &rel;
theme.style.btnm.btn.pr = &pr;
theme.style.btnm.btn.tgl_rel = &tgl_rel;
theme.style.btnm.btn.tgl_pr = &tgl_pr;
theme.style.btnm.btn.ina = &ina;
#endif
}
@ -494,12 +494,12 @@ static void kb_init(void)
ina.body.grad_color = ina.body.main_color;
ina.text.color = LV_COLOR_HEX3(0xbbb);
theme.kb.bg = &bg;
theme.kb.btn.rel = &rel;
theme.kb.btn.pr = &pr;
theme.kb.btn.tgl_rel = &tgl_rel;
theme.kb.btn.tgl_pr = &tgl_pr;
theme.kb.btn.ina = &ina;
theme.style.kb.bg = &bg;
theme.style.kb.btn.rel = &rel;
theme.style.kb.btn.pr = &pr;
theme.style.kb.btn.tgl_rel = &tgl_rel;
theme.style.kb.btn.tgl_pr = &tgl_pr;
theme.style.kb.btn.ina = &ina;
#endif
}
@ -508,7 +508,7 @@ static void mbox_init(void)
{
#if USE_LV_MBOX
static lv_style_t bg, rel, pr;
lv_style_copy(&bg, theme.panel);
lv_style_copy(&bg, theme.style.panel);
bg.body.main_color = lv_color_hsv_to_rgb(_hue, 10, 95);
bg.body.grad_color = bg.body.main_color;
bg.text.color = lv_color_hsv_to_rgb(_hue, 40, 25);
@ -530,10 +530,10 @@ static void mbox_init(void)
pr.body.grad_color = pr.body.main_color;
theme.mbox.bg = &bg;
theme.mbox.btn.bg = &lv_style_transp;
theme.mbox.btn.rel = &rel;
theme.mbox.btn.pr = &pr;
theme.style.mbox.bg = &bg;
theme.style.mbox.btn.bg = &lv_style_transp;
theme.style.mbox.btn.rel = &rel;
theme.style.mbox.btn.pr = &pr;
#endif
}
@ -542,9 +542,9 @@ static void page_init(void)
#if USE_LV_PAGE
theme.page.bg = theme.panel;
theme.page.scrl = &lv_style_transp;
theme.page.sb = &sb;
theme.style.page.bg = theme.style.panel;
theme.style.page.scrl = &lv_style_transp;
theme.style.page.sb = &sb;
#endif
}
@ -552,25 +552,25 @@ static void ta_init(void)
{
#if USE_LV_TA
static lv_style_t oneline;
lv_style_copy(&oneline, theme.panel);
lv_style_copy(&oneline, theme.style.panel);
oneline.body.radius = LV_RADIUS_CIRCLE;
oneline.body.padding.ver = LV_DPI / 10;
oneline.body.shadow.width = 0;
theme.ta.area = theme.panel;
theme.ta.oneline = &oneline;
theme.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.ta.sb = &def;
theme.style.ta.area = theme.style.panel;
theme.style.ta.oneline = &oneline;
theme.style.ta.cursor = NULL; /*Let library to calculate the cursor's style*/
theme.style.ta.sb = &def;
#endif
}
static void spinbox_init(void)
{
#if USE_LV_SPINBOX
theme.spinbox.bg= theme.panel;
theme.spinbox.cursor = theme.ta.cursor;
theme.spinbox.sb = theme.ta.sb;
theme.style.spinbox.bg= theme.style.panel;
theme.style.spinbox.cursor = theme.style.ta.cursor;
theme.style.spinbox.sb = theme.style.ta.sb;
#endif
}
@ -579,7 +579,7 @@ static void list_init(void)
#if USE_LV_LIST != 0
static lv_style_t bg, rel, pr, tgl_rel, tgl_pr, ina;
lv_style_copy(&bg, theme.panel);
lv_style_copy(&bg, theme.style.panel);
bg.body.padding.hor = 0;
bg.body.padding.ver = 0;
@ -592,28 +592,28 @@ static void list_init(void)
rel.image.color = LV_COLOR_HEX3(0x666);
lv_style_copy(&pr, &rel);
pr.text.color = theme.btn.pr->text.color;
pr.image.color = theme.btn.pr->image.color;
pr.text.color = theme.style.btn.pr->text.color;
pr.image.color = theme.style.btn.pr->image.color;
lv_style_copy(&tgl_rel, &rel);
tgl_rel.text.color = lv_color_hsv_to_rgb(_hue, 50, 90);
lv_style_copy(&tgl_pr, &rel);
tgl_pr.text.color = theme.btn.tgl_pr->text.color;
tgl_pr.image.color = theme.btn.tgl_pr->image.color;
tgl_pr.text.color = theme.style.btn.tgl_pr->text.color;
tgl_pr.image.color = theme.style.btn.tgl_pr->image.color;
lv_style_copy(&ina, &rel);
ina.text.color = theme.btn.ina->text.color;
ina.image.color = theme.btn.ina->image.color;
ina.text.color = theme.style.btn.ina->text.color;
ina.image.color = theme.style.btn.ina->image.color;
theme.list.sb = &sb;
theme.list.bg = &bg;
theme.list.scrl = &lv_style_transp_tight;
theme.list.btn.rel = &rel;
theme.list.btn.pr = &pr;
theme.list.btn.tgl_rel = &tgl_rel;
theme.list.btn.tgl_pr = &tgl_pr;
theme.list.btn.ina = &ina;
theme.style.list.sb = &sb;
theme.style.list.bg = &bg;
theme.style.list.scrl = &lv_style_transp_tight;
theme.style.list.btn.rel = &rel;
theme.style.list.btn.pr = &pr;
theme.style.list.btn.tgl_rel = &tgl_rel;
theme.style.list.btn.tgl_pr = &tgl_pr;
theme.style.list.btn.ina = &ina;
#endif
}
@ -621,7 +621,7 @@ static void ddlist_init(void)
{
#if USE_LV_DDLIST != 0
static lv_style_t bg, sel;
lv_style_copy(&bg, theme.panel);
lv_style_copy(&bg, theme.style.panel);
bg.text.line_space = LV_DPI / 8;
bg.body.padding.hor = LV_DPI / 6;
bg.body.padding.ver = LV_DPI / 8;
@ -632,9 +632,9 @@ static void ddlist_init(void)
sel.body.border.width = 0;
sel.text.color = lv_color_hsv_to_rgb(_hue, 50, 80);
theme.ddlist.bg = &bg;
theme.ddlist.sel = &sel;
theme.ddlist.sb = &def;
theme.style.ddlist.bg = &bg;
theme.style.ddlist.sel = &sel;
theme.style.ddlist.sb = &def;
#endif
}
@ -648,12 +648,12 @@ static void roller_init(void)
bg.text.line_space = LV_DPI / 6;
bg.text.color = LV_COLOR_HEX3(0x999);
lv_style_copy(&sel, theme.panel);
lv_style_copy(&sel, theme.style.panel);
sel.body.radius = LV_RADIUS_CIRCLE;
sel.body.empty = 1;
theme.roller.bg = &bg;
theme.roller.sel = &sel;
theme.style.roller.bg = &bg;
theme.style.roller.sel = &sel;
#endif
}
@ -690,22 +690,22 @@ static void tabview_init(void)
lv_style_copy(&tgl_pr, &rel);
tgl_pr.text.color = lv_color_hsv_to_rgb(_hue, 50, 70);
theme.tabview.bg = theme.bg;
theme.tabview.indic = &indic;
theme.tabview.btn.bg = &btn_bg;
theme.tabview.btn.rel = &rel;
theme.tabview.btn.pr = &pr;
theme.tabview.btn.tgl_rel = &tgl_rel;
theme.tabview.btn.tgl_pr = &tgl_pr;
theme.style.tabview.bg = theme.style.bg;
theme.style.tabview.indic = &indic;
theme.style.tabview.btn.bg = &btn_bg;
theme.style.tabview.btn.rel = &rel;
theme.style.tabview.btn.pr = &pr;
theme.style.tabview.btn.tgl_rel = &tgl_rel;
theme.style.tabview.btn.tgl_pr = &tgl_pr;
#endif
}
static void tileview_init(void)
{
#if USE_LV_TILEVIEW != 0
theme.tileview.bg = &lv_style_transp_tight;
theme.tileview.scrl = &lv_style_transp_tight;
theme.tileview.sb = theme.page.sb;
theme.style.tileview.bg = &lv_style_transp_tight;
theme.style.tileview.scrl = &lv_style_transp_tight;
theme.style.tileview.sb = theme.style.page.sb;
#endif
}
@ -713,15 +713,15 @@ static void table_init(void)
{
#if USE_LV_TABLE != 0
static lv_style_t cell;
lv_style_copy(&cell, theme.panel);
lv_style_copy(&cell, theme.style.panel);
cell.body.radius = 0;
cell.body.border.width = 1;
cell.body.shadow.width = 0;
cell.body.padding.hor = LV_DPI / 12;
cell.body.padding.ver = LV_DPI / 12;
theme.table.bg = &lv_style_transp_tight;
theme.table.cell = &cell;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
#endif
}
@ -748,16 +748,58 @@ static void win_init(void)
pr.text.color = LV_COLOR_HEX3(0x333);
pr.image.color = LV_COLOR_HEX3(0x333);
theme.win.bg = theme.panel;
theme.win.sb = &sb;
theme.win.header = &header;
theme.win.content.bg = &lv_style_transp;
theme.win.content.scrl = &lv_style_transp;
theme.win.btn.rel = &rel;
theme.win.btn.pr = &pr;
theme.style.win.bg = theme.style.panel;
theme.style.win.sb = &sb;
theme.style.win.header = &header;
theme.style.win.content.bg = &lv_style_transp;
theme.style.win.content.scrl = &lv_style_transp;
theme.style.win.btn.rel = &rel;
theme.style.win.btn.pr = &pr;
#endif
}
#if USE_LV_GROUP
static void style_mod(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = lv_color_hsv_to_rgb(_hue, 40, 50);
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 2;
#endif
}
static void style_mod_edit(lv_style_t * style)
{
#if LV_COLOR_DEPTH != 1
/*Make the style to be a little bit orange*/
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_GREEN;
/*If not empty or has border then emphasis the border*/
if (style->body.empty == 0 || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
#else
style->body.border.opa = LV_OPA_COVER;
style->body.border.color = LV_COLOR_BLACK;
style->body.border.width = 3;
#endif
}
#endif /*USE_LV_GROUP*/
/**********************
* GLOBAL FUNCTIONS
**********************/
@ -779,8 +821,8 @@ lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font)
/*For backward compatibility initialize all theme elements with a default style */
uint16_t i;
lv_style_t ** style_p = (lv_style_t **) &theme;
for(i = 0; i < sizeof(lv_theme_t) / sizeof(lv_style_t *); i++) {
lv_style_t ** style_p = (lv_style_t **) &theme.style;
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
*style_p = &def;
style_p++;
}
@ -816,6 +858,11 @@ lv_theme_t * lv_theme_zen_init(uint16_t hue, lv_font_t * font)
table_init();
win_init();
#if USE_LV_GROUP
theme.group.style_mod = style_mod;
theme.group.style_mod_edit = style_mod_edit;
#endif
return &theme;
}