start to implement the new theme

This commit is contained in:
Gabor Kiss-Vamosi
2020-01-18 23:34:34 +01:00
parent 4d42a06abe
commit ed35420475
15 changed files with 443 additions and 197 deletions

View File

@@ -1066,7 +1066,7 @@ lv_obj_t * lv_indev_search_obj(lv_obj_t * obj, lv_point_t *point)
/*If then the children was not ok, and this obj is clickable
* and it or its parent is not hidden then save this object*/
if(found_p == NULL && lv_obj_get_click(obj) != false) {
if(found_p == NULL && lv_obj_get_click(obj) != false && (lv_obj_get_state(obj, LV_OBJ_PART_MAIN) & LV_OBJ_STATE_DISABLED) == 0) {
lv_obj_t * hidden_i = obj;
while(hidden_i != NULL) {
if(lv_obj_get_hidden(hidden_i) == true) break;

View File

@@ -1225,11 +1225,12 @@ void lv_obj_add_style(lv_obj_t * obj, uint8_t part, lv_style_t * style)
}
void lv_obj_add_theme(void * obj, uint8_t part, lv_theme_style_t name)
void lv_obj_add_theme(void * obj, uint8_t part, uint16_t name)
{
lv_obj_add_style(obj, part, lv_theme_get_style(name));
}
void lv_obj_reset_style(lv_obj_t * obj, uint8_t part)
{
lv_style_list_t * style_dsc = lv_obj_get_style(obj, part);
@@ -1460,23 +1461,40 @@ void lv_obj_set_state(lv_obj_t * obj, lv_obj_state_t state)
lv_obj_state_t new_state = obj->state | state;
if(obj->state != new_state) {
lv_obj_state_t prev_state = obj->state;
/* Disabled/Enabled state change should be applied immediately without transition */
if((obj->state & LV_OBJ_STATE_DISABLED) != (new_state & LV_OBJ_STATE_DISABLED)) {
lv_anim_del(obj, obj_state_anim_cb);
obj->state = new_state;
obj->prev_state = new_state;
obj->state_anim = 0;
}
/*Start transition if set*/
else {
lv_style_int_t t = lv_obj_get_style_int(obj, LV_OBJ_PART_MAIN, LV_STYLE_TRANSITION_TIME);
if(t == 0) {
lv_anim_del(obj, obj_state_anim_cb);
obj->state = new_state;
obj->prev_state = new_state;
obj->state_anim = 0;
}
/*Set the new state for prev state too to get the TRANSITION_TIME for the new state*/
else {
lv_obj_state_t prev_state = obj->state;
obj->prev_state = new_state;
obj->state = new_state;
obj->state_anim = 0;
/*Set the new state for prev state too to get the TRANSITION_TIME for the new state*/
obj->prev_state = new_state;
obj->state = new_state;
obj->state_anim = 0;
/*Get the TRANSITION_TIME and set the real previous state*/
obj->prev_state = prev_state;
/*Get the TRANSITION_TIME and set the real previous state*/
lv_style_int_t t = lv_obj_get_style_int(obj, LV_OBJ_PART_MAIN, LV_STYLE_TRANSITION_TIME);
obj->prev_state = prev_state;
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_exec_cb(&a, obj, obj_state_anim_cb);
lv_anim_set_values(&a, 0, 255);
lv_anim_set_time(&a, t, 0);
lv_anim_create(&a);
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_exec_cb(&a, obj, obj_state_anim_cb);
lv_anim_set_values(&a, 0, 255);
lv_anim_set_time(&a, t, 0);
lv_anim_create(&a);
}
}
}
}

View File

@@ -26,7 +26,6 @@ extern "C" {
#include "../lv_misc/lv_bidi.h"
#include "../lv_hal/lv_hal.h"
#include "../lv_draw/lv_draw_rect.h"
#include "../lv_themes/lv_theme.h"
/*********************
* DEFINES
@@ -505,7 +504,7 @@ void lv_obj_set_style_ptr(lv_obj_t * obj, uint8_t type, lv_style_property_t prop
void lv_obj_add_style(lv_obj_t * obj, uint8_t type, lv_style_t * style);
void lv_obj_add_theme(void * obj, uint8_t part, lv_theme_style_t name);
void lv_obj_add_theme(void * obj, uint8_t part, uint16_t name);
void lv_obj_reset_style(lv_obj_t * obj, uint8_t type);

View File

@@ -77,18 +77,18 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
LV_LOG_TRACE("lv_bar create started");
/*Create the ancestor basic object*/
lv_obj_t * new_bar = lv_obj_create(par, copy);
LV_ASSERT_MEM(new_bar);
if(new_bar == NULL) return NULL;
lv_obj_t * bar = lv_obj_create(par, copy);
LV_ASSERT_MEM(bar);
if(bar == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_bar);
if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_bar);
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(bar);
if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(bar);
/*Allocate the object type specific extended data*/
lv_bar_ext_t * ext = lv_obj_allocate_ext_attr(new_bar, sizeof(lv_bar_ext_t));
lv_bar_ext_t * ext = lv_obj_allocate_ext_attr(bar, sizeof(lv_bar_ext_t));
LV_ASSERT_MEM(ext);
if(ext == NULL) {
lv_obj_del(new_bar);
lv_obj_del(bar);
return NULL;
}
@@ -98,25 +98,24 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
ext->cur_value = 0;
#if LV_USE_ANIMATION
ext->anim_time = 200;
lv_bar_init_anim(new_bar, &ext->cur_value_anim);
lv_bar_init_anim(new_bar, &ext->start_value_anim);
lv_bar_init_anim(bar, &ext->cur_value_anim);
lv_bar_init_anim(bar, &ext->start_value_anim);
#endif
ext->type = LV_BAR_TYPE_NORMAL;
lv_style_list_init(&ext->style_indic);
lv_obj_set_signal_cb(new_bar, lv_bar_signal);
lv_obj_set_design_cb(new_bar, lv_bar_design);
lv_obj_set_signal_cb(bar, lv_bar_signal);
lv_obj_set_design_cb(bar, lv_bar_design);
/*Init the new bar object*/
if(copy == NULL) {
lv_obj_set_click(new_bar, false);
lv_obj_set_size(new_bar, LV_DPI * 2, LV_DPI / 4);
lv_bar_set_value(new_bar, ext->cur_value, false);
lv_style_list_init(&ext->style_indic);
_ot(new_bar, LV_BAR_PART_BG, BAR);
_ot(new_bar, LV_BAR_PART_INDIC, BAR_INDIC);
lv_obj_set_click(bar, false);
lv_obj_set_size(bar, LV_DPI * 2, LV_DPI / 10);
lv_bar_set_value(bar, ext->cur_value, false);
lv_theme_apply(bar, LV_THEME_BAR);
} else {
lv_bar_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
ext->min_value = ext_copy->min_value;
@@ -125,15 +124,18 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
ext->cur_value = ext_copy->cur_value;
ext->style_indic = ext_copy->style_indic;
ext->type = ext_copy->type;
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_bar);
lv_bar_set_value(new_bar, ext->cur_value, false);
lv_style_list_copy(&ext->style_indic, &ext_copy->style_indic);
/*Refresh the style with new signal function*/
lv_obj_refresh_style(bar);
lv_bar_set_value(bar, ext->cur_value, LV_ANIM_OFF);
}
LV_LOG_INFO("bar created");
return new_bar;
return bar;
}
/*=====================
@@ -491,7 +493,7 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
/*Draw the indicator*/
/*Do not draw a zero length indicator*/
if(!sym && indic_length_calc(&ext->indic_area) == 0) return;
if(!sym && indic_length_calc(&ext->indic_area) <= 1) return;
uint16_t bg_radius = lv_obj_get_style_int(bar, LV_BAR_PART_BG, LV_STYLE_RADIUS);
lv_coord_t short_side = LV_MATH_MIN(objw, objh);
@@ -508,11 +510,15 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
(!hor && lv_area_get_height(&ext->indic_area) > bg_radius * 2)) {
lv_opa_t bg_opa = draw_indic_dsc.bg_opa;
lv_opa_t border_opa = draw_indic_dsc.border_opa;
void * pattern_src = draw_indic_dsc.pattern_src;
draw_indic_dsc.bg_opa = LV_OPA_TRANSP;
draw_indic_dsc.border_opa = LV_OPA_TRANSP;
draw_indic_dsc.pattern_src = NULL;
lv_draw_rect(&ext->indic_area, clip_area, &draw_indic_dsc);
draw_indic_dsc.bg_opa = bg_opa;
draw_indic_dsc.border_opa = border_opa;
draw_indic_dsc.pattern_src = pattern_src;
}
lv_draw_mask_radius_param_t mask_bg_param;
@@ -532,6 +538,13 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
mask_indic_max_area.y1 += bg_top;
mask_indic_max_area.x2 -= bg_right;
mask_indic_max_area.y2 -= bg_bottom;
if(hor && lv_area_get_height(&mask_indic_max_area) < LV_BAR_SIZE_MIN) {
mask_indic_max_area.y1 = bar->coords.y1 + (objh / 2) - (LV_BAR_SIZE_MIN / 2);
mask_indic_max_area.y2 = mask_indic_max_area.y1 + LV_BAR_SIZE_MIN;
} else if(!hor && lv_area_get_width(&mask_indic_max_area) < LV_BAR_SIZE_MIN) {
mask_indic_max_area.x1 = bar->coords.x1 + (objw / 2) - (LV_BAR_SIZE_MIN / 2);
mask_indic_max_area.x2 = mask_indic_max_area.x1 + LV_BAR_SIZE_MIN;
}
/*Create a mask to the current indicator area to see only this part from the whole gradient.*/
lv_draw_mask_radius_param_t mask_indic_param;
@@ -545,6 +558,7 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
/*Draw the border*/
draw_indic_dsc.bg_opa = LV_OPA_TRANSP;
draw_indic_dsc.shadow_opa = LV_OPA_TRANSP;
draw_indic_dsc.pattern_src = NULL;
lv_draw_rect(&ext->indic_area, clip_area, &draw_indic_dsc);
lv_draw_mask_remove_id(mask_indic_id);

