THEME AND FONT
Diff: lv_theme_rb.c
- Revision:
- 0:e82c05b4b6f9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lv_theme_rb.c Sun Jan 26 16:18:01 2020 +0000
@@ -0,0 +1,599 @@
+/**
+ * @file lv_theme_rb.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_theme.h"
+
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+static lv_theme_t theme;
+static lv_style_t def;
+static lv_style_t bg;
+static lv_style_t panel;
+static lv_style_t scr;
+
+/*Static style definitions*/
+static lv_style_t sb;
+static lv_style_t plain_bordered;
+static lv_style_t label_prim;
+static lv_style_t label_sec;
+static lv_style_t label_hint;
+
+/*Saved input parameters*/
+static uint16_t _hue;
+static lv_font_t * _font;
+
+
+static lv_style_t btn_rel, btn_pr, btn_trel, btn_tpr, btn_ina;
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static void basic_init(void)
+{
+ /* lv_style_copy(&def, &lv_style_pretty); //Initialize the default style
+
+ lv_style_copy(&scr, &def);
+ scr.body.padding.bottom = 0;
+ scr.body.padding.top = 0;
+ scr.body.padding.left = 0;
+ scr.body.padding.right = 0;
+
+ lv_style_copy(&sb, &lv_style_pretty_color);
+ sb.body.grad_color = sb.body.main_color;
+ sb.body.padding.right = sb.body.padding.right / 2; //Make closer to the edges
+ sb.body.padding.bottom = sb.body.padding.bottom / 2;
+
+ lv_style_copy(&plain_bordered, &lv_style_plain);
+ plain_bordered.body.border.width = 2;
+ plain_bordered.body.border.color = lv_color_hex3(0xbbb);
+
+ theme.style.bg = &lv_style_plain;
+ theme.style.scr = &scr;
+ theme.style.panel = &lv_style_pretty;*/
+
+ //GABOR: I copied the lv_theme_default.c and i tried to change someting. Here i copy the basic init of night theme, but nothing change on my screen. What's wrong?
+
+ lv_style_copy(&def, &lv_style_pretty); /*Initialize the default style*/
+ def.text.font = _font;
+
+ lv_style_copy(&bg, &lv_style_plain);
+ bg.body.main_color = lv_color_hsv_to_rgb(_hue, 11, 30);
+ bg.body.grad_color = lv_color_hsv_to_rgb(_hue, 11, 30);
+ bg.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
+ bg.text.font = _font;
+ bg.image.color = lv_color_hsv_to_rgb(_hue, 5, 95);
+
+ 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;
+}
+
+static void btn_init(void)
+{
+#if LV_USE_BTN != 0
+ static lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
+
+ 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;
+
+ /*
+ lv_style_copy(&btn_rel, &def);
+ btn_rel.glass = 0;
+ btn_rel.body.opa = LV_OPA_TRANSP;
+ btn_rel.body.radius = LV_RADIUS_CIRCLE;
+ btn_rel.body.border.width = 2;
+ btn_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 70, 90);
+ btn_rel.body.border.opa = LV_OPA_80;
+ btn_rel.body.padding.left = LV_DPI / 4;
+ btn_rel.body.padding.right = LV_DPI / 4;
+ btn_rel.body.padding.top = LV_DPI / 6;
+ btn_rel.body.padding.bottom = LV_DPI / 6;
+ btn_rel.body.padding.inner = LV_DPI / 10;
+ btn_rel.text.color = lv_color_hsv_to_rgb(0, 0, 0);
+ btn_rel.text.font = _font;
+ btn_rel.image.color = lv_color_hsv_to_rgb(_hue, 8, 96);
+
+ // theme.style.btn.rel = &lv_style_btn_rel;
+ theme.style.btn.rel = &lv_style_btn_rel;
+ theme.style.btn.pr = &lv_style_btn_pr;
+ theme.style.btn.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.btn.tgl_pr = &lv_style_btn_tgl_pr;
+ theme.style.btn.ina = &lv_style_btn_ina;
+ */
+#endif
+}
+
+static void label_init(void)
+{
+#if LV_USE_LABEL != 0
+
+ lv_style_copy(&label_prim, &lv_style_plain);
+ lv_style_copy(&label_sec, &lv_style_plain);
+ lv_style_copy(&label_hint, &lv_style_plain);
+
+ label_prim.text.color = lv_color_hex3(0x111);
+ label_sec.text.color = lv_color_hex3(0x888);
+ label_hint.text.color = lv_color_hex3(0xaaa);
+
+ theme.style.label.prim = &label_prim;
+ theme.style.label.sec = &label_sec;
+ theme.style.label.hint = &label_hint;
+#endif
+}
+
+static void img_init(void)
+{
+#if LV_USE_IMG != 0
+
+ theme.style.img.light = &def;
+ theme.style.img.dark = &def;
+#endif
+}
+
+static void line_init(void)
+{
+#if LV_USE_LINE != 0
+
+ theme.style.line.decor = &def;
+#endif
+}
+
+static void led_init(void)
+{
+#if LV_USE_LED != 0
+ static lv_style_t led;
+
+ lv_style_copy(&led, &lv_style_pretty_color);
+ 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.shadow.color = led.body.main_color;
+
+ theme.style.led = &led;
+#endif
+}
+
+static void bar_init(void)
+{
+#if LV_USE_BAR
+
+ theme.style.bar.bg = &lv_style_pretty;
+ theme.style.bar.indic = &lv_style_pretty_color;
+#endif
+}
+
+static void slider_init(void)
+{
+#if LV_USE_SLIDER != 0
+ static lv_style_t slider_bg;
+ lv_style_copy(&slider_bg, &lv_style_pretty);
+ slider_bg.body.padding.left = LV_DPI / 20;
+ slider_bg.body.padding.right = LV_DPI / 20;
+ slider_bg.body.padding.top = LV_DPI / 20;
+ slider_bg.body.padding.bottom = LV_DPI / 20;
+
+ theme.style.slider.bg = &slider_bg;
+ theme.style.slider.indic = &lv_style_pretty_color;
+ theme.style.slider.knob = &lv_style_pretty;
+#endif
+}
+
+static void sw_init(void)
+{
+#if LV_USE_SW != 0
+ static lv_style_t sw_bg;
+ lv_style_copy(&sw_bg, &lv_style_pretty);
+ sw_bg.body.padding.left = 3;
+ sw_bg.body.padding.right = 3;
+ sw_bg.body.padding.top = 3;
+ sw_bg.body.padding.bottom = 3;
+
+ theme.style.sw.bg = &sw_bg;
+ theme.style.sw.indic = &lv_style_pretty_color;
+ theme.style.sw.knob_off = &lv_style_pretty;
+ theme.style.sw.knob_on = &lv_style_pretty;
+#endif
+}
+
+static void lmeter_init(void)
+{
+#if LV_USE_LMETER != 0
+ static lv_style_t lmeter;
+ lv_style_copy(&lmeter, &lv_style_pretty_color);
+ lmeter.line.color = lv_color_hex3(0xddd);
+ lmeter.line.width = 2;
+ lmeter.body.main_color = lv_color_mix(lmeter.body.main_color, LV_COLOR_WHITE, LV_OPA_50);
+ lmeter.body.grad_color = lv_color_mix(lmeter.body.grad_color, LV_COLOR_BLACK, LV_OPA_50);
+
+ theme.style.lmeter = &lmeter;
+#endif
+}
+
+static void gauge_init(void)
+{
+#if LV_USE_GAUGE != 0
+ static lv_style_t gauge;
+ lv_style_copy(&gauge, theme.style.lmeter);
+ gauge.line.color = theme.style.lmeter->body.grad_color;
+ gauge.line.width = 2;
+ gauge.body.main_color = lv_color_hex3(0x888);
+ gauge.body.grad_color = theme.style.lmeter->body.main_color;
+ gauge.text.color = lv_color_hex3(0x888);
+
+ theme.style.gauge = &gauge;
+#endif
+}
+
+static void chart_init(void)
+{
+#if LV_USE_CHART
+
+ theme.style.chart = &lv_style_pretty;
+#endif
+}
+
+static void cb_init(void)
+{
+#if LV_USE_CB != 0
+
+ theme.style.cb.bg = &lv_style_transp;
+ theme.style.cb.box.rel = &lv_style_pretty;
+ theme.style.cb.box.pr = &lv_style_btn_pr;
+ theme.style.cb.box.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.cb.box.tgl_pr = &lv_style_btn_tgl_pr;
+ theme.style.cb.box.ina = &lv_style_btn_ina;
+#endif
+}
+
+static void btnm_init(void)
+{
+#if LV_USE_BTNM
+
+ theme.style.btnm.bg = &lv_style_pretty;
+ theme.style.btnm.btn.rel = &lv_style_btn_rel;
+ theme.style.btnm.btn.pr = &lv_style_btn_pr;
+ theme.style.btnm.btn.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.btnm.btn.tgl_pr = &lv_style_btn_tgl_pr;
+ theme.style.btnm.btn.ina = &lv_style_btn_ina;
+#endif
+}
+
+static void kb_init(void)
+{
+#if LV_USE_KB
+
+ theme.style.kb.bg = &lv_style_pretty;
+ theme.style.kb.btn.rel = &lv_style_btn_rel;
+ theme.style.kb.btn.pr = &lv_style_btn_pr;
+ theme.style.kb.btn.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.kb.btn.tgl_pr = &lv_style_btn_tgl_pr;
+ theme.style.kb.btn.ina = &lv_style_btn_ina;
+#endif
+}
+
+static void mbox_init(void)
+{
+#if LV_USE_MBOX
+
+ theme.style.mbox.bg = &lv_style_pretty;
+ theme.style.mbox.btn.bg = &lv_style_transp;
+ theme.style.mbox.btn.rel = &lv_style_btn_rel;
+ theme.style.mbox.btn.pr = &lv_style_btn_tgl_pr;
+#endif
+}
+
+static void page_init(void)
+{
+#if LV_USE_PAGE
+
+ theme.style.page.bg = &lv_style_pretty;
+ theme.style.page.scrl = &lv_style_transp_tight;
+ theme.style.page.sb = &sb;
+#endif
+}
+
+static void ta_init(void)
+{
+#if LV_USE_TA
+
+ theme.style.ta.area = &lv_style_pretty;
+ theme.style.ta.oneline = &lv_style_pretty;
+ theme.style.ta.cursor = NULL;
+ theme.style.ta.sb = &sb;
+#endif
+}
+
+static void list_init(void)
+{
+#if LV_USE_LIST != 0
+
+ theme.style.list.bg = &lv_style_pretty;
+ theme.style.list.scrl = &lv_style_transp_fit;
+ theme.style.list.sb = &sb;
+ theme.style.list.btn.rel = &lv_style_btn_rel;
+ theme.style.list.btn.pr = &lv_style_btn_pr;
+ theme.style.list.btn.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.list.btn.tgl_pr = &lv_style_btn_tgl_pr;
+ theme.style.list.btn.ina = &lv_style_btn_ina;
+#endif
+}
+
+static void ddlist_init(void)
+{
+#if LV_USE_DDLIST != 0
+
+ theme.style.ddlist.bg = &lv_style_pretty;
+ theme.style.ddlist.sel = &lv_style_plain_color;
+ theme.style.ddlist.sb = &sb;
+#endif
+}
+
+static void roller_init(void)
+{
+#if LV_USE_ROLLER != 0
+
+ theme.style.roller.bg = &lv_style_pretty;
+ theme.style.roller.sel = &lv_style_plain_color;
+#endif
+}
+
+static void tabview_init(void)
+{
+#if LV_USE_TABVIEW != 0
+
+ theme.style.tabview.bg = &plain_bordered;
+ theme.style.tabview.indic = &lv_style_plain_color;
+ theme.style.tabview.btn.bg = &lv_style_transp;
+ theme.style.tabview.btn.rel = &lv_style_btn_rel;
+ theme.style.tabview.btn.pr = &lv_style_btn_pr;
+ theme.style.tabview.btn.tgl_rel = &lv_style_btn_tgl_rel;
+ theme.style.tabview.btn.tgl_pr = &lv_style_btn_tgl_pr;
+#endif
+}
+
+static void table_init(void)
+{
+#if LV_USE_TABLE != 0
+ theme.style.table.bg = &lv_style_transp_tight;
+ theme.style.table.cell = &lv_style_plain;
+#endif
+}
+
+static void win_init(void)
+{
+#if LV_USE_WIN != 0
+
+ theme.style.win.bg = &plain_bordered;
+ theme.style.win.sb = &sb;
+ theme.style.win.header = &lv_style_plain_color;
+ theme.style.win.content = &lv_style_transp;
+ theme.style.win.btn.rel = &lv_style_btn_rel;
+ theme.style.win.btn.pr = &lv_style_btn_pr;
+#endif
+}
+
+#if LV_USE_GROUP
+
+static void style_mod(lv_group_t * group, lv_style_t * style)
+{
+ (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+ /*Make the style to be a little bit orange*/
+ style->body.border.opa = LV_OPA_COVER;
+ style->body.border.color = LV_COLOR_ORANGE;
+
+ /*If not empty or has border then emphasis the border*/
+ if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
+
+ style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_ORANGE, LV_OPA_70);
+ style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_ORANGE, LV_OPA_70);
+ style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_ORANGE, LV_OPA_60);
+
+ style->text.color = lv_color_mix(style->text.color, LV_COLOR_ORANGE, LV_OPA_70);
+#else
+ style->body.border.opa = LV_OPA_COVER;
+ style->body.border.color = LV_COLOR_BLACK;
+ style->body.border.width = 2;
+#endif
+}
+
+static void style_mod_edit(lv_group_t * group, lv_style_t * style)
+{
+ (void)group; /*Unused*/
+#if LV_COLOR_DEPTH != 1
+ /*Make the style to be a little bit orange*/
+ style->body.border.opa = LV_OPA_COVER;
+ style->body.border.color = LV_COLOR_GREEN;
+
+ /*If not empty or has border then emphasis the border*/
+ if(style->body.opa != LV_OPA_TRANSP || style->body.border.width != 0) style->body.border.width = LV_DPI / 20;
+
+ style->body.main_color = lv_color_mix(style->body.main_color, LV_COLOR_GREEN, LV_OPA_70);
+ style->body.grad_color = lv_color_mix(style->body.grad_color, LV_COLOR_GREEN, LV_OPA_70);
+ style->body.shadow.color = lv_color_mix(style->body.shadow.color, LV_COLOR_GREEN, LV_OPA_60);
+
+ style->text.color = lv_color_mix(style->text.color, LV_COLOR_GREEN, LV_OPA_70);
+#else
+ style->body.border.opa = LV_OPA_COVER;
+ style->body.border.color = LV_COLOR_BLACK;
+ style->body.border.width = 3;
+#endif
+}
+
+#endif /*LV_USE_GROUP*/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Initialize the default theme
+ * @param hue [0..360] hue value from HSV color space to define the theme's base color
+ * @param font pointer to a font (NULL to use the default)
+ * @return pointer to the initialized theme
+ */
+lv_theme_t * lv_theme_rb_init(uint16_t hue, lv_font_t * font)
+{
+ if(font == NULL) font = LV_FONT_DEFAULT;
+ // font = &lv_font_roboto_22; //GABOR : Doesn't work:?
+ // font = &RB_lv_font_roboto_16; //GABOR : Doesn't work:?
+
+
+ _hue = hue;
+ _font = font;
+
+ /*For backward compatibility initialize all theme elements with a default style */
+ 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++;
+ }
+
+ basic_init();
+ btn_init();
+ label_init();
+ img_init();
+ line_init();
+ led_init();
+ bar_init();
+ slider_init();
+ sw_init();
+ lmeter_init();
+ gauge_init();
+ chart_init();
+ cb_init();
+ btnm_init();
+ kb_init();
+ mbox_init();
+ page_init();
+ ta_init();
+ list_init();
+ ddlist_init();
+ roller_init();
+ tabview_init();
+ table_init();
+ win_init();
+
+#if LV_USE_GROUP
+ theme.group.style_mod_xcb = style_mod;
+ theme.group.style_mod_edit_xcb = style_mod_edit;
+#endif
+
+ return &theme;
+}
+
+/**
+ * Get a pointer to the theme
+ * @return pointer to the theme
+ */
+lv_theme_t * lv_theme_get_rb(void)
+{
+ return &theme;
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+