acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

lv_theme_default.c (49296B)

      1 /**
      2  * @file lv_theme_default.c
      3  *
      4  */
      5 
      6 /*********************
      7  *      INCLUDES
      8  *********************/
      9 #include "../../../lvgl.h" /*To see all the widgets*/
     10 
     11 #if LV_USE_THEME_DEFAULT
     12 
     13 #include "lv_theme_default.h"
     14 #include "../../../misc/lv_gc.h"
     15 
     16 /*********************
     17  *      DEFINES
     18  *********************/
     19 #define MODE_DARK 1
     20 #define RADIUS_DEFAULT (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 8))
     21 
     22 /*SCREEN*/
     23 #define LIGHT_COLOR_SCR        lv_palette_lighten(LV_PALETTE_GREY, 4)
     24 #define LIGHT_COLOR_CARD       lv_color_white()
     25 #define LIGHT_COLOR_TEXT       lv_palette_darken(LV_PALETTE_GREY, 4)
     26 #define LIGHT_COLOR_GREY       lv_palette_lighten(LV_PALETTE_GREY, 2)
     27 #define DARK_COLOR_SCR         lv_color_hex(0x15171A)
     28 #define DARK_COLOR_CARD        lv_color_hex(0x282b30)
     29 #define DARK_COLOR_TEXT        lv_palette_lighten(LV_PALETTE_GREY, 5)
     30 #define DARK_COLOR_GREY        lv_color_hex(0x2f3237)
     31 
     32 #define TRANSITION_TIME         LV_THEME_DEFAULT_TRANSITION_TIME
     33 #define BORDER_WIDTH            lv_disp_dpx(theme.disp, 2)
     34 #define OUTLINE_WIDTH           lv_disp_dpx(theme.disp, 3)
     35 
     36 #define PAD_DEF     (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 24) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 20) : lv_disp_dpx(theme.disp, 16))
     37 #define PAD_SMALL   (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 14) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 10))
     38 #define PAD_TINY   (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 8) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 6) : lv_disp_dpx(theme.disp, 2))
     39 
     40 /**********************
     41  *      TYPEDEFS
     42  **********************/
     43 typedef struct {
     44     lv_style_t scr;
     45     lv_style_t scrollbar;
     46     lv_style_t scrollbar_scrolled;
     47     lv_style_t card;
     48     lv_style_t btn;
     49 
     50     /*Utility*/
     51     lv_style_t bg_color_primary;
     52     lv_style_t bg_color_primary_muted;
     53     lv_style_t bg_color_secondary;
     54     lv_style_t bg_color_secondary_muted;
     55     lv_style_t bg_color_grey;
     56     lv_style_t bg_color_white;
     57     lv_style_t pressed;
     58     lv_style_t disabled;
     59     lv_style_t pad_zero;
     60     lv_style_t pad_tiny;
     61     lv_style_t pad_small;
     62     lv_style_t pad_normal;
     63     lv_style_t pad_gap;
     64     lv_style_t line_space_large;
     65     lv_style_t text_align_center;
     66     lv_style_t outline_primary;
     67     lv_style_t outline_secondary;
     68     lv_style_t circle;
     69     lv_style_t no_radius;
     70     lv_style_t clip_corner;
     71 #if LV_THEME_DEFAULT_GROW
     72     lv_style_t grow;
     73 #endif
     74     lv_style_t transition_delayed;
     75     lv_style_t transition_normal;
     76     lv_style_t anim;
     77     lv_style_t anim_fast;
     78 
     79     /*Parts*/
     80     lv_style_t knob;
     81     lv_style_t indic;
     82 
     83 #if LV_USE_ARC
     84     lv_style_t arc_indic;
     85     lv_style_t arc_indic_primary;
     86 #endif
     87 
     88 #if LV_USE_CHART
     89     lv_style_t chart_series, chart_indic, chart_ticks, chart_bg;
     90 #endif
     91 
     92 #if LV_USE_DROPDOWN
     93     lv_style_t dropdown_list;
     94 #endif
     95 
     96 #if LV_USE_CHECKBOX
     97     lv_style_t cb_marker, cb_marker_checked;
     98 #endif
     99 
    100 #if LV_USE_SWITCH
    101     lv_style_t switch_knob;
    102 #endif
    103 
    104 #if LV_USE_LINE
    105     lv_style_t line;
    106 #endif
    107 
    108 #if LV_USE_TABLE
    109     lv_style_t table_cell;
    110 #endif
    111 
    112 #if LV_USE_METER
    113     lv_style_t meter_marker, meter_indic;
    114 #endif
    115 
    116 #if LV_USE_TEXTAREA
    117     lv_style_t ta_cursor, ta_placeholder;
    118 #endif
    119 
    120 #if LV_USE_CALENDAR
    121     lv_style_t calendar_btnm_bg, calendar_btnm_day, calendar_header;
    122 #endif
    123 
    124 #if LV_USE_COLORWHEEL
    125     lv_style_t colorwheel_main;
    126 #endif
    127 
    128 #if LV_USE_MENU
    129     lv_style_t menu_bg, menu_cont, menu_sidebar_cont, menu_main_cont, menu_page, menu_header_cont, menu_header_btn,
    130                menu_section, menu_pressed, menu_separator;
    131 #endif
    132 
    133 #if LV_USE_MSGBOX
    134     lv_style_t msgbox_bg, msgbox_btn_bg, msgbox_backdrop_bg;
    135 #endif
    136 
    137 #if LV_USE_KEYBOARD
    138     lv_style_t keyboard_btn_bg;
    139 #endif
    140 
    141 #if LV_USE_LIST
    142     lv_style_t list_bg, list_btn, list_item_grow, list_label;
    143 #endif
    144 
    145 #if LV_USE_TABVIEW
    146     lv_style_t tab_bg_focus, tab_btn;
    147 #endif
    148 #if LV_USE_LED
    149     lv_style_t led;
    150 #endif
    151 } my_theme_styles_t;
    152 
    153 typedef struct {
    154     lv_theme_t base;
    155     uint8_t light : 1;
    156 } my_theme_t;
    157 
    158 typedef enum {
    159     DISP_SMALL = 3,
    160     DISP_MEDIUM = 2,
    161     DISP_LARGE = 1,
    162 } disp_size_t;
    163 
    164 /**********************
    165  *  STATIC PROTOTYPES
    166  **********************/
    167 static void theme_apply(lv_theme_t * th, lv_obj_t * obj);
    168 static void style_init_reset(lv_style_t * style);
    169 
    170 /**********************
    171  *  STATIC VARIABLES
    172  **********************/
    173 static my_theme_styles_t * styles;
    174 static lv_theme_t theme;
    175 static disp_size_t disp_size;
    176 static lv_color_t color_scr;
    177 static lv_color_t color_text;
    178 static lv_color_t color_card;
    179 static lv_color_t color_grey;
    180 static bool inited = false;
    181 
    182 
    183 /**********************
    184  *      MACROS
    185  **********************/
    186 
    187 /**********************
    188  *   STATIC FUNCTIONS
    189  **********************/
    190 
    191 
    192 static lv_color_t dark_color_filter_cb(const lv_color_filter_dsc_t * f, lv_color_t c, lv_opa_t opa)
    193 {
    194     LV_UNUSED(f);
    195     return lv_color_darken(c, opa);
    196 }
    197 
    198 static lv_color_t grey_filter_cb(const lv_color_filter_dsc_t * f, lv_color_t color, lv_opa_t opa)
    199 {
    200     LV_UNUSED(f);
    201     if(theme.flags & MODE_DARK) return lv_color_mix(lv_palette_darken(LV_PALETTE_GREY, 2), color, opa);
    202     else return lv_color_mix(lv_palette_lighten(LV_PALETTE_GREY, 2), color, opa);
    203 }
    204 
    205 static void style_init(void)
    206 {
    207     static const lv_style_prop_t trans_props[] = {
    208         LV_STYLE_BG_OPA, LV_STYLE_BG_COLOR,
    209         LV_STYLE_TRANSFORM_WIDTH, LV_STYLE_TRANSFORM_HEIGHT,
    210         LV_STYLE_TRANSLATE_Y, LV_STYLE_TRANSLATE_X,
    211         LV_STYLE_TRANSFORM_ZOOM, LV_STYLE_TRANSFORM_ANGLE,
    212         LV_STYLE_COLOR_FILTER_OPA, LV_STYLE_COLOR_FILTER_DSC,
    213         0
    214     };
    215 
    216     color_scr = theme.flags & MODE_DARK ? DARK_COLOR_SCR : LIGHT_COLOR_SCR;
    217     color_text = theme.flags & MODE_DARK ? DARK_COLOR_TEXT : LIGHT_COLOR_TEXT;
    218     color_card = theme.flags & MODE_DARK ? DARK_COLOR_CARD : LIGHT_COLOR_CARD;
    219     color_grey = theme.flags & MODE_DARK ? DARK_COLOR_GREY : LIGHT_COLOR_GREY;
    220 
    221     style_init_reset(&styles->transition_delayed);
    222     style_init_reset(&styles->transition_normal);
    223 #if TRANSITION_TIME
    224     static lv_style_transition_dsc_t trans_delayed;
    225     lv_style_transition_dsc_init(&trans_delayed, trans_props, lv_anim_path_linear, TRANSITION_TIME, 70, NULL);
    226 
    227     static lv_style_transition_dsc_t trans_normal;
    228     lv_style_transition_dsc_init(&trans_normal, trans_props, lv_anim_path_linear, TRANSITION_TIME, 0, NULL);
    229 
    230     lv_style_set_transition(&styles->transition_delayed, &trans_delayed); /*Go back to default state with delay*/
    231 
    232     lv_style_set_transition(&styles->transition_normal, &trans_normal); /*Go back to default state with delay*/
    233 #endif
    234 
    235     style_init_reset(&styles->scrollbar);
    236     lv_color_t sb_color = (theme.flags & MODE_DARK) ? lv_palette_darken(LV_PALETTE_GREY,
    237                                                                         2) : lv_palette_main(LV_PALETTE_GREY);
    238     lv_style_set_bg_color(&styles->scrollbar, sb_color);
    239 
    240     lv_style_set_radius(&styles->scrollbar, LV_RADIUS_CIRCLE);
    241     lv_style_set_pad_all(&styles->scrollbar, lv_disp_dpx(theme.disp, 7));
    242     lv_style_set_width(&styles->scrollbar,  lv_disp_dpx(theme.disp, 5));
    243     lv_style_set_bg_opa(&styles->scrollbar,  LV_OPA_40);
    244 #if TRANSITION_TIME
    245     lv_style_set_transition(&styles->scrollbar, &trans_normal);
    246 #endif
    247 
    248     style_init_reset(&styles->scrollbar_scrolled);
    249     lv_style_set_bg_opa(&styles->scrollbar_scrolled,  LV_OPA_COVER);
    250 
    251     style_init_reset(&styles->scr);
    252     lv_style_set_bg_opa(&styles->scr, LV_OPA_COVER);
    253     lv_style_set_bg_color(&styles->scr, color_scr);
    254     lv_style_set_text_color(&styles->scr, color_text);
    255     lv_style_set_pad_row(&styles->scr, PAD_SMALL);
    256     lv_style_set_pad_column(&styles->scr, PAD_SMALL);
    257 
    258     style_init_reset(&styles->card);
    259     lv_style_set_radius(&styles->card, RADIUS_DEFAULT);
    260     lv_style_set_bg_opa(&styles->card, LV_OPA_COVER);
    261     lv_style_set_bg_color(&styles->card, color_card);
    262     lv_style_set_border_color(&styles->card, color_grey);
    263     lv_style_set_border_width(&styles->card, BORDER_WIDTH);
    264     lv_style_set_border_post(&styles->card, true);
    265     lv_style_set_text_color(&styles->card, color_text);
    266     lv_style_set_pad_all(&styles->card, PAD_DEF);
    267     lv_style_set_pad_row(&styles->card, PAD_SMALL);
    268     lv_style_set_pad_column(&styles->card, PAD_SMALL);
    269     lv_style_set_line_color(&styles->card, lv_palette_main(LV_PALETTE_GREY));
    270     lv_style_set_line_width(&styles->card, lv_disp_dpx(theme.disp, 1));
    271 
    272     style_init_reset(&styles->outline_primary);
    273     lv_style_set_outline_color(&styles->outline_primary, theme.color_primary);
    274     lv_style_set_outline_width(&styles->outline_primary, OUTLINE_WIDTH);
    275     lv_style_set_outline_pad(&styles->outline_primary, OUTLINE_WIDTH);
    276     lv_style_set_outline_opa(&styles->outline_primary, LV_OPA_50);
    277 
    278     style_init_reset(&styles->outline_secondary);
    279     lv_style_set_outline_color(&styles->outline_secondary, theme.color_secondary);
    280     lv_style_set_outline_width(&styles->outline_secondary, OUTLINE_WIDTH);
    281     lv_style_set_outline_opa(&styles->outline_secondary, LV_OPA_50);
    282 
    283     style_init_reset(&styles->btn);
    284     lv_style_set_radius(&styles->btn, (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp,
    285                                                                              16) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 8)));
    286     lv_style_set_bg_opa(&styles->btn, LV_OPA_COVER);
    287     lv_style_set_bg_color(&styles->btn, color_grey);
    288     if(!(theme.flags & MODE_DARK)) {
    289         lv_style_set_shadow_color(&styles->btn, lv_palette_main(LV_PALETTE_GREY));
    290         lv_style_set_shadow_width(&styles->btn, LV_DPX(3));
    291         lv_style_set_shadow_opa(&styles->btn, LV_OPA_50);
    292         lv_style_set_shadow_ofs_y(&styles->btn, lv_disp_dpx(theme.disp, LV_DPX(4)));
    293     }
    294     lv_style_set_text_color(&styles->btn, color_text);
    295     lv_style_set_pad_hor(&styles->btn, PAD_DEF);
    296     lv_style_set_pad_ver(&styles->btn, PAD_SMALL);
    297     lv_style_set_pad_column(&styles->btn, lv_disp_dpx(theme.disp, 5));
    298     lv_style_set_pad_row(&styles->btn, lv_disp_dpx(theme.disp, 5));
    299 
    300     static lv_color_filter_dsc_t dark_filter;
    301     lv_color_filter_dsc_init(&dark_filter, dark_color_filter_cb);
    302 
    303     static lv_color_filter_dsc_t grey_filter;
    304     lv_color_filter_dsc_init(&grey_filter, grey_filter_cb);
    305 
    306     style_init_reset(&styles->pressed);
    307     lv_style_set_color_filter_dsc(&styles->pressed, &dark_filter);
    308     lv_style_set_color_filter_opa(&styles->pressed, 35);
    309 
    310     style_init_reset(&styles->disabled);
    311     lv_style_set_color_filter_dsc(&styles->disabled, &grey_filter);
    312     lv_style_set_color_filter_opa(&styles->disabled, LV_OPA_50);
    313 
    314     style_init_reset(&styles->clip_corner);
    315     lv_style_set_clip_corner(&styles->clip_corner, true);
    316     lv_style_set_border_post(&styles->clip_corner, true);
    317 
    318     style_init_reset(&styles->pad_normal);
    319     lv_style_set_pad_all(&styles->pad_normal, PAD_DEF);
    320     lv_style_set_pad_row(&styles->pad_normal, PAD_DEF);
    321     lv_style_set_pad_column(&styles->pad_normal, PAD_DEF);
    322 
    323     style_init_reset(&styles->pad_small);
    324     lv_style_set_pad_all(&styles->pad_small, PAD_SMALL);
    325     lv_style_set_pad_gap(&styles->pad_small, PAD_SMALL);
    326 
    327     style_init_reset(&styles->pad_gap);
    328     lv_style_set_pad_row(&styles->pad_gap, lv_disp_dpx(theme.disp, 10));
    329     lv_style_set_pad_column(&styles->pad_gap, lv_disp_dpx(theme.disp, 10));
    330 
    331     style_init_reset(&styles->line_space_large);
    332     lv_style_set_text_line_space(&styles->line_space_large, lv_disp_dpx(theme.disp, 20));
    333 
    334     style_init_reset(&styles->text_align_center);
    335     lv_style_set_text_align(&styles->text_align_center, LV_TEXT_ALIGN_CENTER);
    336 
    337     style_init_reset(&styles->pad_zero);
    338     lv_style_set_pad_all(&styles->pad_zero, 0);
    339     lv_style_set_pad_row(&styles->pad_zero, 0);
    340     lv_style_set_pad_column(&styles->pad_zero, 0);
    341 
    342     style_init_reset(&styles->pad_tiny);
    343     lv_style_set_pad_all(&styles->pad_tiny, PAD_TINY);
    344     lv_style_set_pad_row(&styles->pad_tiny, PAD_TINY);
    345     lv_style_set_pad_column(&styles->pad_tiny, PAD_TINY);
    346 
    347     style_init_reset(&styles->bg_color_primary);
    348     lv_style_set_bg_color(&styles->bg_color_primary, theme.color_primary);
    349     lv_style_set_text_color(&styles->bg_color_primary, lv_color_white());
    350     lv_style_set_bg_opa(&styles->bg_color_primary, LV_OPA_COVER);
    351 
    352     style_init_reset(&styles->bg_color_primary_muted);
    353     lv_style_set_bg_color(&styles->bg_color_primary_muted, theme.color_primary);
    354     lv_style_set_text_color(&styles->bg_color_primary_muted, theme.color_primary);
    355     lv_style_set_bg_opa(&styles->bg_color_primary_muted, LV_OPA_20);
    356 
    357     style_init_reset(&styles->bg_color_secondary);
    358     lv_style_set_bg_color(&styles->bg_color_secondary, theme.color_secondary);
    359     lv_style_set_text_color(&styles->bg_color_secondary, lv_color_white());
    360     lv_style_set_bg_opa(&styles->bg_color_secondary, LV_OPA_COVER);
    361 
    362     style_init_reset(&styles->bg_color_secondary_muted);
    363     lv_style_set_bg_color(&styles->bg_color_secondary_muted, theme.color_secondary);
    364     lv_style_set_text_color(&styles->bg_color_secondary_muted, theme.color_secondary);
    365     lv_style_set_bg_opa(&styles->bg_color_secondary_muted, LV_OPA_20);
    366 
    367     style_init_reset(&styles->bg_color_grey);
    368     lv_style_set_bg_color(&styles->bg_color_grey, color_grey);
    369     lv_style_set_bg_opa(&styles->bg_color_grey, LV_OPA_COVER);
    370     lv_style_set_text_color(&styles->bg_color_grey, color_text);
    371 
    372     style_init_reset(&styles->bg_color_white);
    373     lv_style_set_bg_color(&styles->bg_color_white, color_card);
    374     lv_style_set_bg_opa(&styles->bg_color_white, LV_OPA_COVER);
    375     lv_style_set_text_color(&styles->bg_color_white, color_text);
    376 
    377     style_init_reset(&styles->circle);
    378     lv_style_set_radius(&styles->circle, LV_RADIUS_CIRCLE);
    379 
    380     style_init_reset(&styles->no_radius);
    381     lv_style_set_radius(&styles->no_radius, 0);
    382 
    383 #if LV_THEME_DEFAULT_GROW
    384     style_init_reset(&styles->grow);
    385     lv_style_set_transform_width(&styles->grow, lv_disp_dpx(theme.disp, 3));
    386     lv_style_set_transform_height(&styles->grow, lv_disp_dpx(theme.disp, 3));
    387 #endif
    388 
    389     style_init_reset(&styles->knob);
    390     lv_style_set_bg_color(&styles->knob, theme.color_primary);
    391     lv_style_set_bg_opa(&styles->knob, LV_OPA_COVER);
    392     lv_style_set_pad_all(&styles->knob, lv_disp_dpx(theme.disp, 6));
    393     lv_style_set_radius(&styles->knob, LV_RADIUS_CIRCLE);
    394 
    395     style_init_reset(&styles->anim);
    396     lv_style_set_anim_time(&styles->anim, 200);
    397 
    398     style_init_reset(&styles->anim_fast);
    399     lv_style_set_anim_time(&styles->anim_fast, 120);
    400 
    401 #if LV_USE_ARC
    402     style_init_reset(&styles->arc_indic);
    403     lv_style_set_arc_color(&styles->arc_indic, color_grey);
    404     lv_style_set_arc_width(&styles->arc_indic, lv_disp_dpx(theme.disp, 15));
    405     lv_style_set_arc_rounded(&styles->arc_indic, true);
    406 
    407     style_init_reset(&styles->arc_indic_primary);
    408     lv_style_set_arc_color(&styles->arc_indic_primary, theme.color_primary);
    409 #endif
    410 
    411 #if LV_USE_DROPDOWN
    412     style_init_reset(&styles->dropdown_list);
    413     lv_style_set_max_height(&styles->dropdown_list, LV_DPI_DEF * 2);
    414 #endif
    415 #if LV_USE_CHECKBOX
    416     style_init_reset(&styles->cb_marker);
    417     lv_style_set_pad_all(&styles->cb_marker, lv_disp_dpx(theme.disp, 3));
    418     lv_style_set_border_width(&styles->cb_marker, BORDER_WIDTH);
    419     lv_style_set_border_color(&styles->cb_marker, theme.color_primary);
    420     lv_style_set_bg_color(&styles->cb_marker, color_card);
    421     lv_style_set_bg_opa(&styles->cb_marker, LV_OPA_COVER);
    422     lv_style_set_radius(&styles->cb_marker, RADIUS_DEFAULT / 2);
    423 
    424     style_init_reset(&styles->cb_marker_checked);
    425     lv_style_set_bg_img_src(&styles->cb_marker_checked, LV_SYMBOL_OK);
    426     lv_style_set_text_color(&styles->cb_marker_checked, lv_color_white());
    427     lv_style_set_text_font(&styles->cb_marker_checked, theme.font_small);
    428 #endif
    429 
    430 #if LV_USE_SWITCH
    431     style_init_reset(&styles->switch_knob);
    432     lv_style_set_pad_all(&styles->switch_knob, - lv_disp_dpx(theme.disp, 4));
    433     lv_style_set_bg_color(&styles->switch_knob, lv_color_white());
    434 #endif
    435 
    436 #if LV_USE_LINE
    437     style_init_reset(&styles->line);
    438     lv_style_set_line_width(&styles->line, 1);
    439     lv_style_set_line_color(&styles->line, color_text);
    440 #endif
    441 
    442 #if LV_USE_CHART
    443     style_init_reset(&styles->chart_bg);
    444     lv_style_set_border_post(&styles->chart_bg, false);
    445     lv_style_set_pad_column(&styles->chart_bg, lv_disp_dpx(theme.disp, 10));
    446     lv_style_set_line_color(&styles->chart_bg, color_grey);
    447 
    448     style_init_reset(&styles->chart_series);
    449     lv_style_set_line_width(&styles->chart_series, lv_disp_dpx(theme.disp, 3));
    450     lv_style_set_radius(&styles->chart_series, lv_disp_dpx(theme.disp, 3));
    451     lv_style_set_size(&styles->chart_series, lv_disp_dpx(theme.disp, 8));
    452     lv_style_set_pad_column(&styles->chart_series, lv_disp_dpx(theme.disp, 2));
    453 
    454     style_init_reset(&styles->chart_indic);
    455     lv_style_set_radius(&styles->chart_indic, LV_RADIUS_CIRCLE);
    456     lv_style_set_size(&styles->chart_indic, lv_disp_dpx(theme.disp, 8));
    457     lv_style_set_bg_color(&styles->chart_indic, theme.color_primary);
    458     lv_style_set_bg_opa(&styles->chart_indic, LV_OPA_COVER);
    459 
    460     style_init_reset(&styles->chart_ticks);
    461     lv_style_set_line_width(&styles->chart_ticks, lv_disp_dpx(theme.disp, 1));
    462     lv_style_set_line_color(&styles->chart_ticks, color_text);
    463     lv_style_set_pad_all(&styles->chart_ticks, lv_disp_dpx(theme.disp, 2));
    464     lv_style_set_text_color(&styles->chart_ticks, lv_palette_main(LV_PALETTE_GREY));
    465 #endif
    466 
    467 #if LV_USE_MENU
    468     style_init_reset(&styles->menu_bg);
    469     lv_style_set_pad_all(&styles->menu_bg, 0);
    470     lv_style_set_pad_gap(&styles->menu_bg, 0);
    471     lv_style_set_radius(&styles->menu_bg, 0);
    472     lv_style_set_clip_corner(&styles->menu_bg, true);
    473     lv_style_set_border_side(&styles->menu_bg, LV_BORDER_SIDE_NONE);
    474 
    475     style_init_reset(&styles->menu_section);
    476     lv_style_set_radius(&styles->menu_section, RADIUS_DEFAULT);
    477     lv_style_set_clip_corner(&styles->menu_section, true);
    478     lv_style_set_bg_opa(&styles->menu_section, LV_OPA_COVER);
    479     lv_style_set_bg_color(&styles->menu_section, color_card);
    480     lv_style_set_text_color(&styles->menu_section, color_text);
    481 
    482     style_init_reset(&styles->menu_cont);
    483     lv_style_set_pad_hor(&styles->menu_cont, PAD_SMALL);
    484     lv_style_set_pad_ver(&styles->menu_cont, PAD_SMALL);
    485     lv_style_set_pad_gap(&styles->menu_cont, PAD_SMALL);
    486     lv_style_set_border_width(&styles->menu_cont, lv_disp_dpx(theme.disp, 1));
    487     lv_style_set_border_opa(&styles->menu_cont, LV_OPA_10);
    488     lv_style_set_border_color(&styles->menu_cont, color_text);
    489     lv_style_set_border_side(&styles->menu_cont, LV_BORDER_SIDE_NONE);
    490 
    491     style_init_reset(&styles->menu_sidebar_cont);
    492     lv_style_set_pad_all(&styles->menu_sidebar_cont, 0);
    493     lv_style_set_pad_gap(&styles->menu_sidebar_cont, 0);
    494     lv_style_set_border_width(&styles->menu_sidebar_cont, lv_disp_dpx(theme.disp, 1));
    495     lv_style_set_border_opa(&styles->menu_sidebar_cont, LV_OPA_10);
    496     lv_style_set_border_color(&styles->menu_sidebar_cont, color_text);
    497     lv_style_set_border_side(&styles->menu_sidebar_cont, LV_BORDER_SIDE_RIGHT);
    498 
    499     style_init_reset(&styles->menu_main_cont);
    500     lv_style_set_pad_all(&styles->menu_main_cont, 0);
    501     lv_style_set_pad_gap(&styles->menu_main_cont, 0);
    502 
    503     style_init_reset(&styles->menu_header_cont);
    504     lv_style_set_pad_hor(&styles->menu_header_cont, PAD_SMALL);
    505     lv_style_set_pad_ver(&styles->menu_header_cont, PAD_TINY);
    506     lv_style_set_pad_gap(&styles->menu_header_cont, PAD_SMALL);
    507 
    508     style_init_reset(&styles->menu_header_btn);
    509     lv_style_set_pad_hor(&styles->menu_header_btn, PAD_TINY);
    510     lv_style_set_pad_ver(&styles->menu_header_btn, PAD_TINY);
    511     lv_style_set_shadow_opa(&styles->menu_header_btn, LV_OPA_TRANSP);
    512     lv_style_set_bg_opa(&styles->menu_header_btn, LV_OPA_TRANSP);
    513     lv_style_set_text_color(&styles->menu_header_btn, color_text);
    514 
    515     style_init_reset(&styles->menu_page);
    516     lv_style_set_pad_hor(&styles->menu_page, 0);
    517     lv_style_set_pad_gap(&styles->menu_page, 0);
    518 
    519     style_init_reset(&styles->menu_pressed);
    520     lv_style_set_bg_opa(&styles->menu_pressed, LV_OPA_20);
    521     lv_style_set_bg_color(&styles->menu_pressed, lv_palette_main(LV_PALETTE_GREY));
    522 
    523     style_init_reset(&styles->menu_separator);
    524     lv_style_set_bg_opa(&styles->menu_separator, LV_OPA_TRANSP);
    525     lv_style_set_pad_ver(&styles->menu_separator, PAD_TINY);
    526 #endif
    527 
    528 #if LV_USE_METER
    529     style_init_reset(&styles->meter_marker);
    530     lv_style_set_line_width(&styles->meter_marker, lv_disp_dpx(theme.disp, 5));
    531     lv_style_set_line_color(&styles->meter_marker, color_text);
    532     lv_style_set_size(&styles->meter_marker, lv_disp_dpx(theme.disp, 20));
    533     lv_style_set_pad_left(&styles->meter_marker, lv_disp_dpx(theme.disp, 15));
    534 
    535     style_init_reset(&styles->meter_indic);
    536     lv_style_set_radius(&styles->meter_indic, LV_RADIUS_CIRCLE);
    537     lv_style_set_bg_color(&styles->meter_indic, color_text);
    538     lv_style_set_bg_opa(&styles->meter_indic, LV_OPA_COVER);
    539     lv_style_set_size(&styles->meter_indic, lv_disp_dpx(theme.disp, 15));
    540 #endif
    541 
    542 #if LV_USE_TABLE
    543     style_init_reset(&styles->table_cell);
    544     lv_style_set_border_width(&styles->table_cell, lv_disp_dpx(theme.disp, 1));
    545     lv_style_set_border_color(&styles->table_cell, color_grey);
    546     lv_style_set_border_side(&styles->table_cell, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM);
    547 #endif
    548 
    549 #if LV_USE_TEXTAREA
    550     style_init_reset(&styles->ta_cursor);
    551     lv_style_set_border_color(&styles->ta_cursor, color_text);
    552     lv_style_set_border_width(&styles->ta_cursor, lv_disp_dpx(theme.disp, 2));
    553     lv_style_set_pad_left(&styles->ta_cursor, - lv_disp_dpx(theme.disp, 1));
    554     lv_style_set_border_side(&styles->ta_cursor, LV_BORDER_SIDE_LEFT);
    555     lv_style_set_anim_time(&styles->ta_cursor, 400);
    556 
    557     style_init_reset(&styles->ta_placeholder);
    558     lv_style_set_text_color(&styles->ta_placeholder, (theme.flags & MODE_DARK) ? lv_palette_darken(LV_PALETTE_GREY,
    559                                                                                                    2) : lv_palette_lighten(LV_PALETTE_GREY, 1));
    560 #endif
    561 
    562 #if LV_USE_CALENDAR
    563     style_init_reset(&styles->calendar_btnm_bg);
    564     lv_style_set_pad_all(&styles->calendar_btnm_bg, PAD_SMALL);
    565     lv_style_set_pad_gap(&styles->calendar_btnm_bg, PAD_SMALL / 2);
    566 
    567     style_init_reset(&styles->calendar_btnm_day);
    568     lv_style_set_border_width(&styles->calendar_btnm_day, lv_disp_dpx(theme.disp, 1));
    569     lv_style_set_border_color(&styles->calendar_btnm_day, color_grey);
    570     lv_style_set_bg_color(&styles->calendar_btnm_day, color_card);
    571     lv_style_set_bg_opa(&styles->calendar_btnm_day, LV_OPA_20);
    572 
    573     style_init_reset(&styles->calendar_header);
    574     lv_style_set_pad_hor(&styles->calendar_header, PAD_SMALL);
    575     lv_style_set_pad_top(&styles->calendar_header, PAD_SMALL);
    576     lv_style_set_pad_bottom(&styles->calendar_header, PAD_TINY);
    577     lv_style_set_pad_gap(&styles->calendar_header, PAD_SMALL);
    578 #endif
    579 
    580 #if LV_USE_COLORWHEEL
    581     style_init_reset(&styles->colorwheel_main);
    582     lv_style_set_arc_width(&styles->colorwheel_main, lv_disp_dpx(theme.disp, 10));
    583 #endif
    584 
    585 #if LV_USE_MSGBOX
    586     /*To add space for for the button shadow*/
    587     style_init_reset(&styles->msgbox_btn_bg);
    588     lv_style_set_pad_all(&styles->msgbox_btn_bg, lv_disp_dpx(theme.disp, 4));
    589 
    590     style_init_reset(&styles->msgbox_bg);
    591     lv_style_set_max_width(&styles->msgbox_bg, lv_pct(100));
    592 
    593     style_init_reset(&styles->msgbox_backdrop_bg);
    594     lv_style_set_bg_color(&styles->msgbox_backdrop_bg, lv_palette_main(LV_PALETTE_GREY));
    595     lv_style_set_bg_opa(&styles->msgbox_backdrop_bg, LV_OPA_50);
    596 #endif
    597 #if LV_USE_KEYBOARD
    598     style_init_reset(&styles->keyboard_btn_bg);
    599     lv_style_set_shadow_width(&styles->keyboard_btn_bg, 0);
    600     lv_style_set_radius(&styles->keyboard_btn_bg, disp_size == DISP_SMALL ? RADIUS_DEFAULT / 2 : RADIUS_DEFAULT);
    601 #endif
    602 
    603 #if LV_USE_TABVIEW
    604     style_init_reset(&styles->tab_btn);
    605     lv_style_set_border_color(&styles->tab_btn, theme.color_primary);
    606     lv_style_set_border_width(&styles->tab_btn, BORDER_WIDTH * 2);
    607     lv_style_set_border_side(&styles->tab_btn, LV_BORDER_SIDE_BOTTOM);
    608 
    609     style_init_reset(&styles->tab_bg_focus);
    610     lv_style_set_outline_pad(&styles->tab_bg_focus, -BORDER_WIDTH);
    611 #endif
    612 
    613 #if LV_USE_LIST
    614     style_init_reset(&styles->list_bg);
    615     lv_style_set_pad_hor(&styles->list_bg, PAD_DEF);
    616     lv_style_set_pad_ver(&styles->list_bg, 0);
    617     lv_style_set_pad_gap(&styles->list_bg, 0);
    618     lv_style_set_clip_corner(&styles->list_bg, true);
    619 
    620     style_init_reset(&styles->list_btn);
    621     lv_style_set_border_width(&styles->list_btn, lv_disp_dpx(theme.disp, 1));
    622     lv_style_set_border_color(&styles->list_btn, color_grey);
    623     lv_style_set_border_side(&styles->list_btn, LV_BORDER_SIDE_BOTTOM);
    624     lv_style_set_pad_all(&styles->list_btn, PAD_SMALL);
    625     lv_style_set_pad_column(&styles->list_btn, PAD_SMALL);
    626 
    627     style_init_reset(&styles->list_item_grow);
    628     lv_style_set_transform_width(&styles->list_item_grow, PAD_DEF);
    629 #endif
    630 
    631 
    632 #if LV_USE_LED
    633     style_init_reset(&styles->led);
    634     lv_style_set_bg_opa(&styles->led, LV_OPA_COVER);
    635     lv_style_set_bg_color(&styles->led, lv_color_white());
    636     lv_style_set_bg_grad_color(&styles->led, lv_palette_main(LV_PALETTE_GREY));
    637     lv_style_set_radius(&styles->led, LV_RADIUS_CIRCLE);
    638     lv_style_set_shadow_width(&styles->led, lv_disp_dpx(theme.disp, 15));
    639     lv_style_set_shadow_color(&styles->led, lv_color_white());
    640     lv_style_set_shadow_spread(&styles->led, lv_disp_dpx(theme.disp, 5));
    641 #endif
    642 }
    643 
    644 /**********************
    645  *   GLOBAL FUNCTIONS
    646  **********************/
    647 
    648 lv_theme_t * lv_theme_default_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark,
    649                                    const lv_font_t * font)
    650 {
    651 
    652     /*This trick is required only to avoid the garbage collection of
    653      *styles' data if LVGL is used in a binding (e.g. Micropython)
    654      *In a general case styles could be in simple `static lv_style_t my_style...` variables*/
    655     if(!lv_theme_default_is_inited()) {
    656         inited = false;
    657         LV_GC_ROOT(_lv_theme_default_styles) = lv_mem_alloc(sizeof(my_theme_styles_t));
    658         styles = (my_theme_styles_t *)LV_GC_ROOT(_lv_theme_default_styles);
    659     }
    660 
    661     if(LV_HOR_RES <= 320) disp_size = DISP_SMALL;
    662     else if(LV_HOR_RES < 720) disp_size = DISP_MEDIUM;
    663     else disp_size = DISP_LARGE;
    664 
    665     theme.disp = disp;
    666     theme.color_primary = color_primary;
    667     theme.color_secondary = color_secondary;
    668     theme.font_small = font;
    669     theme.font_normal = font;
    670     theme.font_large = font;
    671     theme.apply_cb = theme_apply;
    672     theme.flags = dark ? MODE_DARK : 0;
    673 
    674     style_init();
    675 
    676     if(disp == NULL || lv_disp_get_theme(disp) == &theme) lv_obj_report_style_change(NULL);
    677 
    678     inited = true;
    679 
    680     return (lv_theme_t *)&theme;
    681 }
    682 
    683 lv_theme_t * lv_theme_default_get(void)
    684 {
    685     if(!lv_theme_default_is_inited()) {
    686         return NULL;
    687     }
    688 
    689     return (lv_theme_t *)&theme;
    690 }
    691 
    692 bool lv_theme_default_is_inited(void)
    693 {
    694     return  LV_GC_ROOT(_lv_theme_default_styles) == NULL ? false : true;
    695 }
    696 
    697 
    698 static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
    699 {
    700     LV_UNUSED(th);
    701 
    702     if(lv_obj_get_parent(obj) == NULL) {
    703         lv_obj_add_style(obj, &styles->scr, 0);
    704         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    705         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    706         return;
    707     }
    708 
    709     if(lv_obj_check_type(obj, &lv_obj_class)) {
    710 #if LV_USE_TABVIEW
    711         lv_obj_t * parent = lv_obj_get_parent(obj);
    712         /*Tabview content area*/
    713         if(lv_obj_check_type(parent, &lv_tabview_class)) {
    714             return;
    715         }
    716         /*Tabview pages*/
    717         else if(lv_obj_check_type(lv_obj_get_parent(parent), &lv_tabview_class)) {
    718             lv_obj_add_style(obj, &styles->pad_normal, 0);
    719             lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    720             lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    721             return;
    722         }
    723 #endif
    724 
    725 #if LV_USE_WIN
    726         /*Header*/
    727         if(lv_obj_get_index(obj) == 0 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
    728             lv_obj_add_style(obj, &styles->bg_color_grey, 0);
    729             lv_obj_add_style(obj, &styles->pad_tiny, 0);
    730             return;
    731         }
    732         /*Content*/
    733         else if(lv_obj_get_index(obj) == 1 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
    734             lv_obj_add_style(obj, &styles->scr, 0);
    735             lv_obj_add_style(obj, &styles->pad_normal, 0);
    736             lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    737             lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    738             return;
    739         }
    740 #endif
    741 
    742 
    743 #if LV_USE_CALENDAR
    744         if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_calendar_class)) {
    745             /*No style*/
    746             return;
    747         }
    748 #endif
    749 
    750         lv_obj_add_style(obj, &styles->card, 0);
    751         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    752         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    753     }
    754 #if LV_USE_BTN
    755     else if(lv_obj_check_type(obj, &lv_btn_class)) {
    756         lv_obj_add_style(obj, &styles->btn, 0);
    757         lv_obj_add_style(obj, &styles->bg_color_primary, 0);
    758         lv_obj_add_style(obj, &styles->transition_delayed, 0);
    759         lv_obj_add_style(obj, &styles->pressed, LV_STATE_PRESSED);
    760         lv_obj_add_style(obj, &styles->transition_normal, LV_STATE_PRESSED);
    761         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    762 #if LV_THEME_DEFAULT_GROW
    763         lv_obj_add_style(obj, &styles->grow, LV_STATE_PRESSED);
    764 #endif
    765         lv_obj_add_style(obj, &styles->bg_color_secondary, LV_STATE_CHECKED);
    766         lv_obj_add_style(obj, &styles->disabled, LV_STATE_DISABLED);
    767 
    768 #if LV_USE_MENU
    769         if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_menu_sidebar_header_cont_class) ||
    770            lv_obj_check_type(lv_obj_get_parent(obj), &lv_menu_main_header_cont_class)) {
    771             lv_obj_add_style(obj, &styles->menu_header_btn, 0);
    772             lv_obj_add_style(obj, &styles->menu_pressed, LV_STATE_PRESSED);
    773         }
    774 #endif
    775     }
    776 #endif
    777 
    778 #if LV_USE_LINE
    779     else if(lv_obj_check_type(obj, &lv_line_class)) {
    780         lv_obj_add_style(obj, &styles->line, 0);
    781     }
    782 #endif
    783 
    784 #if LV_USE_BTNMATRIX
    785     else if(lv_obj_check_type(obj, &lv_btnmatrix_class)) {
    786 #if LV_USE_MSGBOX
    787         if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_msgbox_class)) {
    788             lv_obj_add_style(obj, &styles->msgbox_btn_bg, 0);
    789             lv_obj_add_style(obj, &styles->pad_gap, 0);
    790             lv_obj_add_style(obj, &styles->btn, LV_PART_ITEMS);
    791             lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
    792             lv_obj_add_style(obj, &styles->disabled, LV_PART_ITEMS | LV_STATE_DISABLED);
    793             lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_ITEMS | LV_STATE_CHECKED);
    794             lv_obj_add_style(obj, &styles->bg_color_primary_muted, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    795             lv_obj_add_style(obj, &styles->bg_color_secondary_muted, LV_PART_ITEMS | LV_STATE_EDITED);
    796             return;
    797         }
    798 #endif
    799 #if LV_USE_TABVIEW
    800         if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_tabview_class)) {
    801             lv_obj_add_style(obj, &styles->bg_color_white, 0);
    802             lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    803             lv_obj_add_style(obj, &styles->tab_bg_focus, LV_STATE_FOCUS_KEY);
    804             lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
    805             lv_obj_add_style(obj, &styles->bg_color_primary_muted, LV_PART_ITEMS | LV_STATE_CHECKED);
    806             lv_obj_add_style(obj, &styles->tab_btn, LV_PART_ITEMS | LV_STATE_CHECKED);
    807             lv_obj_add_style(obj, &styles->outline_primary, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    808             lv_obj_add_style(obj, &styles->outline_secondary, LV_PART_ITEMS | LV_STATE_EDITED);
    809             lv_obj_add_style(obj, &styles->tab_bg_focus, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    810             return;
    811         }
    812 #endif
    813 
    814 #if LV_USE_CALENDAR
    815         if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_calendar_class)) {
    816             lv_obj_add_style(obj, &styles->calendar_btnm_bg, 0);
    817             lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    818             lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    819             lv_obj_add_style(obj, &styles->calendar_btnm_day, LV_PART_ITEMS);
    820             lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
    821             lv_obj_add_style(obj, &styles->disabled, LV_PART_ITEMS | LV_STATE_DISABLED);
    822             lv_obj_add_style(obj, &styles->outline_primary, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    823             lv_obj_add_style(obj, &styles->outline_secondary, LV_PART_ITEMS | LV_STATE_EDITED);
    824             return;
    825         }
    826 #endif
    827         lv_obj_add_style(obj, &styles->card, 0);
    828         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    829         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    830         lv_obj_add_style(obj, &styles->btn, LV_PART_ITEMS);
    831         lv_obj_add_style(obj, &styles->disabled, LV_PART_ITEMS | LV_STATE_DISABLED);
    832         lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
    833         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_ITEMS | LV_STATE_CHECKED);
    834         lv_obj_add_style(obj, &styles->outline_primary, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    835         lv_obj_add_style(obj, &styles->outline_secondary, LV_PART_ITEMS | LV_STATE_EDITED);
    836     }
    837 #endif
    838 
    839 #if LV_USE_BAR
    840     else if(lv_obj_check_type(obj, &lv_bar_class)) {
    841         lv_obj_add_style(obj, &styles->bg_color_primary_muted, 0);
    842         lv_obj_add_style(obj, &styles->circle, 0);
    843         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    844         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    845         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_INDICATOR);
    846         lv_obj_add_style(obj, &styles->circle, LV_PART_INDICATOR);
    847     }
    848 #endif
    849 
    850 #if LV_USE_SLIDER
    851     else if(lv_obj_check_type(obj, &lv_slider_class)) {
    852         lv_obj_add_style(obj, &styles->bg_color_primary_muted, 0);
    853         lv_obj_add_style(obj, &styles->circle, 0);
    854         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    855         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    856         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_INDICATOR);
    857         lv_obj_add_style(obj, &styles->circle, LV_PART_INDICATOR);
    858         lv_obj_add_style(obj, &styles->knob, LV_PART_KNOB);
    859 #if LV_THEME_DEFAULT_GROW
    860         lv_obj_add_style(obj, &styles->grow, LV_PART_KNOB | LV_STATE_PRESSED);
    861 #endif
    862         lv_obj_add_style(obj, &styles->transition_delayed, LV_PART_KNOB);
    863         lv_obj_add_style(obj, &styles->transition_normal, LV_PART_KNOB | LV_STATE_PRESSED);
    864     }
    865 #endif
    866 
    867 #if LV_USE_TABLE
    868     else if(lv_obj_check_type(obj, &lv_table_class)) {
    869         lv_obj_add_style(obj, &styles->card, 0);
    870         lv_obj_add_style(obj, &styles->pad_zero, 0);
    871         lv_obj_add_style(obj, &styles->no_radius, 0);
    872         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    873         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    874         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    875         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    876         lv_obj_add_style(obj, &styles->bg_color_white, LV_PART_ITEMS);
    877         lv_obj_add_style(obj, &styles->table_cell, LV_PART_ITEMS);
    878         lv_obj_add_style(obj, &styles->pad_normal, LV_PART_ITEMS);
    879         lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
    880         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
    881         lv_obj_add_style(obj, &styles->bg_color_secondary, LV_PART_ITEMS | LV_STATE_EDITED);
    882     }
    883 #endif
    884 
    885 #if LV_USE_CHECKBOX
    886     else if(lv_obj_check_type(obj, &lv_checkbox_class)) {
    887         lv_obj_add_style(obj, &styles->pad_gap, 0);
    888         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    889         lv_obj_add_style(obj, &styles->disabled, LV_PART_INDICATOR | LV_STATE_DISABLED);
    890         lv_obj_add_style(obj, &styles->cb_marker, LV_PART_INDICATOR);
    891         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_INDICATOR | LV_STATE_CHECKED);
    892         lv_obj_add_style(obj, &styles->cb_marker_checked, LV_PART_INDICATOR | LV_STATE_CHECKED);
    893         lv_obj_add_style(obj, &styles->pressed, LV_PART_INDICATOR | LV_STATE_PRESSED);
    894 #if LV_THEME_DEFAULT_GROW
    895         lv_obj_add_style(obj, &styles->grow, LV_PART_INDICATOR | LV_STATE_PRESSED);
    896 #endif
    897         lv_obj_add_style(obj, &styles->transition_normal, LV_PART_INDICATOR | LV_STATE_PRESSED);
    898         lv_obj_add_style(obj, &styles->transition_delayed, LV_PART_INDICATOR);
    899     }
    900 #endif
    901 
    902 #if LV_USE_SWITCH
    903     else if(lv_obj_check_type(obj, &lv_switch_class)) {
    904         lv_obj_add_style(obj, &styles->bg_color_grey, 0);
    905         lv_obj_add_style(obj, &styles->circle, 0);
    906         lv_obj_add_style(obj, &styles->anim_fast, 0);
    907         lv_obj_add_style(obj, &styles->disabled, LV_STATE_DISABLED);
    908         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    909         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_INDICATOR | LV_STATE_CHECKED);
    910         lv_obj_add_style(obj, &styles->circle, LV_PART_INDICATOR);
    911         lv_obj_add_style(obj, &styles->disabled, LV_PART_INDICATOR | LV_STATE_DISABLED);
    912         lv_obj_add_style(obj, &styles->knob, LV_PART_KNOB);
    913         lv_obj_add_style(obj, &styles->bg_color_white, LV_PART_KNOB);
    914         lv_obj_add_style(obj, &styles->switch_knob, LV_PART_KNOB);
    915         lv_obj_add_style(obj, &styles->disabled, LV_PART_KNOB | LV_STATE_DISABLED);
    916 
    917         lv_obj_add_style(obj, &styles->transition_normal, LV_PART_INDICATOR | LV_STATE_CHECKED);
    918         lv_obj_add_style(obj, &styles->transition_normal, LV_PART_INDICATOR);
    919     }
    920 #endif
    921 
    922 #if LV_USE_CHART
    923     else if(lv_obj_check_type(obj, &lv_chart_class)) {
    924         lv_obj_add_style(obj, &styles->card, 0);
    925         lv_obj_add_style(obj, &styles->pad_small, 0);
    926         lv_obj_add_style(obj, &styles->chart_bg, 0);
    927         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    928         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    929         lv_obj_add_style(obj, &styles->chart_series, LV_PART_ITEMS);
    930         lv_obj_add_style(obj, &styles->chart_indic, LV_PART_INDICATOR);
    931         lv_obj_add_style(obj, &styles->chart_ticks, LV_PART_TICKS);
    932         lv_obj_add_style(obj, &styles->chart_series, LV_PART_CURSOR);
    933     }
    934 #endif
    935 
    936 #if LV_USE_ROLLER
    937     else if(lv_obj_check_type(obj, &lv_roller_class)) {
    938         lv_obj_add_style(obj, &styles->card, 0);
    939         lv_obj_add_style(obj, &styles->anim, 0);
    940         lv_obj_add_style(obj, &styles->line_space_large, 0);
    941         lv_obj_add_style(obj, &styles->text_align_center, 0);
    942         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    943         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    944         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_SELECTED);
    945     }
    946 #endif
    947 
    948 #if LV_USE_DROPDOWN
    949     else if(lv_obj_check_type(obj, &lv_dropdown_class)) {
    950         lv_obj_add_style(obj, &styles->card, 0);
    951         lv_obj_add_style(obj, &styles->pad_small, 0);
    952         lv_obj_add_style(obj, &styles->transition_delayed, 0);
    953         lv_obj_add_style(obj, &styles->transition_normal, LV_STATE_PRESSED);
    954         lv_obj_add_style(obj, &styles->pressed, LV_STATE_PRESSED);
    955         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
    956         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
    957         lv_obj_add_style(obj, &styles->transition_normal, LV_PART_INDICATOR);
    958     }
    959     else if(lv_obj_check_type(obj, &lv_dropdownlist_class)) {
    960         lv_obj_add_style(obj, &styles->card, 0);
    961         lv_obj_add_style(obj, &styles->clip_corner, 0);
    962         lv_obj_add_style(obj, &styles->line_space_large, 0);
    963         lv_obj_add_style(obj, &styles->dropdown_list, 0);
    964         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
    965         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
    966         lv_obj_add_style(obj, &styles->bg_color_white, LV_PART_SELECTED);
    967         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_SELECTED | LV_STATE_CHECKED);
    968         lv_obj_add_style(obj, &styles->pressed, LV_PART_SELECTED | LV_STATE_PRESSED);
    969     }
    970 #endif
    971 
    972 #if LV_USE_ARC
    973     else if(lv_obj_check_type(obj, &lv_arc_class)) {
    974         lv_obj_add_style(obj, &styles->arc_indic, 0);
    975         lv_obj_add_style(obj, &styles->arc_indic, LV_PART_INDICATOR);
    976         lv_obj_add_style(obj, &styles->arc_indic_primary, LV_PART_INDICATOR);
    977         lv_obj_add_style(obj, &styles->knob, LV_PART_KNOB);
    978     }
    979 #endif
    980 
    981 
    982 #if LV_USE_SPINNER
    983     else if(lv_obj_check_type(obj, &lv_spinner_class)) {
    984         lv_obj_add_style(obj, &styles->arc_indic, 0);
    985         lv_obj_add_style(obj, &styles->arc_indic, LV_PART_INDICATOR);
    986         lv_obj_add_style(obj, &styles->arc_indic_primary, LV_PART_INDICATOR);
    987     }
    988 #endif
    989 
    990 #if LV_USE_METER
    991     else if(lv_obj_check_type(obj, &lv_meter_class)) {
    992         lv_obj_add_style(obj, &styles->card, 0);
    993         lv_obj_add_style(obj, &styles->circle, 0);
    994         lv_obj_add_style(obj, &styles->meter_indic, LV_PART_INDICATOR);
    995     }
    996 #endif
    997 
    998 #if LV_USE_TEXTAREA
    999     else if(lv_obj_check_type(obj, &lv_textarea_class)) {
   1000         lv_obj_add_style(obj, &styles->card, 0);
   1001         lv_obj_add_style(obj, &styles->pad_small, 0);
   1002         lv_obj_add_style(obj, &styles->disabled, LV_STATE_DISABLED);
   1003         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
   1004         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
   1005         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1006         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1007         lv_obj_add_style(obj, &styles->ta_cursor, LV_PART_CURSOR | LV_STATE_FOCUSED);
   1008         lv_obj_add_style(obj, &styles->ta_placeholder, LV_PART_TEXTAREA_PLACEHOLDER);
   1009     }
   1010 #endif
   1011 
   1012 #if LV_USE_CALENDAR
   1013     else if(lv_obj_check_type(obj, &lv_calendar_class)) {
   1014         lv_obj_add_style(obj, &styles->card, 0);
   1015         lv_obj_add_style(obj, &styles->pad_zero, 0);
   1016     }
   1017 #endif
   1018 
   1019 #if LV_USE_CALENDAR_HEADER_ARROW
   1020     else if(lv_obj_check_type(obj, &lv_calendar_header_arrow_class)) {
   1021         lv_obj_add_style(obj, &styles->calendar_header, 0);
   1022     }
   1023 #endif
   1024 
   1025 #if LV_USE_CALENDAR_HEADER_DROPDOWN
   1026     else if(lv_obj_check_type(obj, &lv_calendar_header_dropdown_class)) {
   1027         lv_obj_add_style(obj, &styles->calendar_header, 0);
   1028     }
   1029 #endif
   1030 
   1031 #if LV_USE_KEYBOARD
   1032     else if(lv_obj_check_type(obj, &lv_keyboard_class)) {
   1033         lv_obj_add_style(obj, &styles->scr, 0);
   1034         lv_obj_add_style(obj, disp_size == DISP_LARGE ? &styles->pad_small : &styles->pad_tiny, 0);
   1035         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
   1036         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
   1037         lv_obj_add_style(obj, &styles->btn, LV_PART_ITEMS);
   1038         lv_obj_add_style(obj, &styles->disabled, LV_PART_ITEMS | LV_STATE_DISABLED);
   1039         lv_obj_add_style(obj, &styles->bg_color_white, LV_PART_ITEMS);
   1040         lv_obj_add_style(obj, &styles->keyboard_btn_bg, LV_PART_ITEMS);
   1041         lv_obj_add_style(obj, &styles->pressed, LV_PART_ITEMS | LV_STATE_PRESSED);
   1042         lv_obj_add_style(obj, &styles->bg_color_grey, LV_PART_ITEMS | LV_STATE_CHECKED);
   1043         lv_obj_add_style(obj, &styles->bg_color_primary_muted, LV_PART_ITEMS | LV_STATE_FOCUS_KEY);
   1044         lv_obj_add_style(obj, &styles->bg_color_secondary_muted, LV_PART_ITEMS | LV_STATE_EDITED);
   1045     }
   1046 #endif
   1047 #if LV_USE_LIST
   1048     else if(lv_obj_check_type(obj, &lv_list_class)) {
   1049         lv_obj_add_style(obj, &styles->card, 0);
   1050         lv_obj_add_style(obj, &styles->list_bg, 0);
   1051         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1052         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1053         return;
   1054     }
   1055     else if(lv_obj_check_type(obj, &lv_list_text_class)) {
   1056         lv_obj_add_style(obj, &styles->bg_color_grey, 0);
   1057         lv_obj_add_style(obj, &styles->list_item_grow, 0);
   1058     }
   1059     else if(lv_obj_check_type(obj, &lv_list_btn_class)) {
   1060         lv_obj_add_style(obj, &styles->bg_color_white, 0);
   1061         lv_obj_add_style(obj, &styles->list_btn, 0);
   1062         lv_obj_add_style(obj, &styles->bg_color_primary, LV_STATE_FOCUS_KEY);
   1063         lv_obj_add_style(obj, &styles->list_item_grow, LV_STATE_FOCUS_KEY);
   1064         lv_obj_add_style(obj, &styles->list_item_grow, LV_STATE_PRESSED);
   1065         lv_obj_add_style(obj, &styles->pressed, LV_STATE_PRESSED);
   1066 
   1067     }
   1068 #endif
   1069 #if LV_USE_MENU
   1070     else if(lv_obj_check_type(obj, &lv_menu_class)) {
   1071         lv_obj_add_style(obj, &styles->card, 0);
   1072         lv_obj_add_style(obj, &styles->menu_bg, 0);
   1073     }
   1074     else if(lv_obj_check_type(obj, &lv_menu_sidebar_cont_class)) {
   1075         lv_obj_add_style(obj, &styles->menu_sidebar_cont, 0);
   1076         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1077         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1078     }
   1079     else if(lv_obj_check_type(obj, &lv_menu_main_cont_class)) {
   1080         lv_obj_add_style(obj, &styles->menu_main_cont, 0);
   1081         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1082         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1083     }
   1084     else if(lv_obj_check_type(obj, &lv_menu_cont_class)) {
   1085         lv_obj_add_style(obj, &styles->menu_cont, 0);
   1086         lv_obj_add_style(obj, &styles->menu_pressed, LV_STATE_PRESSED);
   1087         lv_obj_add_style(obj, &styles->bg_color_primary_muted, LV_STATE_PRESSED | LV_STATE_CHECKED);
   1088         lv_obj_add_style(obj, &styles->bg_color_primary_muted, LV_STATE_CHECKED);
   1089         lv_obj_add_style(obj, &styles->bg_color_primary, LV_STATE_FOCUS_KEY);
   1090     }
   1091     else if(lv_obj_check_type(obj, &lv_menu_sidebar_header_cont_class) ||
   1092             lv_obj_check_type(obj, &lv_menu_main_header_cont_class)) {
   1093         lv_obj_add_style(obj, &styles->menu_header_cont, 0);
   1094     }
   1095     else if(lv_obj_check_type(obj, &lv_menu_page_class)) {
   1096         lv_obj_add_style(obj, &styles->menu_page, 0);
   1097         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1098         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1099     }
   1100     else if(lv_obj_check_type(obj, &lv_menu_section_class)) {
   1101         lv_obj_add_style(obj, &styles->menu_section, 0);
   1102     }
   1103     else if(lv_obj_check_type(obj, &lv_menu_separator_class)) {
   1104         lv_obj_add_style(obj, &styles->menu_separator, 0);
   1105     }
   1106 #endif
   1107 #if LV_USE_MSGBOX
   1108     else if(lv_obj_check_type(obj, &lv_msgbox_class)) {
   1109         lv_obj_add_style(obj, &styles->card, 0);
   1110         lv_obj_add_style(obj, &styles->msgbox_bg, 0);
   1111         return;
   1112     }
   1113     else if(lv_obj_check_type(obj, &lv_msgbox_backdrop_class)) {
   1114         lv_obj_add_style(obj, &styles->msgbox_backdrop_bg, 0);
   1115     }
   1116 #endif
   1117 #if LV_USE_SPINBOX
   1118     else if(lv_obj_check_type(obj, &lv_spinbox_class)) {
   1119         lv_obj_add_style(obj, &styles->card, 0);
   1120         lv_obj_add_style(obj, &styles->pad_small, 0);
   1121         lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
   1122         lv_obj_add_style(obj, &styles->outline_secondary, LV_STATE_EDITED);
   1123         lv_obj_add_style(obj, &styles->bg_color_primary, LV_PART_CURSOR);
   1124     }
   1125 #endif
   1126 #if LV_USE_TILEVIEW
   1127     else if(lv_obj_check_type(obj, &lv_tileview_class)) {
   1128         lv_obj_add_style(obj, &styles->scr, 0);
   1129         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1130         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1131     }
   1132     else if(lv_obj_check_type(obj, &lv_tileview_tile_class)) {
   1133         lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
   1134         lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
   1135     }
   1136 #endif
   1137 
   1138 #if LV_USE_TABVIEW
   1139     else if(lv_obj_check_type(obj, &lv_tabview_class)) {
   1140         lv_obj_add_style(obj, &styles->scr, 0);
   1141         lv_obj_add_style(obj, &styles->pad_zero, 0);
   1142     }
   1143 #endif
   1144 
   1145 #if LV_USE_WIN
   1146     else if(lv_obj_check_type(obj, &lv_win_class)) {
   1147         lv_obj_add_style(obj, &styles->clip_corner, 0);
   1148     }
   1149 #endif
   1150 
   1151 #if LV_USE_COLORWHEEL
   1152     else if(lv_obj_check_type(obj, &lv_colorwheel_class)) {
   1153         lv_obj_add_style(obj, &styles->colorwheel_main, 0);
   1154         lv_obj_add_style(obj, &styles->pad_normal, 0);
   1155         lv_obj_add_style(obj, &styles->bg_color_white, LV_PART_KNOB);
   1156         lv_obj_add_style(obj, &styles->pad_normal, LV_PART_KNOB);
   1157     }
   1158 #endif
   1159 
   1160 #if LV_USE_LED
   1161     else if(lv_obj_check_type(obj, &lv_led_class)) {
   1162         lv_obj_add_style(obj, &styles->led, 0);
   1163     }
   1164 #endif
   1165 }
   1166 
   1167 /**********************
   1168  *   STATIC FUNCTIONS
   1169  **********************/
   1170 
   1171 static void style_init_reset(lv_style_t * style)
   1172 {
   1173     if(inited) {
   1174         lv_style_reset(style);
   1175     }
   1176     else {
   1177         lv_style_init(style);
   1178     }
   1179 }
   1180 
   1181 #endif