#include "../lv_examples.h" #if LV_BUILD_EXAMPLES && LV_USE_IMG static lv_style_t style_btn; /*Will be called when the styles of the base theme are already added to add new styles*/ static void new_theme_apply_cb(lv_theme_t * th, lv_obj_t * obj) { LV_UNUSED(th); if(lv_obj_check_type(obj, &lv_btn_class)) { lv_obj_add_style(obj, &style_btn, 0); } } static void new_theme_init_and_set(void) { /*Initialize the styles*/ lv_style_init(&style_btn); lv_style_set_bg_color(&style_btn, lv_palette_main(LV_PALETTE_GREEN)); lv_style_set_border_color(&style_btn, lv_palette_darken(LV_PALETTE_GREEN, 3)); lv_style_set_border_width(&style_btn, 3); /*Initialize the new theme from the current theme*/ lv_theme_t * th_act = lv_disp_get_theme(NULL); static lv_theme_t th_new; th_new = *th_act; /*Set the parent theme and the style apply callback for the new theme*/ lv_theme_set_parent(&th_new, th_act); lv_theme_set_apply_cb(&th_new, new_theme_apply_cb); /*Assign the new theme to the current display*/ lv_disp_set_theme(NULL, &th_new); } /** * Extending the current theme */ void lv_example_style_14(void) { lv_obj_t * btn; lv_obj_t * label; btn = lv_btn_create(lv_scr_act()); lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 20); label = lv_label_create(btn); lv_label_set_text(label, "Original theme"); new_theme_init_and_set(); btn = lv_btn_create(lv_scr_act()); lv_obj_align(btn, LV_ALIGN_BOTTOM_MID, 0, -20); label = lv_label_create(btn); lv_label_set_text(label, "New theme"); } #endif