Configure lvgl theme and use 2*4lines buffers as video buffer (2 lines was not enough and caused perf issues)
This commit is contained in:
parent
e285ba9972
commit
6d288b905a
2 changed files with 680 additions and 9 deletions
|
@ -24,15 +24,13 @@ bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
|
||||||
|
|
||||||
LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) : lcd{lcd}, touchPanel{touchPanel} {
|
LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) : lcd{lcd}, touchPanel{touchPanel} {
|
||||||
lv_init();
|
lv_init();
|
||||||
|
InitTheme();
|
||||||
InitDisplay();
|
InitDisplay();
|
||||||
InitTouchpad();
|
InitTouchpad();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LittleVgl::InitDisplay() {
|
void LittleVgl::InitDisplay() {
|
||||||
lv_theme_t* theme = lv_theme_night_init(10, NULL);
|
lv_disp_buf_init(&disp_buf_2, buf2_1, buf2_2, LV_HOR_RES_MAX * 4); /*Initialize the display buffer*/
|
||||||
lv_theme_set_current(theme);
|
|
||||||
|
|
||||||
lv_disp_buf_init(&disp_buf_2, buf2_1, buf2_2, LV_HOR_RES_MAX * 2); /*Initialize the display buffer*/
|
|
||||||
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
|
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
|
||||||
|
|
||||||
/*Set up the functions to access to your display*/
|
/*Set up the functions to access to your display*/
|
||||||
|
@ -71,8 +69,6 @@ void LittleVgl::FlushDisplay(const lv_area_t *area, lv_color_t *color_p) {
|
||||||
lcd.BeginDrawBuffer(x, y, width, height);
|
lcd.BeginDrawBuffer(x, y, width, height);
|
||||||
lcd.NextDrawBuffer(reinterpret_cast<const uint8_t *>(color_p), width * height*2) ;
|
lcd.NextDrawBuffer(reinterpret_cast<const uint8_t *>(color_p), width * height*2) ;
|
||||||
|
|
||||||
ulTaskNotifyTake(pdTRUE, 500);
|
|
||||||
|
|
||||||
/* IMPORTANT!!!
|
/* IMPORTANT!!!
|
||||||
* Inform the graphics library that you are ready with the flushing*/
|
* Inform the graphics library that you are ready with the flushing*/
|
||||||
lv_disp_flush_ready(&disp_drv);
|
lv_disp_flush_ready(&disp_drv);
|
||||||
|
@ -95,3 +91,619 @@ bool LittleVgl::GetTouchPadInfo(lv_indev_data_t *ptr) {
|
||||||
ptr->point.y = info.y;
|
ptr->point.y = info.y;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitTheme() {
|
||||||
|
uint16_t i;
|
||||||
|
lv_style_t ** style_p = (lv_style_t **)&theme.style;
|
||||||
|
for(i = 0; i < LV_THEME_STYLE_COUNT; i++) {
|
||||||
|
*style_p = &def;
|
||||||
|
style_p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
InitBaseTheme();
|
||||||
|
InitThemeContainer();
|
||||||
|
InitThemeButton();
|
||||||
|
InitThemeLabel();
|
||||||
|
InitThemeLine();
|
||||||
|
InitThemeLed();
|
||||||
|
InitThemeImage();
|
||||||
|
InitThemeBar();
|
||||||
|
InitThemeSlider();
|
||||||
|
InitThemeSwitch();
|
||||||
|
InitThemeMeter();
|
||||||
|
InitThemeGauge();
|
||||||
|
InitThemeArc();
|
||||||
|
InitThemePreload();
|
||||||
|
InitThemeChart();
|
||||||
|
InitThemeCalendar();
|
||||||
|
InitThemeCheckBox();
|
||||||
|
InitThemeButtonMatrix();
|
||||||
|
InitThemeKnob();
|
||||||
|
InitThemeMessageBox();
|
||||||
|
InitThemePage();
|
||||||
|
InitThemeTextArea();
|
||||||
|
InitThemeSpinBox();
|
||||||
|
InitThemeList();
|
||||||
|
InitThemeDropDownList();
|
||||||
|
InitThemeRoller();
|
||||||
|
InitThemeTabView();
|
||||||
|
InitThemeTileView();
|
||||||
|
InitThemeTable();
|
||||||
|
InitThemeWindow();
|
||||||
|
|
||||||
|
lv_theme_set_current(&theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitBaseTheme() {
|
||||||
|
if(font == nullptr) font = LV_FONT_DEFAULT;
|
||||||
|
|
||||||
|
lv_style_copy(&def, &lv_style_plain); /*Initialize the default style*/
|
||||||
|
def.text.font = font;
|
||||||
|
|
||||||
|
lv_style_copy(&bg, &lv_style_plain);
|
||||||
|
bg.body.main_color = LV_COLOR_BLACK;
|
||||||
|
bg.body.grad_color = LV_COLOR_BLACK;
|
||||||
|
bg.text.color = LV_COLOR_WHITE;
|
||||||
|
bg.text.font = font;
|
||||||
|
bg.image.color = LV_COLOR_WHITE;
|
||||||
|
|
||||||
|
lv_style_copy(&scr, &bg);
|
||||||
|
scr.body.padding.bottom = 0;
|
||||||
|
scr.body.padding.top = 0;
|
||||||
|
scr.body.padding.left = 0;
|
||||||
|
scr.body.padding.right = 0;
|
||||||
|
|
||||||
|
lv_style_copy(&sb, &def);
|
||||||
|
sb.body.main_color = lv_color_hsv_to_rgb(hue, 30, 60);
|
||||||
|
sb.body.grad_color = lv_color_hsv_to_rgb(hue, 30, 60);
|
||||||
|
sb.body.border.width = 0;
|
||||||
|
sb.body.padding.inner = LV_DPI / 20;
|
||||||
|
sb.body.padding.left = 0;
|
||||||
|
sb.body.padding.right = 0;
|
||||||
|
sb.body.padding.top = 0;
|
||||||
|
sb.body.padding.bottom = 0;
|
||||||
|
sb.body.radius = LV_DPI / 30;
|
||||||
|
sb.body.opa = LV_OPA_COVER;
|
||||||
|
|
||||||
|
lv_style_copy(&panel, &bg);
|
||||||
|
panel.body.main_color = lv_color_hsv_to_rgb(hue, 11, 18);
|
||||||
|
panel.body.grad_color = lv_color_hsv_to_rgb(hue, 11, 18);
|
||||||
|
panel.body.radius = LV_DPI / 20;
|
||||||
|
panel.body.border.color = lv_color_hsv_to_rgb(hue, 10, 25);
|
||||||
|
panel.body.border.width = 1;
|
||||||
|
panel.body.border.opa = LV_OPA_COVER;
|
||||||
|
panel.body.padding.left = LV_DPI / 10;
|
||||||
|
panel.body.padding.right = LV_DPI / 10;
|
||||||
|
panel.body.padding.top = LV_DPI / 10;
|
||||||
|
panel.body.padding.bottom = LV_DPI / 10;
|
||||||
|
panel.line.color = lv_color_hsv_to_rgb(hue, 20, 40);
|
||||||
|
panel.line.width = 1;
|
||||||
|
|
||||||
|
theme.style.scr = &scr;
|
||||||
|
theme.style.bg = &bg;
|
||||||
|
theme.style.panel = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeContainer() {
|
||||||
|
theme.style.cont = &panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeButton() {
|
||||||
|
|
||||||
|
|
||||||
|
lv_style_copy(&btn_rel, &def);
|
||||||
|
btn_rel.body.main_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
btn_rel.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
btn_rel.body.border.color = lv_color_hex3(0x111);
|
||||||
|
btn_rel.body.border.width = 1;
|
||||||
|
btn_rel.body.border.opa = LV_OPA_70;
|
||||||
|
btn_rel.body.padding.left = LV_DPI / 4;
|
||||||
|
btn_rel.body.padding.right = LV_DPI / 4;
|
||||||
|
btn_rel.body.padding.top = LV_DPI / 8;
|
||||||
|
btn_rel.body.padding.bottom = LV_DPI / 8;
|
||||||
|
btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
|
||||||
|
btn_rel.body.shadow.color = lv_color_hex3(0x111);
|
||||||
|
btn_rel.body.shadow.width = LV_DPI / 30;
|
||||||
|
btn_rel.text.color = lv_color_hex3(0xeee);
|
||||||
|
btn_rel.image.color = lv_color_hex3(0xeee);
|
||||||
|
|
||||||
|
lv_style_copy(&btn_pr, &btn_rel);
|
||||||
|
btn_pr.body.main_color = lv_color_hsv_to_rgb(hue, 10, 30);
|
||||||
|
btn_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 10);
|
||||||
|
|
||||||
|
lv_style_copy(&btn_tgl_rel, &btn_rel);
|
||||||
|
btn_tgl_rel.body.main_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
btn_tgl_rel.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
btn_tgl_rel.body.shadow.width = LV_DPI / 40;
|
||||||
|
btn_tgl_rel.text.color = lv_color_hex3(0xddd);
|
||||||
|
btn_tgl_rel.image.color = lv_color_hex3(0xddd);
|
||||||
|
|
||||||
|
lv_style_copy(&btn_tgl_pr, &btn_rel);
|
||||||
|
btn_tgl_pr.body.main_color = lv_color_hsv_to_rgb(hue, 10, 10);
|
||||||
|
btn_tgl_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 30);
|
||||||
|
btn_tgl_pr.body.shadow.width = LV_DPI / 30;
|
||||||
|
btn_tgl_pr.text.color = lv_color_hex3(0xddd);
|
||||||
|
btn_tgl_pr.image.color = lv_color_hex3(0xddd);
|
||||||
|
|
||||||
|
lv_style_copy(&btn_ina, &btn_rel);
|
||||||
|
btn_ina.body.main_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
btn_ina.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
btn_ina.body.shadow.width = 0;
|
||||||
|
btn_ina.text.color = lv_color_hex3(0xaaa);
|
||||||
|
btn_ina.image.color = lv_color_hex3(0xaaa);
|
||||||
|
|
||||||
|
theme.style.btn.rel = &btn_rel;
|
||||||
|
theme.style.btn.pr = &btn_pr;
|
||||||
|
theme.style.btn.tgl_rel = &btn_tgl_rel;
|
||||||
|
theme.style.btn.tgl_pr = &btn_tgl_pr;
|
||||||
|
theme.style.btn.ina = &btn_ina;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeLabel() {
|
||||||
|
lv_style_copy(&prim, &bg);
|
||||||
|
prim.text.color = lv_color_hsv_to_rgb(hue, 5, 95);
|
||||||
|
|
||||||
|
lv_style_copy(&sec, &bg);
|
||||||
|
sec.text.color = lv_color_hsv_to_rgb(hue, 15, 65);
|
||||||
|
|
||||||
|
lv_style_copy(&hint, &bg);
|
||||||
|
hint.text.color = lv_color_hsv_to_rgb(hue, 20, 55);
|
||||||
|
|
||||||
|
theme.style.label.prim = &prim;
|
||||||
|
theme.style.label.sec = &sec;
|
||||||
|
theme.style.label.hint = &hint;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeLine() {
|
||||||
|
theme.style.line.decor = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeLed() {
|
||||||
|
lv_style_copy(&led, &def);
|
||||||
|
led.body.shadow.width = LV_DPI / 10;
|
||||||
|
led.body.radius = LV_RADIUS_CIRCLE;
|
||||||
|
led.body.border.width = LV_DPI / 30;
|
||||||
|
led.body.border.opa = LV_OPA_30;
|
||||||
|
led.body.main_color = lv_color_hsv_to_rgb(hue, 100, 100);
|
||||||
|
led.body.grad_color = lv_color_hsv_to_rgb(hue, 100, 40);
|
||||||
|
led.body.border.color = lv_color_hsv_to_rgb(hue, 60, 60);
|
||||||
|
led.body.shadow.color = lv_color_hsv_to_rgb(hue, 100, 100);
|
||||||
|
|
||||||
|
theme.style.led = &led;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeImage() {
|
||||||
|
theme.style.img.light = &def;
|
||||||
|
theme.style.img.dark = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeBar() {
|
||||||
|
lv_style_copy(&bar_bg, &panel);
|
||||||
|
bar_bg.body.padding.left = LV_DPI / 16;
|
||||||
|
bar_bg.body.padding.right = LV_DPI / 16;
|
||||||
|
bar_bg.body.padding.top = LV_DPI / 16;
|
||||||
|
bar_bg.body.padding.bottom = LV_DPI / 16;
|
||||||
|
bar_bg.body.radius = LV_RADIUS_CIRCLE;
|
||||||
|
|
||||||
|
lv_style_copy(&bar_indic, &def);
|
||||||
|
bar_indic.body.main_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
bar_indic.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
bar_indic.body.border.color = lv_color_hsv_to_rgb(hue, 20, 15);
|
||||||
|
bar_indic.body.border.width = 1;
|
||||||
|
bar_indic.body.border.opa = LV_OPA_COVER;
|
||||||
|
bar_indic.body.radius = LV_RADIUS_CIRCLE;
|
||||||
|
bar_indic.body.padding.left = 0;
|
||||||
|
bar_indic.body.padding.right = 0;
|
||||||
|
bar_indic.body.padding.top = 0;
|
||||||
|
bar_indic.body.padding.bottom = 0;
|
||||||
|
|
||||||
|
theme.style.bar.bg = &bar_bg;
|
||||||
|
theme.style.bar.indic = &bar_indic;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeSlider() {
|
||||||
|
lv_style_copy(&slider_knob, theme.style.btn.rel);
|
||||||
|
slider_knob.body.radius = LV_RADIUS_CIRCLE;
|
||||||
|
|
||||||
|
theme.style.slider.bg = theme.style.bar.bg;
|
||||||
|
theme.style.slider.indic = theme.style.bar.indic;
|
||||||
|
theme.style.slider.knob = &slider_knob;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeSwitch() {
|
||||||
|
theme.style.sw.bg = theme.style.bar.bg;
|
||||||
|
theme.style.sw.indic = theme.style.bar.indic;
|
||||||
|
theme.style.sw.knob_off = theme.style.slider.knob;
|
||||||
|
theme.style.sw.knob_on = theme.style.slider.knob;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeMeter() {
|
||||||
|
static lv_style_t lmeter_bg;
|
||||||
|
lv_style_copy(&lmeter_bg, &def);
|
||||||
|
lmeter_bg.body.main_color = lv_color_hsv_to_rgb(hue, 10, 70);
|
||||||
|
lmeter_bg.body.grad_color = lv_color_hsv_to_rgb(hue, 95, 90);
|
||||||
|
lmeter_bg.body.padding.left = LV_DPI / 10; /*Scale line length*/
|
||||||
|
lmeter_bg.body.padding.inner = LV_DPI / 10; /*Text padding*/
|
||||||
|
lmeter_bg.body.border.color = lv_color_hex3(0x333);
|
||||||
|
lmeter_bg.line.color = lv_color_hex3(0x555);
|
||||||
|
lmeter_bg.line.width = 1;
|
||||||
|
lmeter_bg.text.color = lv_color_hex3(0xddd);
|
||||||
|
|
||||||
|
theme.style.lmeter = &lmeter_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeGauge() {
|
||||||
|
static lv_style_t gauge_bg;
|
||||||
|
lv_style_copy(&gauge_bg, &def);
|
||||||
|
gauge_bg.body.main_color = lv_color_hsv_to_rgb(hue, 10, 70);
|
||||||
|
gauge_bg.body.grad_color = gauge_bg.body.main_color;
|
||||||
|
gauge_bg.line.color = lv_color_hsv_to_rgb(hue, 80, 75);
|
||||||
|
gauge_bg.line.width = 1;
|
||||||
|
gauge_bg.text.color = lv_color_hex3(0xddd);
|
||||||
|
|
||||||
|
theme.style.gauge = &gauge_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeArc() {
|
||||||
|
lv_style_copy(&arc, &def);
|
||||||
|
arc.line.width = 8;
|
||||||
|
arc.line.color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
arc.line.rounded = 1;
|
||||||
|
|
||||||
|
/*For preloader*/
|
||||||
|
arc.body.border.width = 7;
|
||||||
|
arc.body.border.color = lv_color_hsv_to_rgb(hue, 11, 48);
|
||||||
|
arc.body.padding.left = 1;
|
||||||
|
arc.body.padding.right = 1;
|
||||||
|
arc.body.padding.top = 1;
|
||||||
|
arc.body.padding.bottom = 1;
|
||||||
|
|
||||||
|
theme.style.arc = &arc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemePreload() {
|
||||||
|
// theme.style.preload = theme.style.arc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeChart() {
|
||||||
|
theme.style.chart = &panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeCalendar() {
|
||||||
|
|
||||||
|
lv_style_copy(&cal_bg, &bg);
|
||||||
|
cal_bg.body.main_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
cal_bg.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
cal_bg.body.border.color = lv_color_hex3(0x333);
|
||||||
|
cal_bg.body.border.width = 1;
|
||||||
|
cal_bg.body.radius = LV_DPI / 20;
|
||||||
|
cal_bg.body.padding.left = LV_DPI / 10;
|
||||||
|
cal_bg.body.padding.right = LV_DPI / 10;
|
||||||
|
cal_bg.body.padding.top = LV_DPI / 10;
|
||||||
|
cal_bg.body.padding.bottom = LV_DPI / 10;
|
||||||
|
|
||||||
|
|
||||||
|
lv_style_copy(&cal_header, &bg);
|
||||||
|
cal_header.body.main_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
cal_header.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
cal_header.body.radius = 0;
|
||||||
|
cal_header.body.border.width = 1;
|
||||||
|
cal_header.body.border.color = lv_color_hex3(0x333);
|
||||||
|
cal_header.body.padding.left = LV_DPI / 10;
|
||||||
|
cal_header.body.padding.right = LV_DPI / 10;
|
||||||
|
cal_header.body.padding.top = LV_DPI / 10;
|
||||||
|
cal_header.body.padding.bottom = LV_DPI / 10;
|
||||||
|
|
||||||
|
|
||||||
|
lv_style_copy(&week_box, &panel);
|
||||||
|
week_box.body.main_color = lv_color_hsv_to_rgb(hue, 30, 45);
|
||||||
|
week_box.body.grad_color = lv_color_hsv_to_rgb(hue, 30, 45);
|
||||||
|
week_box.body.radius = LV_DPI / 20;
|
||||||
|
week_box.body.border.width = 1;
|
||||||
|
week_box.body.padding.left = LV_DPI / 20;
|
||||||
|
week_box.body.padding.right = LV_DPI / 20;
|
||||||
|
week_box.body.padding.top = LV_DPI / 25;
|
||||||
|
week_box.body.padding.bottom = LV_DPI / 25;
|
||||||
|
|
||||||
|
lv_style_copy(&today_box, &week_box);
|
||||||
|
today_box.body.main_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
today_box.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
today_box.body.radius = LV_DPI / 20;
|
||||||
|
today_box.body.padding.left = LV_DPI / 14;
|
||||||
|
today_box.body.padding.right = LV_DPI / 14;
|
||||||
|
today_box.body.padding.top = LV_DPI / 14;
|
||||||
|
today_box.body.padding.bottom = LV_DPI / 14;
|
||||||
|
|
||||||
|
lv_style_copy(&highlighted_days, &bg);
|
||||||
|
highlighted_days.text.color = lv_color_hsv_to_rgb(hue, 40, 80);
|
||||||
|
|
||||||
|
lv_style_copy(&ina_days, &bg);
|
||||||
|
ina_days.text.color = lv_color_hsv_to_rgb(hue, 0, 60);
|
||||||
|
|
||||||
|
theme.style.calendar.bg = &cal_bg;
|
||||||
|
theme.style.calendar.header = &cal_header;
|
||||||
|
theme.style.calendar.week_box = &week_box;
|
||||||
|
theme.style.calendar.today_box = &today_box;
|
||||||
|
theme.style.calendar.highlighted_days = &highlighted_days;
|
||||||
|
theme.style.calendar.day_names = &cal_bg;
|
||||||
|
theme.style.calendar.inactive_days = &ina_days;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeCheckBox() {
|
||||||
|
|
||||||
|
lv_style_copy(&rel, &def);
|
||||||
|
rel.body.radius = LV_DPI / 20;
|
||||||
|
rel.body.main_color = lv_color_hsv_to_rgb(hue, 10, 95);
|
||||||
|
rel.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 95);
|
||||||
|
rel.body.border.color = lv_color_hsv_to_rgb(hue, 10, 50);
|
||||||
|
rel.body.border.width = 2;
|
||||||
|
;
|
||||||
|
|
||||||
|
lv_style_copy(&pr, &rel);
|
||||||
|
pr.body.main_color = lv_color_hsv_to_rgb(hue, 10, 80);
|
||||||
|
pr.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 80);
|
||||||
|
pr.body.border.color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
pr.body.border.width = 1;
|
||||||
|
;
|
||||||
|
|
||||||
|
lv_style_copy(&tgl_rel, &rel);
|
||||||
|
tgl_rel.body.main_color = lv_color_hsv_to_rgb(hue, 80, 90);
|
||||||
|
tgl_rel.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 90);
|
||||||
|
tgl_rel.body.border.color = lv_color_hsv_to_rgb(hue, 80, 50);
|
||||||
|
|
||||||
|
lv_style_copy(&tgl_pr, &tgl_rel);
|
||||||
|
tgl_pr.body.main_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
tgl_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
tgl_pr.body.border.color = lv_color_hsv_to_rgb(hue, 80, 30);
|
||||||
|
tgl_pr.body.border.width = 1;
|
||||||
|
;
|
||||||
|
|
||||||
|
lv_style_copy(&ina, &rel);
|
||||||
|
ina.body.main_color = lv_color_hex3(0x777);
|
||||||
|
ina.body.grad_color = lv_color_hex3(0x777);
|
||||||
|
ina.body.border.width = 0;
|
||||||
|
|
||||||
|
theme.style.cb.bg = &lv_style_transp;
|
||||||
|
theme.style.cb.box.rel = &rel;
|
||||||
|
theme.style.cb.box.pr = ≺
|
||||||
|
theme.style.cb.box.tgl_rel = &tgl_rel;
|
||||||
|
theme.style.cb.box.tgl_pr = &tgl_pr;
|
||||||
|
theme.style.cb.box.ina = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeButtonMatrix() {
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_bg, theme.style.btn.rel);
|
||||||
|
btnm_bg.body.padding.left = 2;
|
||||||
|
btnm_bg.body.padding.right = 2;
|
||||||
|
btnm_bg.body.padding.top = 2;
|
||||||
|
btnm_bg.body.padding.bottom = 2;
|
||||||
|
btnm_bg.body.padding.inner = 0;
|
||||||
|
btnm_bg.body.border.width = 1;
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_rel, theme.style.btn.rel);
|
||||||
|
btnm_rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
|
||||||
|
btnm_rel.body.border.width = 1;
|
||||||
|
btnm_rel.body.radius = 2;
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_pr, theme.style.btn.pr);
|
||||||
|
btnm_pr.body.border.part = btnm_rel.body.border.part;
|
||||||
|
btnm_pr.body.border.width = btnm_rel.body.border.width;
|
||||||
|
btnm_pr.body.radius = btnm_rel.body.radius;
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_tgl_rel, theme.style.btn.tgl_rel);
|
||||||
|
btnm_tgl_rel.body.border.part = btnm_rel.body.border.part;
|
||||||
|
btnm_tgl_rel.body.border.width = btnm_rel.body.border.width;
|
||||||
|
btnm_tgl_rel.body.radius = btnm_rel.body.radius;
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_tgl_pr, theme.style.btn.pr);
|
||||||
|
btnm_tgl_pr.body.border.part = btnm_rel.body.border.part;
|
||||||
|
btnm_tgl_pr.body.border.width = btnm_rel.body.border.width;
|
||||||
|
btnm_tgl_pr.body.radius = btnm_rel.body.radius;
|
||||||
|
|
||||||
|
lv_style_copy(&btnm_ina, theme.style.btn.ina);
|
||||||
|
btnm_ina.body.border.part = btnm_rel.body.border.part;
|
||||||
|
btnm_ina.body.border.width = btnm_rel.body.border.width;
|
||||||
|
btnm_ina.body.radius = btnm_rel.body.radius;
|
||||||
|
|
||||||
|
theme.style.btnm.bg = &btnm_bg;
|
||||||
|
theme.style.btnm.btn.rel = &btnm_rel;
|
||||||
|
theme.style.btnm.btn.pr = &btnm_pr;
|
||||||
|
theme.style.btnm.btn.tgl_rel = &btnm_tgl_rel;
|
||||||
|
theme.style.btnm.btn.tgl_pr = &btnm_tgl_pr;
|
||||||
|
theme.style.btnm.btn.ina = &btnm_ina;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeKnob() {
|
||||||
|
theme.style.kb.bg = &bg;
|
||||||
|
theme.style.kb.btn.rel = theme.style.btn.rel;
|
||||||
|
theme.style.kb.btn.pr = theme.style.btn.pr;
|
||||||
|
theme.style.kb.btn.tgl_rel = theme.style.btn.tgl_rel;
|
||||||
|
theme.style.kb.btn.tgl_pr = theme.style.btn.tgl_pr;
|
||||||
|
theme.style.kb.btn.ina = theme.style.btn.ina;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeMessageBox() {
|
||||||
|
lv_style_copy(&mbox_bg, &bg);
|
||||||
|
mbox_bg.body.main_color = lv_color_hsv_to_rgb(hue, 30, 30);
|
||||||
|
mbox_bg.body.grad_color = lv_color_hsv_to_rgb(hue, 30, 30);
|
||||||
|
mbox_bg.body.border.color = lv_color_hsv_to_rgb(hue, 11, 20);
|
||||||
|
mbox_bg.body.border.width = 1;
|
||||||
|
mbox_bg.body.shadow.width = LV_DPI / 10;
|
||||||
|
mbox_bg.body.shadow.color = lv_color_hex3(0x222);
|
||||||
|
mbox_bg.body.radius = LV_DPI / 20;
|
||||||
|
theme.style.mbox.bg = &mbox_bg;
|
||||||
|
theme.style.mbox.btn.bg = &lv_style_transp;
|
||||||
|
theme.style.mbox.btn.rel = theme.style.btn.rel;
|
||||||
|
theme.style.mbox.btn.pr = theme.style.btn.pr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemePage() {
|
||||||
|
lv_style_copy(&page_scrl, &bg);
|
||||||
|
page_scrl.body.main_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
page_scrl.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
page_scrl.body.border.color = lv_color_hex3(0x333);
|
||||||
|
page_scrl.body.border.width = 1;
|
||||||
|
page_scrl.body.radius = LV_DPI / 20;
|
||||||
|
|
||||||
|
theme.style.page.bg = &panel;
|
||||||
|
theme.style.page.scrl = &page_scrl;
|
||||||
|
theme.style.page.sb = &sb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeTextArea() {
|
||||||
|
theme.style.ta.area = &panel;
|
||||||
|
theme.style.ta.oneline = &panel;
|
||||||
|
theme.style.ta.cursor = NULL;
|
||||||
|
theme.style.ta.sb = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeSpinBox() {
|
||||||
|
theme.style.spinbox.bg = &panel;
|
||||||
|
theme.style.spinbox.cursor = theme.style.ta.cursor;
|
||||||
|
theme.style.spinbox.sb = theme.style.ta.sb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeList() {
|
||||||
|
|
||||||
|
lv_style_copy(&list_bg, &panel);
|
||||||
|
list_bg.body.padding.top = 0;
|
||||||
|
list_bg.body.padding.bottom = 0;
|
||||||
|
list_bg.body.padding.left = 0;
|
||||||
|
list_bg.body.padding.right = 0;
|
||||||
|
list_bg.body.padding.inner = 0;
|
||||||
|
|
||||||
|
lv_style_copy(&list_btn_rel, &bg);
|
||||||
|
list_btn_rel.body.opa = LV_OPA_TRANSP;
|
||||||
|
list_btn_rel.body.border.part = LV_BORDER_BOTTOM;
|
||||||
|
list_btn_rel.body.border.color = lv_color_hsv_to_rgb(hue, 10, 5);
|
||||||
|
list_btn_rel.body.border.width = 1;
|
||||||
|
list_btn_rel.body.radius = LV_DPI / 10;
|
||||||
|
list_btn_rel.text.color = lv_color_hsv_to_rgb(hue, 5, 80);
|
||||||
|
list_btn_rel.image.color = lv_color_hsv_to_rgb(hue, 5, 80);
|
||||||
|
list_btn_rel.body.padding.top = LV_DPI / 6;
|
||||||
|
list_btn_rel.body.padding.bottom = LV_DPI / 6;
|
||||||
|
list_btn_rel.body.padding.left = LV_DPI / 8;
|
||||||
|
list_btn_rel.body.padding.right = LV_DPI / 8;
|
||||||
|
|
||||||
|
lv_style_copy(&list_btn_pr, theme.style.btn.pr);
|
||||||
|
list_btn_pr.body.main_color = lv_color_hsv_to_rgb(hue, 10, 5);
|
||||||
|
list_btn_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 5);
|
||||||
|
list_btn_pr.body.border.color = lv_color_hsv_to_rgb(hue, 10, 5);
|
||||||
|
list_btn_pr.body.border.width = 0;
|
||||||
|
list_btn_pr.body.padding.top = LV_DPI / 6;
|
||||||
|
list_btn_pr.body.padding.bottom = LV_DPI / 6;
|
||||||
|
list_btn_pr.body.padding.left = LV_DPI / 8;
|
||||||
|
list_btn_pr.body.padding.right = LV_DPI / 8;
|
||||||
|
list_btn_pr.text.color = lv_color_hsv_to_rgb(hue, 5, 80);
|
||||||
|
list_btn_pr.image.color = lv_color_hsv_to_rgb(hue, 5, 80);
|
||||||
|
|
||||||
|
lv_style_copy(&list_btn_tgl_rel, &list_btn_rel);
|
||||||
|
list_btn_tgl_rel.body.opa = LV_OPA_COVER;
|
||||||
|
list_btn_tgl_rel.body.main_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
list_btn_tgl_rel.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 70);
|
||||||
|
list_btn_tgl_rel.body.border.color = lv_color_hsv_to_rgb(hue, 60, 40);
|
||||||
|
list_btn_tgl_rel.body.radius = list_bg.body.radius;
|
||||||
|
|
||||||
|
lv_style_copy(&list_btn_tgl_pr, &list_btn_tgl_rel);
|
||||||
|
list_btn_tgl_pr.body.main_color = lv_color_hsv_to_rgb(hue, 80, 60);
|
||||||
|
list_btn_tgl_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 80, 60);
|
||||||
|
|
||||||
|
theme.style.list.sb = &sb;
|
||||||
|
theme.style.list.bg = &list_bg;
|
||||||
|
theme.style.list.scrl = &lv_style_transp_tight;
|
||||||
|
theme.style.list.btn.rel = &list_btn_rel;
|
||||||
|
theme.style.list.btn.pr = &list_btn_pr;
|
||||||
|
theme.style.list.btn.tgl_rel = &list_btn_tgl_rel;
|
||||||
|
theme.style.list.btn.tgl_pr = &list_btn_tgl_pr;
|
||||||
|
theme.style.list.btn.ina = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeDropDownList() {
|
||||||
|
lv_style_copy(&ddlist_bg, theme.style.btn.rel);
|
||||||
|
ddlist_bg.text.line_space = LV_DPI / 8;
|
||||||
|
ddlist_bg.body.padding.top = LV_DPI / 8;
|
||||||
|
ddlist_bg.body.padding.bottom = LV_DPI / 8;
|
||||||
|
ddlist_bg.body.padding.left = LV_DPI / 8;
|
||||||
|
ddlist_bg.body.padding.right = LV_DPI / 8;
|
||||||
|
ddlist_bg.body.radius = LV_DPI / 30;
|
||||||
|
|
||||||
|
lv_style_copy(&ddlist_sel, theme.style.btn.rel);
|
||||||
|
ddlist_sel.body.main_color = lv_color_hsv_to_rgb(hue, 20, 50);
|
||||||
|
ddlist_sel.body.grad_color = lv_color_hsv_to_rgb(hue, 20, 50);
|
||||||
|
ddlist_sel.body.radius = 0;
|
||||||
|
|
||||||
|
theme.style.ddlist.bg = &ddlist_bg;
|
||||||
|
theme.style.ddlist.sel = &ddlist_sel;
|
||||||
|
theme.style.ddlist.sb = &def;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeRoller() {
|
||||||
|
lv_style_t roller_bg;
|
||||||
|
|
||||||
|
lv_style_copy(&roller_bg, theme.style.ddlist.bg);
|
||||||
|
roller_bg.body.main_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
roller_bg.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 40);
|
||||||
|
roller_bg.text.color = lv_color_hsv_to_rgb(hue, 5, 70);
|
||||||
|
roller_bg.text.opa = LV_OPA_60;
|
||||||
|
|
||||||
|
theme.style.roller.bg = &roller_bg;
|
||||||
|
theme.style.roller.sel = theme.style.ddlist.sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeTabView() {
|
||||||
|
theme.style.tabview.bg = &bg;
|
||||||
|
theme.style.tabview.indic = &lv_style_transp;
|
||||||
|
theme.style.tabview.btn.bg = &lv_style_transp;
|
||||||
|
theme.style.tabview.btn.rel = theme.style.btn.rel;
|
||||||
|
theme.style.tabview.btn.pr = theme.style.btn.pr;
|
||||||
|
theme.style.tabview.btn.tgl_rel = theme.style.btn.tgl_rel;
|
||||||
|
theme.style.tabview.btn.tgl_pr = theme.style.btn.tgl_pr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeTileView() {
|
||||||
|
theme.style.tileview.bg = &lv_style_transp_tight;
|
||||||
|
theme.style.tileview.scrl = &lv_style_transp_tight;
|
||||||
|
theme.style.tileview.sb = theme.style.page.sb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeTable() {
|
||||||
|
lv_style_copy(&cell, &panel);
|
||||||
|
cell.body.radius = 0;
|
||||||
|
cell.body.border.width = 1;
|
||||||
|
cell.body.padding.left = LV_DPI / 12;
|
||||||
|
cell.body.padding.right = LV_DPI / 12;
|
||||||
|
cell.body.padding.top = LV_DPI / 12;
|
||||||
|
cell.body.padding.bottom = LV_DPI / 12;
|
||||||
|
|
||||||
|
theme.style.table.bg = &lv_style_transp_tight;
|
||||||
|
theme.style.table.cell = &cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LittleVgl::InitThemeWindow() {
|
||||||
|
// lv_style_copy(&win_bg, &bg);
|
||||||
|
// win_bg.body.border.color = lv_color_hex3(0x333);
|
||||||
|
// win_bg.body.border.width = 1;
|
||||||
|
//
|
||||||
|
// lv_style_copy(&win_header, &win_bg);
|
||||||
|
// win_header.body.main_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
// win_header.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 20);
|
||||||
|
// win_header.body.radius = 0;
|
||||||
|
// win_header.body.padding.left = 0;
|
||||||
|
// win_header.body.padding.right = 0;
|
||||||
|
// win_header.body.padding.top = 0;
|
||||||
|
// win_header.body.padding.bottom = 0;
|
||||||
|
//
|
||||||
|
// lv_style_copy(&win_btn_pr, &def);
|
||||||
|
// win_btn_pr.body.main_color = lv_color_hsv_to_rgb(hue, 10, 10);
|
||||||
|
// win_btn_pr.body.grad_color = lv_color_hsv_to_rgb(hue, 10, 10);
|
||||||
|
// win_btn_pr.text.color = lv_color_hex3(0xaaa);
|
||||||
|
// win_btn_pr.image.color = lv_color_hex3(0xaaa);
|
||||||
|
//
|
||||||
|
// theme.style.win.bg = &win_bg;
|
||||||
|
// theme.style.win.sb = &sb;
|
||||||
|
// theme.style.win.header = &win_header;
|
||||||
|
// theme.style.win.content = &lv_style_transp;
|
||||||
|
// theme.style.win.btn.rel = &lv_style_transp;
|
||||||
|
// theme.style.win.btn.pr = &win_btn_pr;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <libs/lvgl/src/lv_core/lv_style.h>
|
||||||
|
#include <libs/lvgl/src/lv_themes/lv_theme.h>
|
||||||
#include <libs/lvgl/src/lv_hal/lv_hal.h>
|
#include <libs/lvgl/src/lv_hal/lv_hal.h>
|
||||||
#include <drivers/St7789.h>
|
#include <drivers/St7789.h>
|
||||||
#include <drivers/Cst816s.h>
|
#include <drivers/Cst816s.h>
|
||||||
|
@ -20,19 +22,76 @@ namespace Pinetime {
|
||||||
private:
|
private:
|
||||||
void InitDisplay();
|
void InitDisplay();
|
||||||
void InitTouchpad();
|
void InitTouchpad();
|
||||||
|
void InitTheme();
|
||||||
|
void InitBaseTheme();
|
||||||
|
void InitThemeContainer();
|
||||||
|
void InitThemeButton();
|
||||||
|
void InitThemeLabel();
|
||||||
|
void InitThemeLine();
|
||||||
|
void InitThemeLed();
|
||||||
|
void InitThemeImage();
|
||||||
|
void InitThemeBar();
|
||||||
|
void InitThemeSlider();
|
||||||
|
void InitThemeSwitch();
|
||||||
|
void InitThemeMeter();
|
||||||
|
void InitThemeGauge();
|
||||||
|
void InitThemeArc();
|
||||||
|
void InitThemePreload();
|
||||||
|
void InitThemeChart();
|
||||||
|
void InitThemeCalendar();
|
||||||
|
void InitThemeCheckBox();
|
||||||
|
void InitThemeButtonMatrix();
|
||||||
|
void InitThemeKnob();
|
||||||
|
void InitThemeMessageBox();
|
||||||
|
void InitThemePage();
|
||||||
|
void InitThemeTextArea();
|
||||||
|
void InitThemeSpinBox();
|
||||||
|
void InitThemeList();
|
||||||
|
void InitThemeDropDownList();
|
||||||
|
void InitThemeRoller();
|
||||||
|
void InitThemeTabView();
|
||||||
|
void InitThemeTileView();
|
||||||
|
void InitThemeTable();
|
||||||
|
void InitThemeWindow();
|
||||||
|
|
||||||
Pinetime::Drivers::St7789& lcd;
|
Pinetime::Drivers::St7789& lcd;
|
||||||
Pinetime::Drivers::Cst816S& touchPanel;
|
Pinetime::Drivers::Cst816S& touchPanel;
|
||||||
|
|
||||||
|
|
||||||
lv_disp_buf_t disp_buf_2;
|
lv_disp_buf_t disp_buf_2;
|
||||||
lv_color_t buf2_1[LV_HOR_RES_MAX * 2];
|
lv_color_t buf2_1[LV_HOR_RES_MAX * 4];
|
||||||
lv_color_t buf2_2[LV_HOR_RES_MAX * 2];
|
lv_color_t buf2_2[LV_HOR_RES_MAX * 4];
|
||||||
|
|
||||||
lv_disp_drv_t disp_drv;
|
lv_disp_drv_t disp_drv;
|
||||||
lv_point_t previousClick;
|
lv_point_t previousClick;
|
||||||
|
|
||||||
|
lv_style_t def;
|
||||||
|
lv_style_t scr, bg, sb, panel;
|
||||||
|
lv_font_t * font = nullptr;
|
||||||
|
uint16_t hue = 10;
|
||||||
|
lv_theme_t theme;
|
||||||
|
lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
|
||||||
|
lv_style_t prim, sec, hint;
|
||||||
|
lv_style_t led;
|
||||||
|
lv_style_t bar_bg, bar_indic;
|
||||||
|
lv_style_t slider_knob;
|
||||||
|
lv_style_t arc;
|
||||||
|
lv_style_t cal_bg;
|
||||||
|
lv_style_t cal_header;
|
||||||
|
lv_style_t week_box;
|
||||||
|
lv_style_t today_box;
|
||||||
|
lv_style_t highlighted_days;
|
||||||
|
lv_style_t ina_days;
|
||||||
|
lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
|
||||||
|
lv_style_t btnm_bg, btnm_rel, btnm_pr, btnm_tgl_rel, btnm_tgl_pr, btnm_ina;
|
||||||
|
lv_style_t mbox_bg;
|
||||||
|
lv_style_t page_scrl;
|
||||||
|
lv_style_t list_bg, list_btn_rel, list_btn_pr, list_btn_tgl_rel, list_btn_tgl_pr;
|
||||||
|
lv_style_t ddlist_bg, ddlist_sel;
|
||||||
|
lv_style_t cell;
|
||||||
|
lv_style_t win_bg;
|
||||||
|
lv_style_t win_header;
|
||||||
|
lv_style_t win_btn_pr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue