mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-27 05:06:44 +00:00
Improve font handling
This commit is contained in:
parent
d036dd77c4
commit
3a6b8d5605
111
src/hasp.cpp
111
src/hasp.cpp
@ -57,7 +57,7 @@ char haspZiFontPath[32];
|
|||||||
**********************/
|
**********************/
|
||||||
lv_style_t style_mbox_bg; /*Black bg. style with opacity*/
|
lv_style_t style_mbox_bg; /*Black bg. style with opacity*/
|
||||||
lv_obj_t * kb;
|
lv_obj_t * kb;
|
||||||
lv_font_t * defaultFont;
|
// lv_font_t * defaultFont;
|
||||||
|
|
||||||
#if LV_DEMO_WALLPAPER
|
#if LV_DEMO_WALLPAPER
|
||||||
LV_IMG_DECLARE(img_bubble_pattern)
|
LV_IMG_DECLARE(img_bubble_pattern)
|
||||||
@ -84,17 +84,9 @@ static const char * btnm_map2[] = {"0", "1", "\n", "2", "3", "\n", "4", "5",
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
lv_obj_t * pages[HASP_NUM_PAGES];
|
lv_obj_t * pages[HASP_NUM_PAGES];
|
||||||
#if defined(ARDUINO_ARCH_ESP8266)
|
static lv_font_t * haspFonts[4] = {nullptr, LV_THEME_DEFAULT_FONT_NORMAL, LV_THEME_DEFAULT_FONT_SUBTITLE,
|
||||||
static lv_font_t * haspFonts[4];
|
LV_THEME_DEFAULT_FONT_TITLE};
|
||||||
// static lv_style_t labelStyles[4];
|
|
||||||
// static lv_style_t rollerStyles[4];
|
|
||||||
#else
|
|
||||||
lv_font_t * haspFonts[8];
|
|
||||||
// static lv_style_t labelStyles[8];
|
|
||||||
// static lv_style_t rollerStyles[8];
|
|
||||||
#endif
|
|
||||||
uint8_t current_page = 0;
|
uint8_t current_page = 0;
|
||||||
// uint16_t current_style = 0;
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* MACROS
|
* MACROS
|
||||||
@ -105,6 +97,19 @@ uint8_t current_page = 0;
|
|||||||
**********************/
|
**********************/
|
||||||
void haspLoadPage(const char * pages);
|
void haspLoadPage(const char * pages);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/**
|
||||||
|
* Get Font ID
|
||||||
|
*/
|
||||||
|
lv_font_t * hasp_get_font(uint8_t fontid)
|
||||||
|
{
|
||||||
|
if(fontid >= 4) {
|
||||||
|
return nullptr;
|
||||||
|
} else {
|
||||||
|
return haspFonts[fontid];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/**
|
/**
|
||||||
* Get Page Object by PageID
|
* Get Page Object by PageID
|
||||||
@ -257,26 +262,13 @@ static inline void hasp_send_obj_attribute_txt(lv_obj_t * obj, const char * txt)
|
|||||||
void hasp_process_attribute(uint8_t pageid, uint8_t objid, const char * attr, const char * payload)
|
void hasp_process_attribute(uint8_t pageid, uint8_t objid, const char * attr, const char * payload)
|
||||||
{
|
{
|
||||||
hasp_process_obj_attribute(hasp_find_obj_from_id(pageid, objid), attr, payload, strlen(payload) > 0);
|
hasp_process_obj_attribute(hasp_find_obj_from_id(pageid, objid), attr, payload, strlen(payload) > 0);
|
||||||
|
|
||||||
/* else {
|
|
||||||
// publish the change
|
|
||||||
std::string strValue = "";
|
|
||||||
if(haspGetObjAttribute(obj, strAttr, strValue)) {
|
|
||||||
#if HASP_USE_MQTT > 0
|
|
||||||
mqtt_send_attribute(pageid, objid, strAttr.c_str(), strValue.c_str());
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
Log.warning(F("HASP: Unknown property: %s"), strAttr.c_str());
|
|
||||||
}
|
|
||||||
} // payload */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connection lost GUI
|
* WakeUp the display using a command instead of touch
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void haspWakeUp()
|
void haspWakeUp()
|
||||||
{
|
{
|
||||||
lv_disp_trig_activity(NULL);
|
lv_disp_trig_activity(NULL);
|
||||||
@ -361,18 +353,6 @@ void haspSetup()
|
|||||||
/******* File System Test ********************************************************************/
|
/******* File System Test ********************************************************************/
|
||||||
|
|
||||||
/* ********** Font Initializations ********** */
|
/* ********** Font Initializations ********** */
|
||||||
defaultFont = LV_FONT_DEFAULT; // Use default font
|
|
||||||
#if ESP32
|
|
||||||
lv_font_t * font_small = defaultFont;
|
|
||||||
lv_font_t * font_normal = &lv_font_montserrat_12;
|
|
||||||
lv_font_t * font_subtitle = &lv_font_montserrat_16;
|
|
||||||
lv_font_t * font_title = &lv_font_montserrat_22;
|
|
||||||
#else
|
|
||||||
lv_font_t * font_small = defaultFont;
|
|
||||||
lv_font_t * font_normal = defaultFont;
|
|
||||||
lv_font_t * font_subtitle = defaultFont;
|
|
||||||
lv_font_t * font_title = defaultFont;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HASP_USE_SPIFFS > 0
|
#if HASP_USE_SPIFFS > 0
|
||||||
#if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266)
|
#if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266)
|
||||||
@ -380,11 +360,13 @@ void haspSetup()
|
|||||||
|
|
||||||
if(lv_zifont_font_init(&haspFonts[0], haspZiFontPath, 24) != 0) {
|
if(lv_zifont_font_init(&haspFonts[0], haspZiFontPath, 24) != 0) {
|
||||||
Log.error(F("HASP: Failed to set font to %s"), haspZiFontPath);
|
Log.error(F("HASP: Failed to set font to %s"), haspZiFontPath);
|
||||||
|
haspFonts[0] = LV_FONT_DEFAULT;
|
||||||
} else {
|
} else {
|
||||||
defaultFont = haspFonts[0];
|
// defaultFont = haspFonts[0];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ********** Font Initializations ********** */
|
/* ********** Font Initializations ********** */
|
||||||
|
|
||||||
/* ********** Theme Initializations ********** */
|
/* ********** Theme Initializations ********** */
|
||||||
@ -402,20 +384,20 @@ void haspSetup()
|
|||||||
#endif
|
#endif
|
||||||
#if(LV_USE_THEME_MONO == 1) || (LV_USE_THEME_EMPTY == 1)
|
#if(LV_USE_THEME_MONO == 1) || (LV_USE_THEME_EMPTY == 1)
|
||||||
case 3:
|
case 3:
|
||||||
th = lv_theme_mono_init(LV_COLOR_PURPLE, LV_COLOR_BLACK, LV_THEME_DEFAULT_FLAGS, font_small, font_normal,
|
th = lv_theme_mono_init(LV_COLOR_PURPLE, LV_COLOR_BLACK, LV_THEME_DEFAULT_FLAGS, haspFonts[0], haspFonts[1],
|
||||||
font_subtitle, font_title);
|
haspFonts[2], haspFonts[3]);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if LV_USE_THEME_MATERIAL == 1
|
#if LV_USE_THEME_MATERIAL == 1
|
||||||
case 4:
|
case 4:
|
||||||
th = lv_theme_material_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE,
|
th = lv_theme_material_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE,
|
||||||
LV_THEME_MATERIAL_FLAG_LIGHT + LV_THEME_MATERIAL_FLAG_NO_FOCUS, font_small,
|
LV_THEME_MATERIAL_FLAG_LIGHT + LV_THEME_MATERIAL_FLAG_NO_FOCUS, haspFonts[0],
|
||||||
font_normal, font_subtitle, font_title);
|
haspFonts[1], haspFonts[2], haspFonts[3]);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
th = lv_theme_material_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE,
|
th = lv_theme_material_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE,
|
||||||
LV_THEME_MATERIAL_FLAG_DARK + LV_THEME_MATERIAL_FLAG_NO_FOCUS, font_small,
|
LV_THEME_MATERIAL_FLAG_DARK + LV_THEME_MATERIAL_FLAG_NO_FOCUS, haspFonts[0],
|
||||||
font_normal, font_subtitle, font_title);
|
haspFonts[1], haspFonts[2], haspFonts[3]);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -436,8 +418,8 @@ void haspSetup()
|
|||||||
#endif
|
#endif
|
||||||
#if(LV_USE_THEME_HASP == 1) || (LV_USE_THEME_TEMPLATE == 1)
|
#if(LV_USE_THEME_HASP == 1) || (LV_USE_THEME_TEMPLATE == 1)
|
||||||
case 8:
|
case 8:
|
||||||
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, font_small,
|
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, haspFonts[0],
|
||||||
font_normal, font_subtitle, font_title);
|
haspFonts[1], haspFonts[2], haspFonts[3]);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
/* case 0:
|
/* case 0:
|
||||||
@ -449,8 +431,8 @@ void haspSetup()
|
|||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
default:
|
default:
|
||||||
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, font_small,
|
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, haspFonts[0],
|
||||||
font_normal, font_subtitle, font_title);
|
haspFonts[1], haspFonts[2], haspFonts[3]);
|
||||||
Log.error(F("HASP: Unknown theme selected"));
|
Log.error(F("HASP: Unknown theme selected"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,20 +444,19 @@ void haspSetup()
|
|||||||
// lv_theme_set_current(th);
|
// lv_theme_set_current(th);
|
||||||
/* ********** Theme Initializations ********** */
|
/* ********** Theme Initializations ********** */
|
||||||
|
|
||||||
lv_style_list_t * list;
|
// lv_style_list_t * list;
|
||||||
static lv_style_t pagefont;
|
// static lv_style_t pagefont;
|
||||||
lv_style_init(&pagefont);
|
// lv_style_init(&pagefont);
|
||||||
lv_style_set_text_font(&pagefont, LV_STATE_DEFAULT, defaultFont);
|
// lv_style_set_text_font(&pagefont, LV_STATE_DEFAULT, defaultFont);
|
||||||
|
|
||||||
list = lv_obj_get_style_list(lv_disp_get_layer_top(NULL), LV_OBJ_PART_MAIN);
|
// list = lv_obj_get_style_list(lv_disp_get_layer_top(NULL), LV_OBJ_PART_MAIN);
|
||||||
_lv_style_list_add_style(list, &pagefont);
|
// _lv_style_list_add_style(list, &pagefont);
|
||||||
|
|
||||||
/* Create all screens using the theme */
|
/* Create all screens using the theme */
|
||||||
for(uint8_t i = 0; i < (sizeof pages / sizeof *pages); i++) {
|
for(uint8_t i = 0; i < (sizeof pages / sizeof *pages); i++) {
|
||||||
pages[i] = lv_obj_create(NULL, NULL);
|
pages[i] = lv_obj_create(NULL, NULL);
|
||||||
list = lv_obj_get_style_list(pages[i], LV_OBJ_PART_MAIN);
|
// list = lv_obj_get_style_list(pages[i], LV_OBJ_PART_MAIN);
|
||||||
_lv_style_list_add_style(list, &pagefont);
|
// _lv_style_list_add_style(list, &pagefont);
|
||||||
// lv_obj_set_size(pages[0], hres, vres);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HASP_USE_WIFI > 0
|
#if HASP_USE_WIFI > 0
|
||||||
@ -742,22 +723,8 @@ void haspNewObject(const JsonObject & config, uint8_t & saved_page_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Input cache and validation */
|
|
||||||
// int16_t min = config[F("min")].as<int16_t>();
|
|
||||||
// int16_t max = config[F("max")].as<int16_t>();
|
|
||||||
// int16_t val = config[F("val")].as<int16_t>();
|
|
||||||
// if(min >= max) {
|
|
||||||
// min = 0;
|
|
||||||
// max = 100;
|
|
||||||
//}
|
|
||||||
// bool enabled = config[F("enable")].as<bool>() | true;
|
|
||||||
// lv_coord_t width = config[F("w")].as<lv_coord_t>();
|
|
||||||
// lv_coord_t height = config[F("h")].as<lv_coord_t>();
|
|
||||||
// if(width == 0) width = 32;
|
|
||||||
// if(height == 0) height = 32;
|
|
||||||
uint8_t objid = config[F("objid")].as<uint8_t>();
|
uint8_t objid = config[F("objid")].as<uint8_t>();
|
||||||
uint8_t id = config[F("id")].as<uint8_t>();
|
uint8_t id = config[F("id")].as<uint8_t>();
|
||||||
// uint8_t styleid = config[F("styleid")].as<uint8_t>();
|
|
||||||
|
|
||||||
/* Define Objects*/
|
/* Define Objects*/
|
||||||
lv_obj_t * obj = hasp_find_obj_from_id(parent_obj, id);
|
lv_obj_t * obj = hasp_find_obj_from_id(parent_obj, id);
|
||||||
@ -770,9 +737,7 @@ void haspNewObject(const JsonObject & config, uint8_t & saved_page_id)
|
|||||||
/* ----- Basic Objects ------ */
|
/* ----- Basic Objects ------ */
|
||||||
case LV_HASP_BUTTON: {
|
case LV_HASP_BUTTON: {
|
||||||
obj = lv_btn_create(parent_obj, NULL);
|
obj = lv_btn_create(parent_obj, NULL);
|
||||||
/* lv_obj_t * label ; */
|
|
||||||
lv_label_create(obj, NULL);
|
lv_label_create(obj, NULL);
|
||||||
// haspSetOpacity(obj, LV_OPA_COVER);
|
|
||||||
lv_obj_set_event_cb(obj, btn_event_handler);
|
lv_obj_set_event_cb(obj, btn_event_handler);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,7 @@ bool haspGetConfig(const JsonObject & settings);
|
|||||||
bool haspSetConfig(const JsonObject & settings);
|
bool haspSetConfig(const JsonObject & settings);
|
||||||
|
|
||||||
lv_obj_t * hasp_find_obj_from_id(lv_obj_t * parent, uint8_t objid);
|
lv_obj_t * hasp_find_obj_from_id(lv_obj_t * parent, uint8_t objid);
|
||||||
|
lv_font_t * hasp_get_font(uint8_t fontid);
|
||||||
|
|
||||||
void IRAM_ATTR btn_event_handler(lv_obj_t * obj, lv_event_t event);
|
void IRAM_ATTR btn_event_handler(lv_obj_t * obj, lv_event_t event);
|
||||||
void IRAM_ATTR toggle_event_handler(lv_obj_t * obj, lv_event_t event);
|
void IRAM_ATTR toggle_event_handler(lv_obj_t * obj, lv_event_t event);
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
#include "lvgl.h"
|
|
||||||
#include "hasp.h"
|
|
||||||
#include "hasp_attribute.h"
|
|
||||||
//#include "hasp_attr_get.h"
|
|
||||||
|
|
||||||
#define LVGL7 1
|
|
||||||
|
|
||||||
bool haspGetObjAttribute(lv_obj_t * obj, String strAttr, std::string & strPayload)
|
|
||||||
{
|
|
||||||
if(!obj) return false;
|
|
||||||
|
|
||||||
switch(strAttr.length()) {
|
|
||||||
case 4:
|
|
||||||
|
|
||||||
/* .txt and .val depend on objecttype */
|
|
||||||
lv_obj_type_t list;
|
|
||||||
lv_obj_get_type(obj, &list);
|
|
||||||
|
|
||||||
if(strAttr == F(".val")) {
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_PRELOADER)) return false;
|
|
||||||
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_BUTTON)) {
|
|
||||||
|
|
||||||
if(lv_btn_get_state(obj) == LV_BTN_STATE_CHECKED_PRESSED ||
|
|
||||||
lv_btn_get_state(obj) == LV_BTN_STATE_CHECKED_RELEASED)
|
|
||||||
strPayload = "1"; // It's toggled
|
|
||||||
else
|
|
||||||
strPayload = "0"; // Normal btn has no toggle state
|
|
||||||
}
|
|
||||||
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_SLIDER)) strPayload = String(lv_slider_get_value(obj)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_GAUGE)) strPayload = String(lv_gauge_get_value(obj, 0)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_BAR)) strPayload = String(lv_bar_get_value(obj)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_LMETER))
|
|
||||||
strPayload = String(lv_linemeter_get_value(obj)).c_str();
|
|
||||||
// if(check_obj_type(list.type[0], LV_HASP_CPICKER)) strPayload =
|
|
||||||
// String(lv_cpicker_get_color(obj)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_CHECKBOX))
|
|
||||||
strPayload = String(!lv_checkbox_is_checked(obj) ? 0 : 1).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_DDLIST))
|
|
||||||
strPayload = String(lv_dropdown_get_selected(obj)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_ROLLER))
|
|
||||||
strPayload = String(lv_roller_get_selected(obj)).c_str();
|
|
||||||
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_LED)) strPayload = String(lv_led_get_bright(obj)).c_str();
|
|
||||||
if(check_obj_type(list.type[0], LV_HASP_SWITCH)) strPayload = String(lv_switch_get_state(obj)).c_str();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
@ -120,9 +120,15 @@ static lv_color_t haspPayloadToColor(const char * payload)
|
|||||||
|
|
||||||
static lv_font_t * haspPayloadToFont(const char * payload)
|
static lv_font_t * haspPayloadToFont(const char * payload)
|
||||||
{
|
{
|
||||||
int16_t var = atoi(payload);
|
uint8_t var = atoi(payload);
|
||||||
|
|
||||||
switch(var) {
|
switch(var) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
return hasp_get_font(var);
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
return &unscii_8_icon;
|
return &unscii_8_icon;
|
||||||
|
|
||||||
@ -414,7 +420,7 @@ static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, uint16_t
|
|||||||
if(font) {
|
if(font) {
|
||||||
return lv_obj_set_style_local_text_font(obj, part, state, font);
|
return lv_obj_set_style_local_text_font(obj, part, state, font);
|
||||||
} else {
|
} else {
|
||||||
return Log.warning(F("HASP: Unknown Font ID %s"), attr_p);
|
return Log.warning(F("HASP: Unknown Font ID %s"), payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user