[lvgl] Allow padding to be negative (#8671)

This commit is contained in:
Clyde Stubbs 2025-05-05 10:30:11 +10:00 committed by Jesse Hills
parent 37a2cb07d1
commit 1294e8ccd5
No known key found for this signature in database
GPG Key ID: BEAAE804EFD8E83A
5 changed files with 31 additions and 20 deletions

View File

@ -16,7 +16,7 @@ from esphome.const import (
) )
from esphome.core import CORE, ID, Lambda from esphome.core import CORE, ID, Lambda
from esphome.cpp_generator import MockObj 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.helpers import cpp_string_escape
from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor
@ -263,6 +263,15 @@ def pixels_validator(value):
pixels = LValidator(pixels_validator, uint32, retmapper=literal) 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): def zoom_validator(value):
value = cv.float_range(0.1, 10.0)(value) value = cv.float_range(0.1, 10.0)(value)
return value return value

View File

@ -156,13 +156,13 @@ STYLE_PROPS = {
"opa_layered": lvalid.opacity, "opa_layered": lvalid.opacity,
"outline_color": lvalid.lv_color, "outline_color": lvalid.lv_color,
"outline_opa": lvalid.opacity, "outline_opa": lvalid.opacity,
"outline_pad": lvalid.pixels, "outline_pad": lvalid.padding,
"outline_width": lvalid.pixels, "outline_width": lvalid.pixels,
"pad_all": lvalid.pixels, "pad_all": lvalid.padding,
"pad_bottom": lvalid.pixels, "pad_bottom": lvalid.padding,
"pad_left": lvalid.pixels, "pad_left": lvalid.padding,
"pad_right": lvalid.pixels, "pad_right": lvalid.padding,
"pad_top": lvalid.pixels, "pad_top": lvalid.padding,
"shadow_color": lvalid.lv_color, "shadow_color": lvalid.lv_color,
"shadow_ofs_x": lvalid.lv_int, "shadow_ofs_x": lvalid.lv_int,
"shadow_ofs_y": 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_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_ROW): lvalid.padding,
cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding,
} }
) )
@ -370,8 +370,8 @@ LAYOUT_SCHEMA = {
cv.Required(df.CONF_GRID_COLUMNS): [grid_spec], cv.Required(df.CONF_GRID_COLUMNS): [grid_spec],
cv.Optional(df.CONF_GRID_COLUMN_ALIGN): grid_alignments, cv.Optional(df.CONF_GRID_COLUMN_ALIGN): grid_alignments,
cv.Optional(df.CONF_GRID_ROW_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_ROW): lvalid.padding,
cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding,
}, },
df.TYPE_FLEX: { df.TYPE_FLEX: {
cv.Optional( 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_MAIN, default="start"): flex_alignments,
cv.Optional(df.CONF_FLEX_ALIGN_CROSS, 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_FLEX_ALIGN_TRACK, default="start"): flex_alignments,
cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, cv.Optional(df.CONF_PAD_ROW): lvalid.padding,
cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding,
}, },
}, },
lower=True, lower=True,
@ -427,8 +427,8 @@ ALL_STYLES = {
**STYLE_PROPS, **STYLE_PROPS,
**GRID_CELL_SCHEMA, **GRID_CELL_SCHEMA,
**FLEX_OBJ_SCHEMA, **FLEX_OBJ_SCHEMA,
cv.Optional(df.CONF_PAD_ROW): lvalid.pixels, cv.Optional(df.CONF_PAD_ROW): lvalid.padding,
cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels, cv.Optional(df.CONF_PAD_COLUMN): lvalid.padding,
} }

View File

@ -19,7 +19,7 @@ from ..defines import (
CONF_SELECTED, CONF_SELECTED,
) )
from ..helpers import lvgl_components_required 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 ..lvcode import lv, lv_add, lv_expr
from ..schemas import automation_schema from ..schemas import automation_schema
from ..types import ( from ..types import (
@ -59,8 +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_ROW): padding,
cv.Optional(CONF_PAD_COLUMN): pixels, cv.Optional(CONF_PAD_COLUMN): padding,
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(

View File

@ -2,7 +2,7 @@ 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, CONF_PAD_COLUMN 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 ..lvcode import lv
from ..schemas import TEXT_SCHEMA from ..schemas import TEXT_SCHEMA
from ..types import LvBoolean from ..types import LvBoolean
@ -19,7 +19,7 @@ class CheckboxType(WidgetType):
(CONF_MAIN, CONF_INDICATOR), (CONF_MAIN, CONF_INDICATOR),
TEXT_SCHEMA.extend( TEXT_SCHEMA.extend(
{ {
Optional(CONF_PAD_COLUMN): pixels, Optional(CONF_PAD_COLUMN): padding,
} }
), ),
) )

View File

@ -641,6 +641,8 @@ lvgl:
knob: knob:
radius: 1 radius: 1
width: "4" width: "4"
pad_left: -5
pad_top: 5
height: 10% height: 10%
bg_color: 0x000000 bg_color: 0x000000
width: 100% width: 100%