View File

@@ -83,6 +83,7 @@ typedef struct
enum {
LV_BAR_PART_BG, /** Bar background style. */
LV_BAR_PART_INDIC, /** Bar fill area style. */
_LV_BAR_PART_VIRTUAL_LAST
};
typedef uint8_t lv_bar_part_t;

View File

@@ -60,55 +60,49 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
{
LV_LOG_TRACE("button create started");
lv_obj_t * new_btn;
lv_obj_t * btn;
new_btn = lv_cont_create(par, copy);
LV_ASSERT_MEM(new_btn);
if(new_btn == NULL) return NULL;
btn = lv_cont_create(par, copy);
LV_ASSERT_MEM(btn);
if(btn == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_btn);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_btn);
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(btn);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(btn);
/*Allocate the extended data*/
lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(new_btn, sizeof(lv_btn_ext_t));
lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(btn, sizeof(lv_btn_ext_t));
LV_ASSERT_MEM(ext);
if(ext == NULL) {
lv_obj_del(new_btn);
lv_obj_del(btn);
return NULL;
}
ext->toggle = 0;
lv_obj_set_signal_cb(new_btn, lv_btn_signal);
lv_obj_set_design_cb(new_btn, lv_btn_design);
lv_obj_set_signal_cb(btn, lv_btn_signal);
lv_obj_set_design_cb(btn, lv_btn_design);
/*If no copy do the basic initialization*/
if(copy == NULL) {
/*Set layout if the button is not a screen*/
if(par != NULL) {
lv_btn_set_layout(new_btn, LV_LAYOUT_CENTER);
}
if(par) lv_btn_set_layout(btn, LV_LAYOUT_CENTER);
lv_obj_set_click(new_btn, true); /*Be sure the button is clickable*/
lv_obj_set_click(btn, true); /*Be sure the button is clickable*/
/*Set the default styles*/
lv_obj_reset_style(new_btn, LV_BTN_PART_MAIN);
lv_obj_add_style(new_btn, LV_BTN_PART_MAIN, _t(BTN));
lv_theme_apply(btn, LV_THEME_BTN);
}
/*Copy 'copy'*/
else {
lv_btn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
ext->toggle = copy_ext->toggle;
// memcpy((void*) ext->styles, copy_ext->styles, sizeof(ext->styles));
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_btn);
lv_obj_refresh_style(btn);
}
LV_LOG_INFO("button created");
return new_btn;
return btn;
}
/*=====================
@@ -153,7 +147,13 @@ void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
case LV_BTN_STATE_TGL_PR:
lv_obj_set_state(btn, LV_OBJ_STATE_PRESSED | LV_OBJ_STATE_CHECKED);
break;
case LV_BTN_STATE_INA:
lv_obj_set_state(btn, LV_OBJ_STATE_DISABLED);
break;
}
// /*Make the state change happen immediately, without transition*/
// btn->prev_state = btn->state;
}
/**

View File

@@ -77,9 +77,8 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
}
/*Initialize the allocated 'ext' */
lv_style_list_init(&ext->style_knob);
ext->value_to_set = NULL;
ext->dragging = false;
ext->dragging = 0;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_slider, lv_slider_signal);
@@ -90,7 +89,8 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_set_click(new_slider, true);
lv_obj_set_protect(new_slider, LV_PROTECT_PRESS_LOST);
_ot(new_slider, LV_SLIDER_PART_KNOB, SLIDER_KNOB);
lv_style_list_init(&ext->style_knob);
lv_theme_apply(new_slider, LV_THEME_SLIDER);
}
/*Copy an existing slider*/
else {
@@ -344,6 +344,7 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
/* The smaller size is the knob diameter*/
lv_coord_t knob_size = LV_MATH_MIN(lv_obj_get_width(slider), lv_obj_get_height(slider)) >> 1;
knob_size += LV_MATH_MAX(LV_MATH_MAX(knob_left, knob_right), LV_MATH_MAX(knob_bottom,knob_top));
knob_size += 2; /*For rounding error*/
lv_style_int_t knob_sh_width = lv_obj_get_style_int(slider, LV_SLIDER_PART_KNOB, LV_STYLE_SHADOW_WIDTH);
lv_style_int_t knob_sh_spread = lv_obj_get_style_int(slider, LV_SLIDER_PART_KNOB, LV_STYLE_SHADOW_SPREAD);
@@ -447,8 +448,6 @@ static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv
static void lv_slider_draw_knob(lv_obj_t * slider, const lv_area_t * knob_area, const lv_area_t * clip_area)
{
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
lv_draw_rect_dsc_t knob_rect_dsc;
lv_draw_rect_dsc_init(&knob_rect_dsc);
lv_obj_init_draw_rect_dsc(slider, LV_SLIDER_PART_KNOB, &knob_rect_dsc);

View File

@@ -34,6 +34,7 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param);
static lv_design_res_t lv_sw_design(lv_obj_t * sw, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_style_list_t * lv_sw_get_style(lv_obj_t * sw, uint8_t part);
static lv_style_list_t * lv_sw_get_style(lv_obj_t * sw, uint8_t part);
@@ -41,6 +42,7 @@ static lv_style_list_t * lv_sw_get_style(lv_obj_t * sw, uint8_t part);
* STATIC VARIABLES
**********************/
static lv_signal_cb_t ancestor_signal;
static lv_design_cb_t ancestor_design;
/**********************
* MACROS
@@ -61,12 +63,13 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
LV_LOG_TRACE("switch create started");
/*Create the ancestor of switch*/
lv_obj_t * new_sw = lv_slider_create(par, copy);
lv_obj_t * new_sw = lv_bar_create(par, copy);
LV_ASSERT_MEM(new_sw);
if(new_sw == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_sw);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_sw);
/*Allocate the switch type specific extended data*/
lv_sw_ext_t * ext = lv_obj_allocate_ext_attr(new_sw, sizeof(lv_sw_ext_t));
@@ -78,16 +81,18 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_sw, lv_sw_signal);
lv_obj_set_design_cb(new_sw, lv_sw_design);
/*Init the new switch switch*/
if(copy == NULL) {
lv_obj_set_click(new_sw, true);
lv_obj_set_protect(new_sw, LV_PROTECT_PRESS_LOST);
lv_obj_set_size(new_sw, 2 * LV_DPI / 3, LV_DPI / 3);
lv_slider_set_range(new_sw, 0, 1);
lv_bar_set_range(new_sw, 0, 1);
_ot(new_sw, LV_SW_PART_KNOB, SW_KNOB);
lv_style_list_init(&ext->style_knob);
lv_theme_apply(new_sw, LV_THEME_SW);
}
/*Copy an existing switch*/
else {
@@ -121,7 +126,7 @@ void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim)
#endif
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
ext->state = 1;
lv_slider_set_value(sw, 1, anim);
lv_bar_set_value(sw, 1, anim);
lv_obj_set_state(sw, LV_OBJ_STATE_CHECKED);
}
@@ -174,6 +179,75 @@ bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
* STATIC FUNCTIONS
**********************/
/**
* Handle the drawing related tasks of the sliders
* @param slider pointer to an object
* @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
* @param return an element of `lv_design_res_t`
*/
static lv_design_res_t lv_sw_design(lv_obj_t * sw, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
/*The ancestor design function will draw the background and the indicator.
* It also sets ext->bar.indic_area*/
ancestor_design(sw, clip_area, mode);
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
lv_coord_t objw = lv_obj_get_width(sw);
lv_coord_t objh = lv_obj_get_height(sw);
lv_coord_t knob_size = objh;
lv_area_t knob_area;
lv_style_int_t bg_left = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_PAD_LEFT);
lv_style_int_t bg_right = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_PAD_RIGHT);
lv_coord_t max_indic_w = objw - bg_left - bg_right;
lv_coord_t act_indic_w = lv_area_get_width(&ext->bar.indic_area);
knob_area.x1 = ext->bar.indic_area.x2 - ((act_indic_w * knob_size) / max_indic_w);
knob_area.x2 = knob_area.x1 + knob_size;
knob_area.y1 = sw->coords.y1;
knob_area.y2 = sw->coords.y2;
lv_style_int_t knob_left = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_LEFT);
lv_style_int_t knob_right = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_RIGHT);
lv_style_int_t knob_top = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_TOP);
lv_style_int_t knob_bottom = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_BOTTOM);
/*Apply the paddings on the knob area*/
knob_area.x1 -= knob_left;
knob_area.x2 += knob_right;
knob_area.y1 -= knob_top;
knob_area.y2 += knob_bottom;
lv_draw_rect_dsc_t knob_rect_dsc;
lv_draw_rect_dsc_init(&knob_rect_dsc);
lv_obj_init_draw_rect_dsc(sw, LV_SW_PART_KNOB, &knob_rect_dsc);
lv_draw_rect(&knob_area, clip_area, &knob_rect_dsc);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
return ancestor_design(sw, clip_area, mode);
}
return LV_DESIGN_RES_OK;
}
/**
* Signal function of the switch
* @param sw pointer to a switch object
@@ -198,15 +272,9 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
}
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
/* Include the ancient signal function */
if(sign != LV_SIGNAL_PRESSED &&
sign != LV_SIGNAL_PRESSING &&
sign != LV_SIGNAL_RELEASED) {
res = ancestor_signal(sw, sign, param);
if(res != LV_RES_OK) return res;
}
res = ancestor_signal(sw, sign, param);
if(res != LV_RES_OK) return res;
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
@@ -224,6 +292,44 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return res;
}else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
lv_style_int_t knob_left = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_LEFT);
lv_style_int_t knob_right = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_RIGHT);
lv_style_int_t knob_top = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_TOP);
lv_style_int_t knob_bottom = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_PAD_BOTTOM);
/* The smaller size is the knob diameter*/
lv_coord_t knob_size;
knob_size = LV_MATH_MAX(LV_MATH_MAX(knob_left, knob_right), LV_MATH_MAX(knob_bottom,knob_top));
knob_size += 2; /*For rounding error*/
lv_style_int_t knob_sh_width = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_SHADOW_WIDTH);
lv_style_int_t knob_sh_spread = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_SHADOW_SPREAD);
lv_style_int_t knob_sh_ox = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_SHADOW_OFFSET_X);
lv_style_int_t knob_sh_oy = lv_obj_get_style_int(sw, LV_SW_PART_KNOB, LV_STYLE_SHADOW_OFFSET_Y);
knob_size += knob_sh_width + knob_sh_spread;
knob_size += LV_MATH_MAX(LV_MATH_ABS(knob_sh_ox), LV_MATH_ABS(knob_sh_oy));
lv_style_int_t bg_sh_width = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_SHADOW_WIDTH);
lv_style_int_t bg_sh_spread = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_SHADOW_SPREAD);
lv_style_int_t bg_sh_ox = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_SHADOW_OFFSET_X);
lv_style_int_t bg_sh_oy = lv_obj_get_style_int(sw, LV_SW_PART_BG, LV_STYLE_SHADOW_OFFSET_Y);
lv_coord_t bg_size = bg_sh_width + bg_sh_spread;
bg_size += LV_MATH_MAX(LV_MATH_ABS(bg_sh_ox), LV_MATH_ABS(bg_sh_oy));
lv_style_int_t indic_sh_width = lv_obj_get_style_int(sw, LV_SW_PART_INDIC, LV_STYLE_SHADOW_WIDTH);
lv_style_int_t indic_sh_spread = lv_obj_get_style_int(sw, LV_SW_PART_INDIC, LV_STYLE_SHADOW_SPREAD);
lv_style_int_t indic_sh_ox = lv_obj_get_style_int(sw, LV_SW_PART_INDIC, LV_STYLE_SHADOW_OFFSET_X);
lv_style_int_t indic_sh_oy = lv_obj_get_style_int(sw, LV_SW_PART_INDIC, LV_STYLE_SHADOW_OFFSET_Y);
lv_coord_t indic_size = indic_sh_width + indic_sh_spread;
indic_size += LV_MATH_MAX(LV_MATH_ABS(indic_sh_ox), LV_MATH_ABS(indic_sh_oy));
sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, knob_size);
sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, indic_size);
sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, bg_size);
}
else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
@@ -245,10 +351,10 @@ static lv_style_list_t * lv_sw_get_style(lv_obj_t * sw, uint8_t part)
style_dsc_p = &sw->style_list;
break;
case LV_SW_PART_INDIC:
style_dsc_p = &ext->slider.bar.style_indic;
style_dsc_p = &ext->bar.style_indic;
break;
case LV_SW_PART_KNOB:
style_dsc_p = &ext->slider.style_knob;
style_dsc_p = &ext->style_knob;
break;
default:
style_dsc_p = NULL;

