mirror of
https://github.com/esphome/esphome.git
synced 2025-07-28 14:16:40 +00:00
[lvgl] Post-process size arguments in meter config (#9466)
Co-authored-by: clydebarrow <2366188+clydebarrow@users.noreply.github.com>
This commit is contained in:
parent
cd8e1548bf
commit
6f19808eff
@ -29,9 +29,9 @@ from ..defines import (
|
|||||||
)
|
)
|
||||||
from ..helpers import add_lv_use, lvgl_components_required
|
from ..helpers import add_lv_use, lvgl_components_required
|
||||||
from ..lv_validation import (
|
from ..lv_validation import (
|
||||||
angle,
|
|
||||||
get_end_value,
|
get_end_value,
|
||||||
get_start_value,
|
get_start_value,
|
||||||
|
lv_angle,
|
||||||
lv_bool,
|
lv_bool,
|
||||||
lv_color,
|
lv_color,
|
||||||
lv_float,
|
lv_float,
|
||||||
@ -162,7 +162,7 @@ SCALE_SCHEMA = cv.Schema(
|
|||||||
cv.Optional(CONF_RANGE_FROM, default=0.0): cv.float_,
|
cv.Optional(CONF_RANGE_FROM, default=0.0): cv.float_,
|
||||||
cv.Optional(CONF_RANGE_TO, default=100.0): cv.float_,
|
cv.Optional(CONF_RANGE_TO, default=100.0): cv.float_,
|
||||||
cv.Optional(CONF_ANGLE_RANGE, default=270): cv.int_range(0, 360),
|
cv.Optional(CONF_ANGLE_RANGE, default=270): cv.int_range(0, 360),
|
||||||
cv.Optional(CONF_ROTATION): angle,
|
cv.Optional(CONF_ROTATION): lv_angle,
|
||||||
cv.Optional(CONF_INDICATORS): cv.ensure_list(INDICATOR_SCHEMA),
|
cv.Optional(CONF_INDICATORS): cv.ensure_list(INDICATOR_SCHEMA),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -187,7 +187,7 @@ class MeterType(WidgetType):
|
|||||||
for scale_conf in config.get(CONF_SCALES, ()):
|
for scale_conf in config.get(CONF_SCALES, ()):
|
||||||
rotation = 90 + (360 - scale_conf[CONF_ANGLE_RANGE]) / 2
|
rotation = 90 + (360 - scale_conf[CONF_ANGLE_RANGE]) / 2
|
||||||
if CONF_ROTATION in scale_conf:
|
if CONF_ROTATION in scale_conf:
|
||||||
rotation = scale_conf[CONF_ROTATION] // 10
|
rotation = await lv_angle.process(scale_conf[CONF_ROTATION])
|
||||||
with LocalVariable(
|
with LocalVariable(
|
||||||
"meter_var", "lv_meter_scale_t", lv_expr.meter_add_scale(var)
|
"meter_var", "lv_meter_scale_t", lv_expr.meter_add_scale(var)
|
||||||
) as meter_var:
|
) as meter_var:
|
||||||
@ -205,21 +205,20 @@ class MeterType(WidgetType):
|
|||||||
var,
|
var,
|
||||||
meter_var,
|
meter_var,
|
||||||
ticks[CONF_COUNT],
|
ticks[CONF_COUNT],
|
||||||
ticks[CONF_WIDTH],
|
await size.process(ticks[CONF_WIDTH]),
|
||||||
ticks[CONF_LENGTH],
|
await size.process(ticks[CONF_LENGTH]),
|
||||||
color,
|
color,
|
||||||
)
|
)
|
||||||
if CONF_MAJOR in ticks:
|
if CONF_MAJOR in ticks:
|
||||||
major = ticks[CONF_MAJOR]
|
major = ticks[CONF_MAJOR]
|
||||||
color = await lv_color.process(major[CONF_COLOR])
|
|
||||||
lv.meter_set_scale_major_ticks(
|
lv.meter_set_scale_major_ticks(
|
||||||
var,
|
var,
|
||||||
meter_var,
|
meter_var,
|
||||||
major[CONF_STRIDE],
|
major[CONF_STRIDE],
|
||||||
major[CONF_WIDTH],
|
await size.process(major[CONF_WIDTH]),
|
||||||
major[CONF_LENGTH],
|
await size.process(major[CONF_LENGTH]),
|
||||||
color,
|
await lv_color.process(major[CONF_COLOR]),
|
||||||
major[CONF_LABEL_GAP],
|
await size.process(major[CONF_LABEL_GAP]),
|
||||||
)
|
)
|
||||||
for indicator in scale_conf.get(CONF_INDICATORS, ()):
|
for indicator in scale_conf.get(CONF_INDICATORS, ()):
|
||||||
(t, v) = next(iter(indicator.items()))
|
(t, v) = next(iter(indicator.items()))
|
||||||
@ -233,7 +232,11 @@ class MeterType(WidgetType):
|
|||||||
lv_assign(
|
lv_assign(
|
||||||
ivar,
|
ivar,
|
||||||
lv_expr.meter_add_needle_line(
|
lv_expr.meter_add_needle_line(
|
||||||
var, meter_var, v[CONF_WIDTH], color, v[CONF_R_MOD]
|
var,
|
||||||
|
meter_var,
|
||||||
|
await size.process(v[CONF_WIDTH]),
|
||||||
|
color,
|
||||||
|
await size.process(v[CONF_R_MOD]),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if t == CONF_ARC:
|
if t == CONF_ARC:
|
||||||
@ -241,7 +244,11 @@ class MeterType(WidgetType):
|
|||||||
lv_assign(
|
lv_assign(
|
||||||
ivar,
|
ivar,
|
||||||
lv_expr.meter_add_arc(
|
lv_expr.meter_add_arc(
|
||||||
var, meter_var, v[CONF_WIDTH], color, v[CONF_R_MOD]
|
var,
|
||||||
|
meter_var,
|
||||||
|
await size.process(v[CONF_WIDTH]),
|
||||||
|
color,
|
||||||
|
await size.process(v[CONF_R_MOD]),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if t == CONF_TICK_STYLE:
|
if t == CONF_TICK_STYLE:
|
||||||
@ -257,7 +264,7 @@ class MeterType(WidgetType):
|
|||||||
color_start,
|
color_start,
|
||||||
color_end,
|
color_end,
|
||||||
v[CONF_LOCAL],
|
v[CONF_LOCAL],
|
||||||
v[CONF_WIDTH],
|
size.process(v[CONF_WIDTH]),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if t == CONF_IMAGE:
|
if t == CONF_IMAGE:
|
||||||
|
@ -919,21 +919,21 @@ lvgl:
|
|||||||
text_color: 0xFFFFFF
|
text_color: 0xFFFFFF
|
||||||
scales:
|
scales:
|
||||||
- ticks:
|
- ticks:
|
||||||
width: 1
|
width: !lambda return 1;
|
||||||
count: 61
|
count: 61
|
||||||
length: 20
|
length: 20%
|
||||||
color: 0xFFFFFF
|
color: 0xFFFFFF
|
||||||
range_from: 0
|
range_from: 0
|
||||||
range_to: 60
|
range_to: 60
|
||||||
angle_range: 360
|
angle_range: 360
|
||||||
rotation: 270
|
rotation: !lambda return 2700;
|
||||||
indicators:
|
indicators:
|
||||||
- line:
|
- line:
|
||||||
opa: 50%
|
opa: 50%
|
||||||
id: minute_hand
|
id: minute_hand
|
||||||
color: 0xFF0000
|
color: 0xFF0000
|
||||||
r_mod: -1
|
r_mod: !lambda return -1;
|
||||||
width: 3
|
width: !lambda return 3;
|
||||||
-
|
-
|
||||||
angle_range: 330
|
angle_range: 330
|
||||||
rotation: 300
|
rotation: 300
|
||||||
|
Loading…
x
Reference in New Issue
Block a user