diff --git a/esphome/components/lvgl/lv_validation.py b/esphome/components/lvgl/lv_validation.py index a3b7cc8ed3..3755d35d27 100644 --- a/esphome/components/lvgl/lv_validation.py +++ b/esphome/components/lvgl/lv_validation.py @@ -16,7 +16,7 @@ from esphome.const import ( ) from esphome.core import CORE, ID, Lambda from esphome.cpp_generator import MockObj -from esphome.cpp_types import ESPTime, uint32 +from esphome.cpp_types import ESPTime, int32, uint32 from esphome.helpers import cpp_string_escape from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor @@ -263,6 +263,15 @@ def pixels_validator(value): pixels = LValidator(pixels_validator, uint32, retmapper=literal) +def padding_validator(value): + if isinstance(value, str) and value.lower().endswith("px"): + value = value[:-2] + return cv.int_(value) + + +padding = LValidator(padding_validator, int32, retmapper=literal) + + def zoom_validator(value): value = cv.float_range(0.1, 10.0)(value) return value diff --git a/esphome/components/lvgl/schemas.py b/esphome/components/lvgl/schemas.py index 051dbe5e0e..d0dde01421 100644 --- a/esphome/components/lvgl/schemas.py +++ b/esphome/components/lvgl/schemas.py @@ -156,13 +156,13 @@ STYLE_PROPS = { "opa_layered": lvalid.opacity, "outline_color": lvalid.lv_color, "outline_opa": lvalid.opacity, - "outline_pad": lvalid.pixels, + "outline_pad": lvalid.padding, "outline_width": lvalid.pixels, - "pad_all": lvalid.pixels, - "pad_bottom": lvalid.pixels, - "pad_left": lvalid.pixels, - "pad_right": lvalid.pixels, - "pad_top": lvalid.pixels, + "pad_all": lvalid.padding, + "pad_bottom": lvalid.padding, + "pad_left": lvalid.padding, + "pad_right": lvalid.padding, + "pad_top": lvalid.padding, "shadow_color": lvalid.lv_color, "shadow_ofs_x": lvalid.lv_int, "shadow_ofs_y": lvalid.lv_int, @@ -226,8 +226,8 @@ FULL_STYLE_SCHEMA = STYLE_SCHEMA.extend( { cv.Optional(df.CONF_GRID_CELL_X_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, + cv.Optional(df.CONF_PAD_ROW): lvalid.padding, + cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding, } ) @@ -370,8 +370,8 @@ LAYOUT_SCHEMA = { cv.Required(df.CONF_GRID_COLUMNS): [grid_spec], cv.Optional(df.CONF_GRID_COLUMN_ALIGN): grid_alignments, cv.Optional(df.CONF_GRID_ROW_ALIGN): grid_alignments, - cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, - cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, + cv.Optional(df.CONF_PAD_ROW): lvalid.padding, + cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding, }, df.TYPE_FLEX: { cv.Optional( @@ -380,8 +380,8 @@ LAYOUT_SCHEMA = { cv.Optional(df.CONF_FLEX_ALIGN_MAIN, default="start"): flex_alignments, cv.Optional(df.CONF_FLEX_ALIGN_CROSS, default="start"): flex_alignments, cv.Optional(df.CONF_FLEX_ALIGN_TRACK, default="start"): flex_alignments, - cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, - cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, + cv.Optional(df.CONF_PAD_ROW): lvalid.padding, + cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding, }, }, lower=True, @@ -427,8 +427,8 @@ 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, + cv.Optional(df.CONF_PAD_ROW): lvalid.padding, + cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding, } diff --git a/esphome/components/lvgl/widgets/buttonmatrix.py b/esphome/components/lvgl/widgets/buttonmatrix.py index 0ba1fe4ae1..aa33be722c 100644 --- a/esphome/components/lvgl/widgets/buttonmatrix.py +++ b/esphome/components/lvgl/widgets/buttonmatrix.py @@ -19,7 +19,7 @@ from ..defines import ( CONF_SELECTED, ) from ..helpers import lvgl_components_required -from ..lv_validation import key_code, lv_bool, pixels +from ..lv_validation import key_code, lv_bool, padding from ..lvcode import lv, lv_add, lv_expr from ..schemas import automation_schema from ..types import ( @@ -59,8 +59,8 @@ BUTTONMATRIX_BUTTON_SCHEMA = cv.Schema( BUTTONMATRIX_SCHEMA = cv.Schema( { cv.Optional(CONF_ONE_CHECKED, default=False): lv_bool, - cv.Optional(CONF_PAD_ROW): pixels, - cv.Optional(CONF_PAD_COLUMN): pixels, + cv.Optional(CONF_PAD_ROW): padding, + cv.Optional(CONF_PAD_COLUMN): padding, cv.GenerateID(CONF_BUTTON_TEXT_LIST_ID): cv.declare_id(char_ptr), cv.Required(CONF_ROWS): cv.ensure_list( cv.Schema( diff --git a/esphome/components/lvgl/widgets/checkbox.py b/esphome/components/lvgl/widgets/checkbox.py index 75f4142eb1..c344fbfe75 100644 --- a/esphome/components/lvgl/widgets/checkbox.py +++ b/esphome/components/lvgl/widgets/checkbox.py @@ -2,7 +2,7 @@ from esphome.config_validation import Optional from esphome.const import CONF_TEXT from ..defines import CONF_INDICATOR, CONF_MAIN, CONF_PAD_COLUMN -from ..lv_validation import lv_text, pixels +from ..lv_validation import lv_text, padding from ..lvcode import lv from ..schemas import TEXT_SCHEMA from ..types import LvBoolean @@ -19,7 +19,7 @@ class CheckboxType(WidgetType): (CONF_MAIN, CONF_INDICATOR), TEXT_SCHEMA.extend( { - Optional(CONF_PAD_COLUMN): pixels, + Optional(CONF_PAD_COLUMN): padding, } ), ) diff --git a/tests/components/lvgl/lvgl-package.yaml b/tests/components/lvgl/lvgl-package.yaml index a0b7dd096f..d0e281e583 100644 --- a/tests/components/lvgl/lvgl-package.yaml +++ b/tests/components/lvgl/lvgl-package.yaml @@ -641,6 +641,8 @@ lvgl: knob: radius: 1 width: "4" + pad_left: -5 + pad_top: 5 height: 10% bg_color: 0x000000 width: 100%