View File

@@ -23,7 +23,7 @@ extern "C" {
#endif
#include "../lv_core/lv_obj.h"
#include "lv_slider.h"
#include "lv_bar.h"
/*********************
* DEFINES
@@ -35,8 +35,9 @@ extern "C" {
/*Data of switch*/
typedef struct
{
lv_slider_ext_t slider; /*Ext. of ancestor*/
lv_bar_ext_t bar; /*Ext. of ancestor*/
/*New data for this type */
lv_style_list_t style_knob; /*Style of the knob*/
uint8_t state :1; /*The current state*/
} lv_sw_ext_t;
@@ -44,9 +45,10 @@ typedef struct
* Switch parts.
*/
enum {
LV_SW_PART_BG, /**< Switch background. */
LV_SW_PART_INDIC, /**< Switch fill area. */
LV_SW_PART_KNOB, /**< Switch knob (when off). */
LV_SW_PART_BG = LV_BAR_PART_BG, /**< Switch background. */
LV_SW_PART_INDIC = LV_BAR_PART_INDIC, /**< Switch fill area. */
LV_SW_PART_KNOB = _LV_BAR_PART_VIRTUAL_LAST, /**< Switch knob. */
_LV_SW_PART_VIRTUAL_LAST
};
typedef uint8_t lv_sw_part_t;

View File

@@ -74,16 +74,16 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
LV_LOG_TRACE("tab view create started");
/*Create the ancestor of tab*/
lv_obj_t * new_tabview = lv_obj_create(par, copy);
LV_ASSERT_MEM(new_tabview);
if(new_tabview == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_tabview);
lv_obj_t * tabview = lv_obj_create(par, copy);
LV_ASSERT_MEM(tabview);
if(tabview == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(tabview);
/*Allocate the tab type specific extended data*/
lv_tabview_ext_t * ext = lv_obj_allocate_ext_attr(new_tabview, sizeof(lv_tabview_ext_t));
lv_tabview_ext_t * ext = lv_obj_allocate_ext_attr(tabview, sizeof(lv_tabview_ext_t));
LV_ASSERT_MEM(ext);
if(ext == NULL) {
lv_obj_del(new_tabview);
lv_obj_del(tabview);
return NULL;
}
@@ -100,7 +100,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
#endif
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_tabview, lv_tabview_signal);
lv_obj_set_signal_cb(tabview, lv_tabview_signal);
/*Init the new tab tab*/
if(copy == NULL) {
@@ -113,11 +113,11 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
/* Set a size which fits into the parent.
* Don't use `par` directly because if the tabview is created on a page it is moved to the
* scrollable so the parent has changed */
lv_obj_set_size(new_tabview, lv_obj_get_width_fit(lv_obj_get_parent(new_tabview)),
lv_obj_get_height_fit(lv_obj_get_parent(new_tabview)));
lv_obj_set_size(tabview, lv_obj_get_width_fit(lv_obj_get_parent(tabview)),
lv_obj_get_height_fit(lv_obj_get_parent(tabview)));
ext->content = lv_page_create(new_tabview, NULL);
ext->btns = lv_btnm_create(new_tabview, NULL);
ext->content = lv_page_create(tabview, NULL);
ext->btns = lv_btnm_create(tabview, NULL);
ext->indic = lv_obj_create(ext->btns, NULL);
if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(ext->content));
@@ -134,16 +134,8 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_set_drag_dir(lv_page_get_scrl(ext->content), LV_DRAG_DIR_ONE);
lv_style_list_reset(lv_obj_get_style(ext->content, LV_PAGE_PART_BG));
lv_style_list_reset(lv_obj_get_style(ext->content, LV_PAGE_PART_SCRL));
lv_style_list_reset(lv_obj_get_style(new_tabview, LV_TABVIEW_PART_INDIC));
lv_style_list_reset(lv_obj_get_style(new_tabview, LV_TABVIEW_PART_BTNS));
lv_style_list_reset(lv_obj_get_style(new_tabview, LV_TABVIEW_PART_BTNS_BG));
lv_obj_reset_style(ext->content, LV_PAGE_PART_BG);
_ot(new_tabview, LV_TABVIEW_PART_BG_SCRL, TABVIEW_BG_SCRL);
_ot(new_tabview, LV_TABVIEW_PART_BTNS, TABVIEW_BTNS);
_ot(new_tabview, LV_TABVIEW_PART_BTNS_BG, TABVIEW_BTNS_BG);
_ot(new_tabview, LV_TABVIEW_PART_INDIC, TABVIEW_INDIC);
lv_theme_apply(tabview, LV_THEME_TABVIEW);
}
/*Copy an existing tab view*/
@@ -151,9 +143,9 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
lv_tabview_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
ext->point_last.x = 0;
ext->point_last.y = 0;
ext->btns = lv_btnm_create(new_tabview, copy_ext->btns);
ext->btns = lv_btnm_create(tabview, copy_ext->btns);
ext->indic = lv_obj_create(ext->btns, copy_ext->indic);
ext->content = lv_page_create(new_tabview, copy_ext->content);
ext->content = lv_page_create(tabview, copy_ext->content);
#if LV_USE_ANIMATION
ext->anim_time = copy_ext->anim_time;
#endif
@@ -179,11 +171,11 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
// lv_obj_refresh_style(new_tabview);
}
tabview_realign(new_tabview);
tabview_realign(tabview);
LV_LOG_INFO("tab view created");
return new_tabview;
return tabview;
}
/**
@@ -219,11 +211,8 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
lv_obj_t * h = lv_page_create(ext->content, NULL);
lv_obj_set_size(h, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
lv_page_set_sb_mode(h, LV_SB_MODE_AUTO);
lv_style_list_reset(lv_obj_get_style(h, LV_PAGE_PART_BG));
lv_style_list_reset(lv_obj_get_style(h, LV_PAGE_PART_SCRL));
_ot(h, LV_PAGE_PART_BG, TABVIEW_TAB_BG);
_ot(h, LV_PAGE_PART_SCRL, TABVIEW_TAB_SCRL);
lv_page_set_scroll_propagation(h, true);
lv_theme_apply(h, LV_THEME_TABVIEW_PAGE);
if(page_signal == NULL) page_signal = lv_obj_get_signal_cb(h);
@@ -376,9 +365,9 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
lv_coord_t indic_size;
lv_coord_t indic_pos = 0; /*silence uninitialized variable warning*/;
lv_style_int_t btns_bg_inner = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_INNER);
lv_style_int_t btns_bg_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_LEFT);
lv_style_int_t btns_bg_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_TOP);
lv_style_int_t btns_bg_inner = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_INNER);
lv_style_int_t btns_bg_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_LEFT);
lv_style_int_t btns_bg_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_TOP);
switch(ext->btns_pos) {
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
@@ -749,10 +738,10 @@ static lv_style_list_t * lv_tabview_get_style(lv_obj_t * tabview, uint8_t part)
case LV_TABVIEW_PART_BG_SCRL:
style_dsc_p = lv_obj_get_style(ext->content, LV_PAGE_PART_SCRL);
break;
case LV_TABVIEW_PART_BTNS_BG:
case LV_TABVIEW_PART_TAB_BG:
style_dsc_p = lv_obj_get_style(ext->btns, LV_BTNM_PART_BG);
break;
case LV_TABVIEW_PART_BTNS:
case LV_TABVIEW_PART_TAB:
style_dsc_p = lv_obj_get_style(ext->btns, LV_BTNM_PART_BTN);
break;
case LV_TABVIEW_PART_INDIC:
@@ -863,17 +852,17 @@ static void refr_btns_size(lv_obj_t * tabview)
{
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
lv_style_int_t btn_bg_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_LEFT);
lv_style_int_t btn_bg_right = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_RIGHT);
lv_style_int_t btn_bg_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_TOP);
lv_style_int_t btn_bg_bottom = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS_BG, LV_STYLE_PAD_BOTTOM);
lv_style_int_t btn_bg_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_LEFT);
lv_style_int_t btn_bg_right = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_RIGHT);
lv_style_int_t btn_bg_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_TOP);
lv_style_int_t btn_bg_bottom = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB_BG, LV_STYLE_PAD_BOTTOM);
lv_style_int_t btn_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS, LV_STYLE_PAD_LEFT);
lv_style_int_t btn_right = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS, LV_STYLE_PAD_RIGHT);
lv_style_int_t btn_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS, LV_STYLE_PAD_TOP);
lv_style_int_t btn_bottom = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_BTNS, LV_STYLE_PAD_BOTTOM);
lv_style_int_t btn_left = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB, LV_STYLE_PAD_LEFT);
lv_style_int_t btn_right = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB, LV_STYLE_PAD_RIGHT);
lv_style_int_t btn_top = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB, LV_STYLE_PAD_TOP);
lv_style_int_t btn_bottom = lv_obj_get_style_int(tabview, LV_TABVIEW_PART_TAB, LV_STYLE_PAD_BOTTOM);
const lv_font_t * font = lv_obj_get_style_ptr(tabview, LV_TABVIEW_PART_BTNS, LV_STYLE_FONT);
const lv_font_t * font = lv_obj_get_style_ptr(tabview, LV_TABVIEW_PART_TAB, LV_STYLE_FONT);
/*Set the tabs height/width*/
lv_coord_t btns_w;

