mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	[lvgl] Bug fixes (#7370)
This commit is contained in:
		| @@ -327,6 +327,8 @@ CONFIG_SCHEMA = ( | |||||||
|                     { |                     { | ||||||
|                         cv.Optional(df.CONF_GRID_CELL_X_ALIGN): grid_alignments, |                         cv.Optional(df.CONF_GRID_CELL_X_ALIGN): grid_alignments, | ||||||
|                         cv.Optional(df.CONF_GRID_CELL_Y_ALIGN): grid_alignments, |                         cv.Optional(df.CONF_GRID_CELL_Y_ALIGN): grid_alignments, | ||||||
|  |                         cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, | ||||||
|  |                         cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, | ||||||
|                     } |                     } | ||||||
|                 ) |                 ) | ||||||
|             ), |             ), | ||||||
|   | |||||||
| @@ -52,9 +52,7 @@ opacity = LValidator(opacity_validator, uint32, retmapper=literal) | |||||||
| def color(value): | def color(value): | ||||||
|     if value == SCHEMA_EXTRACT: |     if value == SCHEMA_EXTRACT: | ||||||
|         return ["hex color value", "color ID"] |         return ["hex color value", "color ID"] | ||||||
|     if isinstance(value, int): |     return cv.Any(cv.int_, cv.use_id(ColorStruct))(value) | ||||||
|         return value |  | ||||||
|     return cv.use_id(ColorStruct)(value) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def color_retmapper(value): | def color_retmapper(value): | ||||||
| @@ -82,10 +80,10 @@ def pixels_or_percent_validator(value): | |||||||
|     """A length in one axis - either a number (pixels) or a percentage""" |     """A length in one axis - either a number (pixels) or a percentage""" | ||||||
|     if value == SCHEMA_EXTRACT: |     if value == SCHEMA_EXTRACT: | ||||||
|         return ["pixels", "..%"] |         return ["pixels", "..%"] | ||||||
|  |     value = cv.Any(cv.int_, cv.percentage)(value) | ||||||
|     if isinstance(value, int): |     if isinstance(value, int): | ||||||
|         return cv.int_(value) |         return value | ||||||
|     # Will throw an exception if not a percentage. |     return f"lv_pct({int(value * 100)})" | ||||||
|     return f"lv_pct({int(cv.percentage(value) * 100)})" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| pixels_or_percent = LValidator(pixels_or_percent_validator, uint32, retmapper=literal) | pixels_or_percent = LValidator(pixels_or_percent_validator, uint32, retmapper=literal) | ||||||
| @@ -116,10 +114,7 @@ def size_validator(value): | |||||||
|         if value.upper() == "SIZE_CONTENT": |         if value.upper() == "SIZE_CONTENT": | ||||||
|             return "LV_SIZE_CONTENT" |             return "LV_SIZE_CONTENT" | ||||||
|         raise cv.Invalid("must be 'size_content', a percentage or an integer (pixels)") |         raise cv.Invalid("must be 'size_content', a percentage or an integer (pixels)") | ||||||
|     if isinstance(value, int): |     return pixels_or_percent_validator(value) | ||||||
|         return cv.int_(value) |  | ||||||
|     # Will throw an exception if not a percentage. |  | ||||||
|     return f"lv_pct({int(cv.percentage(value) * 100)})" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| size = LValidator(size_validator, uint32, retmapper=literal) | size = LValidator(size_validator, uint32, retmapper=literal) | ||||||
|   | |||||||
| @@ -359,7 +359,13 @@ LVGL_SCHEMA = cv.Schema( | |||||||
|     } |     } | ||||||
| ) | ) | ||||||
|  |  | ||||||
| ALL_STYLES = {**STYLE_PROPS, **GRID_CELL_SCHEMA, **FLEX_OBJ_SCHEMA} | ALL_STYLES = { | ||||||
|  |     **STYLE_PROPS, | ||||||
|  |     **GRID_CELL_SCHEMA, | ||||||
|  |     **FLEX_OBJ_SCHEMA, | ||||||
|  |     cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, | ||||||
|  |     cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| def container_validator(schema, widget_type: WidgetType): | def container_validator(schema, widget_type: WidgetType): | ||||||
|   | |||||||
| @@ -13,11 +13,13 @@ from ..defines import ( | |||||||
|     CONF_KEY_CODE, |     CONF_KEY_CODE, | ||||||
|     CONF_MAIN, |     CONF_MAIN, | ||||||
|     CONF_ONE_CHECKED, |     CONF_ONE_CHECKED, | ||||||
|  |     CONF_PAD_COLUMN, | ||||||
|  |     CONF_PAD_ROW, | ||||||
|     CONF_ROWS, |     CONF_ROWS, | ||||||
|     CONF_SELECTED, |     CONF_SELECTED, | ||||||
| ) | ) | ||||||
| from ..helpers import lvgl_components_required | from ..helpers import lvgl_components_required | ||||||
| from ..lv_validation import key_code, lv_bool | from ..lv_validation import key_code, lv_bool, pixels | ||||||
| from ..lvcode import lv, lv_add, lv_expr | from ..lvcode import lv, lv_add, lv_expr | ||||||
| from ..schemas import automation_schema | from ..schemas import automation_schema | ||||||
| from ..types import ( | from ..types import ( | ||||||
| @@ -57,6 +59,8 @@ BUTTONMATRIX_BUTTON_SCHEMA = cv.Schema( | |||||||
| BUTTONMATRIX_SCHEMA = cv.Schema( | BUTTONMATRIX_SCHEMA = cv.Schema( | ||||||
|     { |     { | ||||||
|         cv.Optional(CONF_ONE_CHECKED, default=False): lv_bool, |         cv.Optional(CONF_ONE_CHECKED, default=False): lv_bool, | ||||||
|  |         cv.Optional(CONF_PAD_ROW): pixels, | ||||||
|  |         cv.Optional(CONF_PAD_COLUMN): pixels, | ||||||
|         cv.GenerateID(CONF_BUTTON_TEXT_LIST_ID): cv.declare_id(char_ptr), |         cv.GenerateID(CONF_BUTTON_TEXT_LIST_ID): cv.declare_id(char_ptr), | ||||||
|         cv.Required(CONF_ROWS): cv.ensure_list( |         cv.Required(CONF_ROWS): cv.ensure_list( | ||||||
|             cv.Schema( |             cv.Schema( | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
|  | from esphome.config_validation import Optional | ||||||
| from esphome.const import CONF_TEXT | from esphome.const import CONF_TEXT | ||||||
|  |  | ||||||
| from ..defines import CONF_INDICATOR, CONF_MAIN | from ..defines import CONF_INDICATOR, CONF_MAIN, CONF_PAD_COLUMN | ||||||
| from ..lv_validation import lv_text | from ..lv_validation import lv_text, pixels | ||||||
| from ..lvcode import lv | from ..lvcode import lv | ||||||
| from ..schemas import TEXT_SCHEMA | from ..schemas import TEXT_SCHEMA | ||||||
| from ..types import LvBoolean | from ..types import LvBoolean | ||||||
| @@ -16,7 +17,11 @@ class CheckboxType(WidgetType): | |||||||
|             CONF_CHECKBOX, |             CONF_CHECKBOX, | ||||||
|             LvBoolean("lv_checkbox_t"), |             LvBoolean("lv_checkbox_t"), | ||||||
|             (CONF_MAIN, CONF_INDICATOR), |             (CONF_MAIN, CONF_INDICATOR), | ||||||
|             TEXT_SCHEMA, |             TEXT_SCHEMA.extend( | ||||||
|  |                 { | ||||||
|  |                     Optional(CONF_PAD_COLUMN): pixels, | ||||||
|  |                 } | ||||||
|  |             ), | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|     async def to_code(self, w: Widget, config): |     async def to_code(self, w: Widget, config): | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| from esphome import automation | from esphome import automation | ||||||
| import esphome.codegen as cg | import esphome.codegen as cg | ||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
| from esphome.const import CONF_ID, CONF_ON_VALUE, CONF_ROW, CONF_TRIGGER_ID | from esphome.const import CONF_ID, CONF_ROW | ||||||
|  |  | ||||||
| from ..automation import action_to_code | from ..automation import action_to_code | ||||||
| from ..defines import ( | from ..defines import ( | ||||||
| @@ -29,6 +29,7 @@ lv_tileview_t = LvType( | |||||||
|     "lv_tileview_t", |     "lv_tileview_t", | ||||||
|     largs=[(lv_obj_t_ptr, "tile")], |     largs=[(lv_obj_t_ptr, "tile")], | ||||||
|     lvalue=lambda w: w.get_property("tile_act"), |     lvalue=lambda w: w.get_property("tile_act"), | ||||||
|  |     has_on_value=True, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| tile_spec = WidgetType("lv_tileview_tile_t", lv_tile_t, (CONF_MAIN,), {}) | tile_spec = WidgetType("lv_tileview_tile_t", lv_tile_t, (CONF_MAIN,), {}) | ||||||
| @@ -46,13 +47,6 @@ TILEVIEW_SCHEMA = cv.Schema( | |||||||
|                 }, |                 }, | ||||||
|             ) |             ) | ||||||
|         ), |         ), | ||||||
|         cv.Optional(CONF_ON_VALUE): automation.validate_automation( |  | ||||||
|             { |  | ||||||
|                 cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( |  | ||||||
|                     automation.Trigger.template(lv_obj_t_ptr) |  | ||||||
|                 ) |  | ||||||
|             } |  | ||||||
|         ), |  | ||||||
|     } |     } | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -337,11 +337,25 @@ lvgl: | |||||||
|         - tileview: |         - tileview: | ||||||
|             id: tileview_id |             id: tileview_id | ||||||
|             scrollbar_mode: active |             scrollbar_mode: active | ||||||
|  |             on_value: | ||||||
|  |               then: | ||||||
|  |                 - if: | ||||||
|  |                     condition: | ||||||
|  |                       lambda: return tile == id(tile_1); | ||||||
|  |                     then: | ||||||
|  |                       - logger.log: "tile 1 is now showing" | ||||||
|             tiles: |             tiles: | ||||||
|               - id: page_1 |               - id: tile_1 | ||||||
|                 row: 0 |                 row: 0 | ||||||
|                 column: 0 |                 column: 0 | ||||||
|                 dir: HOR |                 dir: ALL | ||||||
|  |                 widgets: | ||||||
|  |                   - obj: | ||||||
|  |                       bg_color: 0x000000 | ||||||
|  |               - id: tile_2 | ||||||
|  |                 row: 1 | ||||||
|  |                 column: 0 | ||||||
|  |                 dir: [VER, HOR] | ||||||
|                 widgets: |                 widgets: | ||||||
|                   - obj: |                   - obj: | ||||||
|                       bg_color: 0x000000 |                       bg_color: 0x000000 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user