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_basic.c (13261B)
1 /** 2 * @file lv_theme_basic.c 3 * 4 */ 5 6 /********************* 7 * INCLUDES 8 *********************/ 9 #include "../../../lvgl.h" /*To see all the widgets*/ 10 11 #if LV_USE_THEME_BASIC 12 13 #include "lv_theme_basic.h" 14 #include "../../../misc/lv_gc.h" 15 16 /********************* 17 * DEFINES 18 *********************/ 19 #define COLOR_SCR lv_palette_lighten(LV_PALETTE_GREY, 4) 20 #define COLOR_WHITE lv_color_white() 21 #define COLOR_LIGHT lv_palette_lighten(LV_PALETTE_GREY, 2) 22 #define COLOR_DARK lv_palette_main(LV_PALETTE_GREY) 23 #define COLOR_DIM lv_palette_darken(LV_PALETTE_GREY, 2) 24 #define SCROLLBAR_WIDTH 2 25 26 /********************** 27 * TYPEDEFS 28 **********************/ 29 typedef struct { 30 lv_style_t scr; 31 lv_style_t transp; 32 lv_style_t white; 33 lv_style_t light; 34 lv_style_t dark; 35 lv_style_t dim; 36 lv_style_t scrollbar; 37 #if LV_USE_ARC || LV_USE_COLORWHEEL 38 lv_style_t arc_line; 39 lv_style_t arc_knob; 40 #endif 41 #if LV_USE_TEXTAREA 42 lv_style_t ta_cursor; 43 #endif 44 } my_theme_styles_t; 45 46 47 /********************** 48 * STATIC PROTOTYPES 49 **********************/ 50 static void style_init_reset(lv_style_t * style); 51 static void theme_apply(lv_theme_t * th, lv_obj_t * obj); 52 53 /********************** 54 * STATIC VARIABLES 55 **********************/ 56 static my_theme_styles_t * styles; 57 static lv_theme_t theme; 58 static bool inited; 59 60 /********************** 61 * MACROS 62 **********************/ 63 64 /********************** 65 * STATIC FUNCTIONS 66 **********************/ 67 68 static void style_init(void) 69 { 70 style_init_reset(&styles->scrollbar); 71 lv_style_set_bg_opa(&styles->scrollbar, LV_OPA_COVER); 72 lv_style_set_bg_color(&styles->scrollbar, COLOR_DARK); 73 lv_style_set_width(&styles->scrollbar, SCROLLBAR_WIDTH); 74 75 style_init_reset(&styles->scr); 76 lv_style_set_bg_opa(&styles->scr, LV_OPA_COVER); 77 lv_style_set_bg_color(&styles->scr, COLOR_SCR); 78 lv_style_set_text_color(&styles->scr, COLOR_DIM); 79 80 81 style_init_reset(&styles->transp); 82 lv_style_set_bg_opa(&styles->transp, LV_OPA_TRANSP); 83 84 style_init_reset(&styles->white); 85 lv_style_set_bg_opa(&styles->white, LV_OPA_COVER); 86 lv_style_set_bg_color(&styles->white, COLOR_WHITE); 87 lv_style_set_line_width(&styles->white, 1); 88 lv_style_set_line_color(&styles->white, COLOR_WHITE); 89 lv_style_set_arc_width(&styles->white, 2); 90 lv_style_set_arc_color(&styles->white, COLOR_WHITE); 91 92 style_init_reset(&styles->light); 93 lv_style_set_bg_opa(&styles->light, LV_OPA_COVER); 94 lv_style_set_bg_color(&styles->light, COLOR_LIGHT); 95 lv_style_set_line_width(&styles->light, 1); 96 lv_style_set_line_color(&styles->light, COLOR_LIGHT); 97 lv_style_set_arc_width(&styles->light, 2); 98 lv_style_set_arc_color(&styles->light, COLOR_LIGHT); 99 100 style_init_reset(&styles->dark); 101 lv_style_set_bg_opa(&styles->dark, LV_OPA_COVER); 102 lv_style_set_bg_color(&styles->dark, COLOR_DARK); 103 lv_style_set_line_width(&styles->dark, 1); 104 lv_style_set_line_color(&styles->dark, COLOR_DARK); 105 lv_style_set_arc_width(&styles->dark, 2); 106 lv_style_set_arc_color(&styles->dark, COLOR_DARK); 107 108 style_init_reset(&styles->dim); 109 lv_style_set_bg_opa(&styles->dim, LV_OPA_COVER); 110 lv_style_set_bg_color(&styles->dim, COLOR_DIM); 111 lv_style_set_line_width(&styles->dim, 1); 112 lv_style_set_line_color(&styles->dim, COLOR_DIM); 113 lv_style_set_arc_width(&styles->dim, 2); 114 lv_style_set_arc_color(&styles->dim, COLOR_DIM); 115 116 #if LV_USE_ARC || LV_USE_COLORWHEEL 117 style_init_reset(&styles->arc_line); 118 lv_style_set_arc_width(&styles->arc_line, 6); 119 style_init_reset(&styles->arc_knob); 120 lv_style_set_pad_all(&styles->arc_knob, 5); 121 #endif 122 123 #if LV_USE_TEXTAREA 124 style_init_reset(&styles->ta_cursor); 125 lv_style_set_border_side(&styles->ta_cursor, LV_BORDER_SIDE_LEFT); 126 lv_style_set_border_color(&styles->ta_cursor, COLOR_DIM); 127 lv_style_set_border_width(&styles->ta_cursor, 2); 128 lv_style_set_bg_opa(&styles->ta_cursor, LV_OPA_TRANSP); 129 lv_style_set_anim_time(&styles->ta_cursor, 500); 130 #endif 131 } 132 133 134 /********************** 135 * GLOBAL FUNCTIONS 136 **********************/ 137 138 bool lv_theme_basic_is_inited(void) 139 { 140 return LV_GC_ROOT(_lv_theme_basic_styles) == NULL ? false : true; 141 } 142 143 lv_theme_t * lv_theme_basic_init(lv_disp_t * disp) 144 { 145 146 /*This trick is required only to avoid the garbage collection of 147 *styles' data if LVGL is used in a binding (e.g. Micropython) 148 *In a general case styles could be in simple `static lv_style_t my_style...` variables*/ 149 if(!lv_theme_basic_is_inited()) { 150 inited = false; 151 LV_GC_ROOT(_lv_theme_basic_styles) = lv_mem_alloc(sizeof(my_theme_styles_t)); 152 styles = (my_theme_styles_t *)LV_GC_ROOT(_lv_theme_basic_styles); 153 } 154 155 theme.disp = disp; 156 theme.font_small = LV_FONT_DEFAULT; 157 theme.font_normal = LV_FONT_DEFAULT; 158 theme.font_large = LV_FONT_DEFAULT; 159 theme.apply_cb = theme_apply; 160 161 style_init(); 162 163 if(disp == NULL || lv_disp_get_theme(disp) == &theme) { 164 lv_obj_report_style_change(NULL); 165 } 166 167 inited = true; 168 169 return (lv_theme_t *)&theme; 170 } 171 172 173 static void theme_apply(lv_theme_t * th, lv_obj_t * obj) 174 { 175 LV_UNUSED(th); 176 177 if(lv_obj_get_parent(obj) == NULL) { 178 lv_obj_add_style(obj, &styles->scr, 0); 179 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 180 return; 181 } 182 183 if(lv_obj_check_type(obj, &lv_obj_class)) { 184 #if LV_USE_TABVIEW 185 lv_obj_t * parent = lv_obj_get_parent(obj); 186 /*Tabview content area*/ 187 if(lv_obj_check_type(parent, &lv_tabview_class)) { 188 lv_obj_add_style(obj, &styles->scr, 0); 189 return; 190 } 191 /*Tabview pages*/ 192 else if(lv_obj_check_type(lv_obj_get_parent(parent), &lv_tabview_class)) { 193 lv_obj_add_style(obj, &styles->scr, 0); 194 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 195 return; 196 } 197 #endif 198 199 #if LV_USE_WIN 200 /*Header*/ 201 if(lv_obj_get_index(obj) == 0 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) { 202 lv_obj_add_style(obj, &styles->light, 0); 203 return; 204 } 205 /*Content*/ 206 else if(lv_obj_get_index(obj) == 1 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) { 207 lv_obj_add_style(obj, &styles->light, 0); 208 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 209 return; 210 } 211 #endif 212 lv_obj_add_style(obj, &styles->white, 0); 213 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 214 } 215 #if LV_USE_BTN 216 else if(lv_obj_check_type(obj, &lv_btn_class)) { 217 lv_obj_add_style(obj, &styles->dark, 0); 218 } 219 #endif 220 221 #if LV_USE_BTNMATRIX 222 else if(lv_obj_check_type(obj, &lv_btnmatrix_class)) { 223 #if LV_USE_MSGBOX 224 if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_msgbox_class)) { 225 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS); 226 return; 227 } 228 #endif 229 #if LV_USE_TABVIEW 230 if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_tabview_class)) { 231 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS); 232 return; 233 } 234 #endif 235 lv_obj_add_style(obj, &styles->white, 0); 236 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS); 237 } 238 #endif 239 240 #if LV_USE_BAR 241 else if(lv_obj_check_type(obj, &lv_bar_class)) { 242 lv_obj_add_style(obj, &styles->light, 0); 243 lv_obj_add_style(obj, &styles->dark, LV_PART_INDICATOR); 244 } 245 #endif 246 247 #if LV_USE_SLIDER 248 else if(lv_obj_check_type(obj, &lv_slider_class)) { 249 lv_obj_add_style(obj, &styles->light, 0); 250 lv_obj_add_style(obj, &styles->dark, LV_PART_INDICATOR); 251 lv_obj_add_style(obj, &styles->dim, LV_PART_KNOB); 252 } 253 #endif 254 255 #if LV_USE_TABLE 256 else if(lv_obj_check_type(obj, &lv_table_class)) { 257 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 258 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS); 259 } 260 #endif 261 262 #if LV_USE_CHECKBOX 263 else if(lv_obj_check_type(obj, &lv_checkbox_class)) { 264 lv_obj_add_style(obj, &styles->light, LV_PART_INDICATOR); 265 lv_obj_add_style(obj, &styles->dark, LV_PART_INDICATOR | LV_STATE_CHECKED); 266 } 267 #endif 268 269 #if LV_USE_SWITCH 270 else if(lv_obj_check_type(obj, &lv_switch_class)) { 271 lv_obj_add_style(obj, &styles->light, 0); 272 lv_obj_add_style(obj, &styles->dim, LV_PART_KNOB); 273 } 274 #endif 275 276 #if LV_USE_CHART 277 else if(lv_obj_check_type(obj, &lv_chart_class)) { 278 lv_obj_add_style(obj, &styles->white, 0); 279 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 280 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS); 281 lv_obj_add_style(obj, &styles->dark, LV_PART_TICKS); 282 lv_obj_add_style(obj, &styles->dark, LV_PART_CURSOR); 283 } 284 #endif 285 286 #if LV_USE_ROLLER 287 else if(lv_obj_check_type(obj, &lv_roller_class)) { 288 lv_obj_add_style(obj, &styles->light, 0); 289 lv_obj_add_style(obj, &styles->dark, LV_PART_SELECTED); 290 } 291 #endif 292 293 #if LV_USE_DROPDOWN 294 else if(lv_obj_check_type(obj, &lv_dropdown_class)) { 295 lv_obj_add_style(obj, &styles->white, 0); 296 } 297 else if(lv_obj_check_type(obj, &lv_dropdownlist_class)) { 298 lv_obj_add_style(obj, &styles->white, 0); 299 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 300 lv_obj_add_style(obj, &styles->light, LV_PART_SELECTED); 301 lv_obj_add_style(obj, &styles->dark, LV_PART_SELECTED | LV_STATE_CHECKED); 302 } 303 #endif 304 305 #if LV_USE_ARC 306 else if(lv_obj_check_type(obj, &lv_arc_class)) { 307 lv_obj_add_style(obj, &styles->light, 0); 308 lv_obj_add_style(obj, &styles->transp, 0); 309 lv_obj_add_style(obj, &styles->arc_line, 0); 310 lv_obj_add_style(obj, &styles->dark, LV_PART_INDICATOR); 311 lv_obj_add_style(obj, &styles->arc_line, LV_PART_INDICATOR); 312 lv_obj_add_style(obj, &styles->dim, LV_PART_KNOB); 313 lv_obj_add_style(obj, &styles->arc_knob, LV_PART_KNOB); 314 } 315 #endif 316 317 #if LV_USE_SPINNER 318 else if(lv_obj_check_type(obj, &lv_spinner_class)) { 319 lv_obj_add_style(obj, &styles->light, 0); 320 lv_obj_add_style(obj, &styles->transp, 0); 321 lv_obj_add_style(obj, &styles->arc_line, 0); 322 lv_obj_add_style(obj, &styles->dark, LV_PART_INDICATOR); 323 lv_obj_add_style(obj, &styles->arc_line, LV_PART_INDICATOR); 324 } 325 #endif 326 327 #if LV_USE_COLORWHEEL 328 else if(lv_obj_check_type(obj, &lv_colorwheel_class)) { 329 lv_obj_add_style(obj, &styles->light, 0); 330 lv_obj_add_style(obj, &styles->transp, 0); 331 lv_obj_add_style(obj, &styles->arc_line, 0); 332 lv_obj_add_style(obj, &styles->dim, LV_PART_KNOB); 333 lv_obj_add_style(obj, &styles->arc_knob, LV_PART_KNOB); 334 } 335 #endif 336 337 #if LV_USE_METER 338 else if(lv_obj_check_type(obj, &lv_meter_class)) { 339 lv_obj_add_style(obj, &styles->light, 0); 340 } 341 #endif 342 343 #if LV_USE_TEXTAREA 344 else if(lv_obj_check_type(obj, &lv_textarea_class)) { 345 lv_obj_add_style(obj, &styles->white, 0); 346 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 347 lv_obj_add_style(obj, &styles->ta_cursor, LV_PART_CURSOR | LV_STATE_FOCUSED); 348 } 349 #endif 350 351 #if LV_USE_CALENDAR 352 else if(lv_obj_check_type(obj, &lv_calendar_class)) { 353 lv_obj_add_style(obj, &styles->light, 0); 354 } 355 #endif 356 357 #if LV_USE_KEYBOARD 358 else if(lv_obj_check_type(obj, &lv_keyboard_class)) { 359 lv_obj_add_style(obj, &styles->scr, 0); 360 lv_obj_add_style(obj, &styles->white, LV_PART_ITEMS); 361 lv_obj_add_style(obj, &styles->light, LV_PART_ITEMS | LV_STATE_CHECKED); 362 } 363 #endif 364 #if LV_USE_LIST 365 else if(lv_obj_check_type(obj, &lv_list_class)) { 366 lv_obj_add_style(obj, &styles->light, 0); 367 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 368 return; 369 } 370 else if(lv_obj_check_type(obj, &lv_list_text_class)) { 371 372 } 373 else if(lv_obj_check_type(obj, &lv_list_btn_class)) { 374 lv_obj_add_style(obj, &styles->dark, 0); 375 376 } 377 #endif 378 #if LV_USE_MSGBOX 379 else if(lv_obj_check_type(obj, &lv_msgbox_class)) { 380 lv_obj_add_style(obj, &styles->light, 0); 381 return; 382 } 383 #endif 384 #if LV_USE_SPINBOX 385 else if(lv_obj_check_type(obj, &lv_spinbox_class)) { 386 lv_obj_add_style(obj, &styles->light, 0); 387 lv_obj_add_style(obj, &styles->dark, LV_PART_CURSOR); 388 } 389 #endif 390 #if LV_USE_TILEVIEW 391 else if(lv_obj_check_type(obj, &lv_tileview_class)) { 392 lv_obj_add_style(obj, &styles->scr, 0); 393 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 394 } 395 else if(lv_obj_check_type(obj, &lv_tileview_tile_class)) { 396 lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR); 397 } 398 #endif 399 400 #if LV_USE_COLORWHEEL 401 else if(lv_obj_check_type(obj, &lv_colorwheel_class)) { 402 lv_obj_add_style(obj, &styles->light, 0); 403 lv_obj_add_style(obj, &styles->light, LV_PART_KNOB); 404 } 405 #endif 406 407 #if LV_USE_LED 408 else if(lv_obj_check_type(obj, &lv_led_class)) { 409 lv_obj_add_style(obj, &styles->light, 0); 410 } 411 #endif 412 } 413 414 /********************** 415 * STATIC FUNCTIONS 416 **********************/ 417 418 static void style_init_reset(lv_style_t * style) 419 { 420 if(inited) { 421 lv_style_reset(style); 422 } 423 else { 424 lv_style_init(style); 425 } 426 } 427 428 #endif