View File

@@ -71,8 +71,8 @@ enum {
_LV_TABVIEW_PART_VIRTUAL_LAST = _LV_OBJ_PART_VIRTUAL_LAST,
LV_TABVIEW_PART_BG_SCRL = _LV_OBJ_PART_REAL_LAST,
LV_TABVIEW_PART_BTNS,
LV_TABVIEW_PART_BTNS_BG,
LV_TABVIEW_PART_TAB,
LV_TABVIEW_PART_TAB_BG,
LV_TABVIEW_PART_INDIC,
_LV_TABVIEW_PART_REAL_LAST,
};

View File

@@ -58,6 +58,11 @@ lv_style_t * lv_theme_get_style(lv_theme_style_t name)
return act_theme->get_style_cb(name);
}
void lv_theme_apply(lv_obj_t * obj, lv_theme_style_t name)
{
act_theme->apply_cb(obj, name);
}
/**********************
* STATIC FUNCTIONS

View File

@@ -17,6 +17,8 @@ extern "C" {
#include "../lv_core/lv_style.h"
#include "../../lvgl.h"
/*********************
* DEFINES
*********************/
@@ -32,6 +34,7 @@ extern "C" {
* backgrounds and panels.
*/
typedef enum {
LV_THEME_NONE = 0,
LV_THEME_SCR,
LV_THEME_SCR_TRANSP,
@@ -57,15 +60,10 @@ typedef enum {
LV_THEME_BTNM_BTN,
LV_THEME_BAR,
LV_THEME_BAR_INDIC,
LV_THEME_SLIDER,
LV_THEME_SLIDER_INDIC,
LV_THEME_SLIDER_KNOB,
LV_THEME_SW,
LV_THEME_SW_INDIC,
LV_THEME_SW_KNOB,
LV_THEME_CB,
LV_THEME_CB_BULLET,
@@ -79,14 +77,8 @@ typedef enum {
LV_THEME_ROLLER_SCRL,
LV_THEME_ROLLER_SEL,
LV_THEME_TABVIEW_BG,
LV_THEME_TABVIEW_BG_SCRL,
LV_THEME_TABVIEW_BTNS,
LV_THEME_TABVIEW_BTNS_BG,
LV_THEME_TABVIEW_INDIC,
LV_THEME_TABVIEW_TAB_BG,
LV_THEME_TABVIEW_TAB_SCRL,
LV_THEME_TABVIEW_TAB_SCRLBAR,
LV_THEME_TABVIEW,
LV_THEME_TABVIEW_PAGE,
LV_THEME_LMETER,
@@ -133,6 +125,8 @@ typedef enum {
typedef struct {
lv_style_t * (*get_style_cb)(lv_theme_style_t);
void (*apply_cb)(lv_obj_t *,lv_theme_style_t);
lv_style_t * (*get_style_part_cb)(lv_theme_style_t name, uint8_t part);
}lv_theme_t;
/**********************
@@ -154,6 +148,10 @@ lv_theme_t * lv_theme_get_act(void);
lv_style_t * lv_theme_get_style(lv_theme_style_t name);
void lv_theme_apply(lv_obj_t * obj, lv_theme_style_t name);
lv_style_t * lv_theme_get_style_part(lv_theme_style_t name, uint8_t part);
/**********************
* MACROS
**********************/

View File

@@ -14,6 +14,9 @@
/*********************
* DEFINES
*********************/
#define COLOR_BG lv_color_hex(0x22252a)
#define COLOR_PANEL lv_color_hex(0x282b30)
#define COLOR_PRIMARY lv_color_hex(0x007aff)
/**********************
* TYPEDEFS
@@ -22,6 +25,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
void lv_theme_alien_apply(lv_obj_t * obj, lv_theme_style_t name);
/**********************
* STATIC VARIABLES
@@ -36,11 +40,16 @@ static lv_style_t btn;
static lv_style_t sb;
#if LV_USE_BAR
static lv_style_t bar_bg;
static lv_style_t bar_indic;
#endif
#if LV_USE_SLIDER
static lv_style_t knob;
static lv_style_t slider_knob;
#endif
#if LV_USE_SW
static lv_style_t sw_knob;
#endif
#if LV_USE_LMETER
@@ -69,6 +78,11 @@ static lv_style_t arc_bg;
static lv_style_t calendar_date_nums;
#endif
#if LV_USE_TABVIEW
static lv_style_t tabview_btns, tabview_btns_bg, tabview_indic;
#endif
#if LV_USE_TABLE
static lv_style_t table_cell;
#endif
@@ -88,17 +102,16 @@ static void basic_init(void)
{
lv_style_init(&scr);
lv_style_set_opa(&scr, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&scr, LV_STYLE_BG_COLOR, lv_color_hex(0x22252a));
lv_style_set_color(&scr, LV_STYLE_BG_COLOR, COLOR_BG);
lv_style_set_color(&scr, LV_STYLE_TEXT_COLOR , lv_color_hex(0xb8b8b9));
lv_style_init(&panel);
lv_style_set_int(&panel, LV_STYLE_RADIUS, LV_DPI / 25);
lv_style_set_opa(&panel, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&panel, LV_STYLE_BG_COLOR, lv_color_hex(0x282b30));
lv_style_set_color(&panel, LV_STYLE_BG_COLOR, COLOR_PANEL);
lv_style_set_color(&panel, LV_STYLE_BORDER_COLOR, lv_color_hex(0x3a3d42));
lv_style_set_int(&panel, LV_STYLE_BORDER_WIDTH, LV_DPI / 50 > 0 ? LV_DPI / 50 : 1);
lv_style_set_int(&panel, LV_STYLE_BORDER_SIDE , LV_BORDER_SIDE_TOP);
lv_style_set_int(&panel, LV_STYLE_PAD_LEFT, LV_DPI / 5);
lv_style_set_int(&panel, LV_STYLE_PAD_RIGHT, LV_DPI / 5);
lv_style_set_int(&panel, LV_STYLE_PAD_TOP, LV_DPI / 5);
@@ -111,17 +124,19 @@ static void basic_init(void)
lv_style_init(&btn);
lv_style_set_int(&btn, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
lv_style_set_opa(&btn, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&btn, LV_STYLE_BG_COLOR, lv_color_hex(0x007aff));
lv_style_set_color(&btn, LV_STYLE_BG_COLOR, COLOR_PRIMARY);
lv_style_set_color(&btn, LV_STYLE_BG_COLOR | LV_STYLE_STATE_PRESSED, lv_color_hex(0x005ec4));
lv_style_set_color(&btn, LV_STYLE_BG_COLOR | LV_STYLE_STATE_DISABLED, lv_color_hex(0x2f3237));
lv_style_set_color(&btn, LV_STYLE_TEXT_COLOR, lv_color_hex(0xffffff));
lv_style_set_color(&btn, LV_STYLE_TEXT_COLOR| LV_STYLE_STATE_PRESSED, lv_color_hex(0xdddddd));
lv_style_set_color(&btn, LV_STYLE_TEXT_COLOR| LV_STYLE_STATE_DISABLED, lv_color_hex(0x686b70));
lv_style_set_color(&btn, LV_STYLE_IMAGE_RECOLOR, LV_COLOR_WHITE);
lv_style_set_int(&btn, LV_STYLE_PAD_LEFT, LV_DPI / 20);
lv_style_set_int(&btn, LV_STYLE_PAD_RIGHT, LV_DPI / 20);
lv_style_set_int(&btn, LV_STYLE_PAD_TOP, LV_DPI / 20);
lv_style_set_int(&btn, LV_STYLE_PAD_BOTTOM, LV_DPI / 20);
lv_style_set_int(&btn, LV_STYLE_PAD_INNER, LV_DPI / 16);
lv_style_set_int(&btn, LV_STYLE_TRANSITION_TIME, 100);
lv_style_set_int(&btn, LV_STYLE_PAD_LEFT, LV_DPI / 5);
lv_style_set_int(&btn, LV_STYLE_PAD_RIGHT, LV_DPI / 5);
lv_style_set_int(&btn, LV_STYLE_PAD_TOP, LV_DPI / 10);
lv_style_set_int(&btn, LV_STYLE_PAD_BOTTOM, LV_DPI / 10);
lv_style_set_int(&btn, LV_STYLE_PAD_INNER, LV_DPI / 10);
lv_style_set_int(&btn, LV_STYLE_TRANSITION_TIME, 1000);
}
static void cont_init(void)
@@ -217,13 +232,17 @@ static void label_init(void)
static void bar_init(void)
{
#if LV_USE_BAR
lv_style_init(&bar_bg);
lv_style_set_int(&bar_bg, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
lv_style_set_opa(&bar_bg, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&bar_bg, LV_STYLE_BG_COLOR, COLOR_PANEL);
lv_style_init(&bar_indic);
lv_style_set_opa(&bar_indic, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&bar_indic, LV_STYLE_BG_COLOR, LV_COLOR_MAROON);
lv_style_set_int(&bar_indic, LV_STYLE_PAD_TOP, LV_DPI/20);
lv_style_set_int(&bar_indic, LV_STYLE_PAD_BOTTOM, LV_DPI/20);
lv_style_set_int(&bar_indic, LV_STYLE_PAD_LEFT, LV_DPI/20);
lv_style_set_int(&bar_indic, LV_STYLE_PAD_RIGHT, LV_DPI/20);
lv_style_set_int(&bar_indic, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
lv_style_set_color(&bar_indic, LV_STYLE_BG_COLOR, COLOR_PRIMARY);
lv_style_set_color(&bar_indic, LV_STYLE_BG_COLOR | LV_STYLE_STATE_DISABLED, lv_color_hex(0x4f5257));
#endif
}
@@ -251,22 +270,28 @@ static void led_init(void)
static void slider_init(void)
{
#if LV_USE_SLIDER != 0
lv_style_init(&knob);
lv_style_set_opa(&knob, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&knob, LV_STYLE_BG_COLOR, LV_COLOR_RED);
lv_style_set_color(&knob, LV_STYLE_BG_COLOR | LV_STYLE_STATE_CHECKED, LV_COLOR_LIME);
lv_style_set_int(&knob, LV_STYLE_PAD_TOP, LV_DPI/20);
lv_style_set_int(&knob, LV_STYLE_PAD_BOTTOM, LV_DPI/20);
lv_style_set_int(&knob, LV_STYLE_PAD_LEFT, LV_DPI/20);
lv_style_set_int(&knob, LV_STYLE_PAD_RIGHT, LV_DPI/20);
lv_style_init(&slider_knob);
lv_style_set_opa(&slider_knob, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&slider_knob, LV_STYLE_BG_COLOR, LV_COLOR_WHITE);
lv_style_set_int(&slider_knob, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
lv_style_set_int(&slider_knob, LV_STYLE_PAD_TOP, LV_DPI/20);
lv_style_set_int(&slider_knob, LV_STYLE_PAD_BOTTOM, LV_DPI/20);
lv_style_set_int(&slider_knob, LV_STYLE_PAD_LEFT, LV_DPI/20);
lv_style_set_int(&slider_knob, LV_STYLE_PAD_RIGHT, LV_DPI/20);
#endif
}
static void sw_init(void)
{
#if LV_USE_SW != 0
lv_style_init(&sw_knob);
lv_style_set_opa(&sw_knob, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&sw_knob, LV_STYLE_BG_COLOR, LV_COLOR_WHITE);
lv_style_set_int(&sw_knob, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
lv_style_set_int(&sw_knob, LV_STYLE_PAD_TOP, - LV_DPI/20);
lv_style_set_int(&sw_knob, LV_STYLE_PAD_BOTTOM, - LV_DPI/20);
lv_style_set_int(&sw_knob, LV_STYLE_PAD_LEFT, - LV_DPI/20);
lv_style_set_int(&sw_knob, LV_STYLE_PAD_RIGHT, - LV_DPI/20);
#endif
}
@@ -468,6 +493,27 @@ static void roller_init(void)
static void tabview_init(void)
{
#if LV_USE_TABVIEW != 0
lv_style_init(&tabview_btns_bg);
lv_style_set_color(&tabview_btns_bg, LV_STYLE_BORDER_COLOR, lv_color_hex(0x3a3d42));
lv_style_set_int(&tabview_btns_bg, LV_STYLE_BORDER_WIDTH, LV_DPI / 30 > 0 ? LV_DPI / 30 : 1);
lv_style_set_int(&tabview_btns_bg, LV_STYLE_BORDER_SIDE , LV_BORDER_SIDE_BOTTOM);
lv_style_set_color(&tabview_btns_bg, LV_STYLE_TEXT_COLOR, lv_color_hex(0x979a9f));
lv_style_set_ptr(&tabview_btns_bg, LV_STYLE_FONT, &lv_font_roboto_16);
lv_style_set_color(&tabview_btns_bg, LV_STYLE_IMAGE_RECOLOR, lv_color_hex(0x979a9f));
lv_style_init(&tabview_btns);
lv_style_set_opa(&tabview_btns, LV_STYLE_BG_OPA | LV_STYLE_STATE_PRESSED, LV_OPA_COVER);
lv_style_set_color(&tabview_btns, LV_STYLE_BG_COLOR | LV_STYLE_STATE_PRESSED, lv_color_hex(0x666666));
lv_style_set_color(&tabview_btns, LV_STYLE_TEXT_COLOR | LV_STYLE_STATE_CHECKED, COLOR_PRIMARY);
lv_style_set_int(&tabview_btns, LV_STYLE_PAD_TOP, LV_DPI / 5);
lv_style_set_int(&tabview_btns, LV_STYLE_PAD_BOTTOM, LV_DPI / 5);
lv_style_init(&tabview_indic);
lv_style_set_opa(&tabview_indic, LV_STYLE_BG_OPA, LV_OPA_COVER);
lv_style_set_color(&tabview_indic, LV_STYLE_BG_COLOR, COLOR_PRIMARY);
lv_style_set_int(&tabview_indic, LV_STYLE_SIZE, LV_DPI / 20 > 0 ? LV_DPI / 20 : 1);
lv_style_set_int(&tabview_indic, LV_STYLE_RADIUS, LV_RADIUS_CIRCLE);
#endif
}
@@ -572,6 +618,7 @@ lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font)
theme.get_style_cb = lv_theme_alien_get_style;
theme.apply_cb = lv_theme_alien_apply;
return &theme;
}
@@ -584,6 +631,101 @@ lv_theme_t * lv_theme_alien_get(void)
return &theme;
}
void lv_theme_alien_apply(lv_obj_t * obj, lv_theme_style_t name)
{
lv_style_list_t * list;
switch(name) {
case LV_THEME_BTN:
list = lv_obj_get_style(obj, LV_BTN_PART_MAIN);
lv_style_list_reset(list);
lv_style_list_add_style(list, &btn);
break;
case LV_THEME_BAR:
list = lv_obj_get_style(obj, LV_BAR_PART_BG);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_bg);
list = lv_obj_get_style(obj, LV_BAR_PART_INDIC);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_indic);
break;
case LV_THEME_SW:
list = lv_obj_get_style(obj, LV_SW_PART_BG);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_bg);
list = lv_obj_get_style(obj, LV_SW_PART_INDIC);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_indic);
list = lv_obj_get_style(obj, LV_SW_PART_KNOB);
lv_style_list_reset(list);
lv_style_list_add_style(list, &sw_knob);
break;
case LV_THEME_SLIDER:
list = lv_obj_get_style(obj, LV_SLIDER_PART_BG);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_bg);
list = lv_obj_get_style(obj, LV_SLIDER_PART_INDIC);
lv_style_list_reset(list);
lv_style_list_add_style(list, &bar_indic);
list = lv_obj_get_style(obj, LV_SLIDER_PART_KNOB);
lv_style_list_reset(list);
lv_style_list_add_style(list, &slider_knob);
break;
#if LV_USE_TABVIEW
case LV_THEME_TABVIEW:
list = lv_obj_get_style(obj, LV_TABVIEW_PART_BG);
lv_style_list_reset(list);
list = lv_obj_get_style(obj, LV_TABVIEW_PART_BG_SCRL);
lv_style_list_reset(list);
list = lv_obj_get_style(obj, LV_TABVIEW_PART_TAB_BG);
lv_style_list_reset(list);
lv_style_list_add_style(list, &tabview_btns_bg);
list = lv_obj_get_style(obj, LV_TABVIEW_PART_INDIC);
lv_style_list_reset(list);
lv_style_list_add_style(list, &tabview_indic);
list = lv_obj_get_style(obj, LV_TABVIEW_PART_TAB);
lv_style_list_reset(list);
lv_style_list_add_style(list, &tabview_btns);
break;
case LV_THEME_TABVIEW_PAGE:
list = lv_obj_get_style(obj, LV_PAGE_PART_BG);
lv_style_list_reset(list);
list = lv_obj_get_style(obj, LV_PAGE_PART_SCRL);
lv_style_list_reset(list);
break;
// case LV_THEME_TABVIEW_BG:
// case LV_THEME_TABVIEW_BTNS_BG:
// case LV_THEME_TABVIEW_TAB_SCRL:
// case LV_THEME_TABVIEW_BG_SCRL:
// return NULL;
// case LV_THEME_TABVIEW_TAB_BG:
// return &scr;
// case LV_THEME_TABVIEW_BTNS:
// return &btn;
#endif
}
lv_obj_refresh_style(obj);
}
lv_style_t * lv_theme_alien_get_style(lv_theme_style_t name)
{
switch(name) {
@@ -593,26 +735,11 @@ lv_style_t * lv_theme_alien_get_style(lv_theme_style_t name)
return &transp;
case LV_THEME_PANEL:
return &panel;
case LV_THEME_BTN:
return &btn;
case LV_THEME_BTNM:
return &panel;
case LV_THEME_BTNM_BTN:
return &btn;
#if LV_USE_LMETER
case LV_THEME_BAR:
return &panel;
case LV_THEME_BAR_INDIC:
return &bar_indic;
#endif
#if LV_USE_SLIDER
case LV_THEME_SLIDER:
return &panel;
case LV_THEME_SLIDER_INDIC:
return &bar_indic;
case LV_THEME_SLIDER_KNOB:
return &knob;
#endif
#if LV_USE_CB
case LV_THEME_CB:
return &panel;
@@ -625,19 +752,6 @@ lv_style_t * lv_theme_alien_get_style(lv_theme_style_t name)
case LV_THEME_DDLIST_SEL:
return &btn;
#endif
#if LV_USE_TABVIEW
case LV_THEME_TABVIEW_BG:
case LV_THEME_TABVIEW_BTNS_BG:
case LV_THEME_TABVIEW_TAB_SCRL:
case LV_THEME_TABVIEW_BG_SCRL:
return NULL;
case LV_THEME_TABVIEW_INDIC:
return &panel;
case LV_THEME_TABVIEW_TAB_BG:
return &scr;
case LV_THEME_TABVIEW_BTNS:
return &btn;
#endif
#if LV_USE_LMETER
case LV_THEME_LMETER:
return &lmeter;

View File

@@ -37,6 +37,7 @@ extern "C" {
lv_theme_t * lv_theme_alien_init(uint16_t hue, lv_font_t * font);
lv_theme_t * lv_theme_alien_get(void);
lv_style_t * lv_theme_alien_get_style_part(lv_theme_style_t name, uint8_t part);
lv_style_t * lv_theme_alien_get_style(lv_theme_style_t name);