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.c (2948B)

      1 /**
      2  * @file lv_theme.c
      3  *
      4  */
      5 
      6 /*********************
      7  *      INCLUDES
      8  *********************/
      9 #include "../../lvgl.h"
     10 
     11 /*********************
     12  *      DEFINES
     13  *********************/
     14 
     15 /**********************
     16  *      TYPEDEFS
     17  **********************/
     18 
     19 /**********************
     20  *  STATIC PROTOTYPES
     21  **********************/
     22 static void apply_theme(lv_theme_t * th, lv_obj_t * obj);
     23 
     24 /**********************
     25  *  STATIC VARIABLES
     26  **********************/
     27 
     28 /**********************
     29  *      MACROS
     30  **********************/
     31 
     32 /**********************
     33  *   GLOBAL FUNCTIONS
     34  **********************/
     35 
     36 lv_theme_t  * lv_theme_get_from_obj(lv_obj_t * obj)
     37 {
     38     lv_disp_t * disp = obj ? lv_obj_get_disp(obj) : lv_disp_get_default();
     39     return lv_disp_get_theme(disp);
     40 }
     41 
     42 /**
     43  * Apply the active theme on an object
     44  * @param obj pointer to an object
     45  * @param name the name of the theme element to apply. E.g. `LV_THEME_BTN`
     46  */
     47 void lv_theme_apply(lv_obj_t * obj)
     48 {
     49     lv_theme_t * th = lv_theme_get_from_obj(obj);
     50     if(th == NULL) return;
     51 
     52     lv_obj_remove_style_all(obj);
     53 
     54     apply_theme(th, obj);    /*Apply the theme including the base theme(s)*/
     55 }
     56 
     57 /**
     58  * Set a base theme for a theme.
     59  * The styles from the base them will be added before the styles of the current theme.
     60  * Arbitrary long chain of themes can be created by setting base themes.
     61  * @param new_theme pointer to theme which base should be set
     62  * @param base pointer to the base theme
     63  */
     64 void lv_theme_set_parent(lv_theme_t * new_theme, lv_theme_t * base)
     65 {
     66     new_theme->parent = base;
     67 }
     68 
     69 /**
     70  * Set a callback for a theme.
     71  * The callback is used to add styles to different objects
     72  * @param theme pointer to theme which callback should be set
     73  * @param cb pointer to the callback
     74  */
     75 void lv_theme_set_apply_cb(lv_theme_t * theme, lv_theme_apply_cb_t apply_cb)
     76 {
     77     theme->apply_cb = apply_cb;
     78 }
     79 
     80 const lv_font_t * lv_theme_get_font_small(lv_obj_t * obj)
     81 {
     82     lv_theme_t * th = lv_theme_get_from_obj(obj);
     83     return th ? th->font_small : LV_FONT_DEFAULT;
     84 }
     85 
     86 const lv_font_t * lv_theme_get_font_normal(lv_obj_t * obj)
     87 {
     88     lv_theme_t * th = lv_theme_get_from_obj(obj);
     89     return th ? th->font_normal : LV_FONT_DEFAULT;
     90 }
     91 
     92 const lv_font_t * lv_theme_get_font_large(lv_obj_t * obj)
     93 {
     94     lv_theme_t * th = lv_theme_get_from_obj(obj);
     95     return th ? th->font_large : LV_FONT_DEFAULT;
     96 }
     97 
     98 lv_color_t lv_theme_get_color_primary(lv_obj_t * obj)
     99 {
    100     lv_theme_t * th = lv_theme_get_from_obj(obj);
    101     return th ? th->color_primary : lv_palette_main(LV_PALETTE_BLUE_GREY);
    102 }
    103 
    104 lv_color_t lv_theme_get_color_secondary(lv_obj_t * obj)
    105 {
    106     lv_theme_t * th = lv_theme_get_from_obj(obj);
    107     return th ? th->color_secondary : lv_palette_main(LV_PALETTE_BLUE);
    108 }
    109 
    110 /**********************
    111  *   STATIC FUNCTIONS
    112  **********************/
    113 
    114 static void apply_theme(lv_theme_t * th, lv_obj_t * obj)
    115 {
    116     if(th->parent) apply_theme(th->parent, obj);
    117     if(th->apply_cb) th->apply_cb(th, obj);
    118 }