Skip to content

Commit 20fef5b

Browse files
authored
Merge pull request #4822 from esphome/bump-2025.4.0b2
2025.4.0b2
2 parents 29c15cd + 62315ee commit 20fef5b

File tree

8 files changed

+173
-5
lines changed

8 files changed

+173
-5
lines changed

Doxygen

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
3838
# could be handy for archiving the generated documentation or if some version
3939
# control system is used.
4040

41-
PROJECT_NUMBER = 2025.4.0b1
41+
PROJECT_NUMBER = 2025.4.0b2
4242

4343
# Using the PROJECT_BRIEF tag one can provide an optional one line description
4444
# for a project that appears at the top of each page and should give viewer a

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
ESPHOME_PATH = ../esphome
2-
ESPHOME_REF = 2025.4.0b1
2+
ESPHOME_REF = 2025.4.0b2
33
PAGEFIND_VERSION=1.1.1
44
PAGEFIND=pagefind
55
NET_PAGEFIND=../pagefindbin/pagefind

_static/version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025.4.0b1
1+
2025.4.0b2

changelog/2025.4.0.rst

+24
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ Breaking Changes
3030

3131
- Rework max connections for BLE to avoid exceeding the hard limit :esphomepr:`8303` by :ghuser:`bdraco` (breaking-change)
3232

33+
Beta Changes
34+
^^^^^^^^^^^^
35+
36+
- [lvgl] Fix use of image without canvas (Bugfix) :esphomepr:`8540` by :ghuser:`clydebarrow`
37+
- Include MAC address in noise hello :esphomepr:`8551` by :ghuser:`bdraco`
38+
- [axs15231] Don't overwrite manual dimensions :esphomepr:`8553` by :ghuser:`clydebarrow`
39+
- [lvgl] Fix initial focus on roller :esphomepr:`8547` by :ghuser:`clydebarrow`
40+
- [lvgl] Add restore_value to select and number :esphomepr:`8494` by :ghuser:`clydebarrow`
41+
- Speaker-Media-Player: Fix potential deadlock in audio pipeline :esphomepr:`8548` by :ghuser:`gnumpi`
42+
- [lvgl] Ensure captured lambdas are in correct order :esphomepr:`8560` by :ghuser:`clydebarrow`
43+
- Bump aioesphomeapi from 29.9.0 to 29.10.0 :esphomepr:`8562` by :ghuser:`dependabot[bot]`
44+
- Bump zeroconf from 0.146.3 to 0.146.4 :esphomepr:`8563` by :ghuser:`dependabot[bot]`
45+
- Bump esphome-dashboard to 20250415.0 :esphomepr:`8565` by :ghuser:`swoboda1337`
46+
3347
All changes
3448
^^^^^^^^^^^
3549

@@ -90,6 +104,16 @@ All changes
90104
- Bump pytest from 8.2.0 to 8.3.5 :esphomepr:`8528` by :ghuser:`dependabot[bot]`
91105
- real_time_clock: Apply timezone immediately in set_timezone() :esphomepr:`8531` by :ghuser:`dwmw2`
92106
- [lvgl] Implement canvas widget :esphomepr:`8504` by :ghuser:`clydebarrow`
107+
- [lvgl] Fix use of image without canvas (Bugfix) :esphomepr:`8540` by :ghuser:`clydebarrow`
108+
- Include MAC address in noise hello :esphomepr:`8551` by :ghuser:`bdraco`
109+
- [axs15231] Don't overwrite manual dimensions :esphomepr:`8553` by :ghuser:`clydebarrow`
110+
- [lvgl] Fix initial focus on roller :esphomepr:`8547` by :ghuser:`clydebarrow`
111+
- [lvgl] Add restore_value to select and number :esphomepr:`8494` by :ghuser:`clydebarrow`
112+
- Speaker-Media-Player: Fix potential deadlock in audio pipeline :esphomepr:`8548` by :ghuser:`gnumpi`
113+
- [lvgl] Ensure captured lambdas are in correct order :esphomepr:`8560` by :ghuser:`clydebarrow`
114+
- Bump aioesphomeapi from 29.9.0 to 29.10.0 :esphomepr:`8562` by :ghuser:`dependabot[bot]`
115+
- Bump zeroconf from 0.146.3 to 0.146.4 :esphomepr:`8563` by :ghuser:`dependabot[bot]`
116+
- Bump esphome-dashboard to 20250415.0 :esphomepr:`8565` by :ghuser:`swoboda1337`
93117

94118
Past Changelogs
95119
---------------

components/lvgl/images/canvas.png

20.4 KB
Loading

components/lvgl/widgets.rst

+141
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,146 @@ The button matrix widget is a lightweight way to display multiple buttons in row
607607

608608
The Button Matrix widget supports the :ref:`key_collector` to collect the button presses as key press sequences for further automations. Check out :ref:`lvgl-cookbook-keypad` for an example.
609609

610+
``canvas``
611+
-------------
612+
613+
The canvas widget provides a surface for custom drawing operations. It allows you to draw shapes, text, images and perform pixel-level manipulations.
614+
All options are templatable.
615+
Where a list of points is required, this can be provided in the form of a list of dictionaries, each with templatable ``x`` and ``y`` keys, or as a shorthand ``x,y`` pair (constant integers only.)
616+
617+
.. figure:: /components/lvgl/images/canvas.png
618+
:align: center
619+
620+
**Configuration variables:**
621+
622+
- **width** (**Required**, int): Width of the canvas in pixels.
623+
- **height** (**Required**, int): Height of the canvas in pixels.
624+
- **transparent** (*Optional*, boolean): Enable alpha channel support. Defaults to ``false``.
625+
626+
**Actions:**
627+
628+
- ``lvgl.canvas.fill`` fills the entire canvas with a color:
629+
- **id** (**Required**): The ID of the canvas widget.
630+
- **color** (**Required**, :ref:`color <lvgl-color>`): Fill color.
631+
- **opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Opacity of the fill. Defaults to ``COVER``.
632+
633+
- ``lvgl.canvas.set_pixels`` sets individual pixels:
634+
- **id** (**Required**): The ID of the canvas widget.
635+
- **color** (**Required**, :ref:`color <lvgl-color>`): Pixel color.
636+
- **opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Opacity of the pixels. Defaults to ``COVER``.
637+
- **points** (**Required**, list): List of points to set, each with:
638+
- **x** (**Required**, int): X coordinate.
639+
- **y** (**Required**, int): Y coordinate.
640+
641+
- ``lvgl.canvas.draw_rectangle`` draws a rectangle:
642+
- **id** (**Required**): The ID of the canvas widget.
643+
- **x** (**Required**, int): X coordinate.
644+
- **y** (**Required**, int): Y coordinate.
645+
- **width** (**Required**, int): Width in pixels
646+
- **height** (**Required**, int): Height in pixels
647+
- **radius** (*Optional*, int): Corner radius.
648+
- **bg_color** (*Optional*, :ref:`color <lvgl-color>`): Background color.
649+
- **bg_opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Background opacity. Defaults to ``COVER``.
650+
- **border_color** (*Optional*, :ref:`color <lvgl-color>`): Border color.
651+
- **border_width** (*Optional*, int): Border width.
652+
- **border_opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Border opacity. Defaults to ``COVER``.
653+
- **outline_color** (*Optional*, :ref:`color <lvgl-color>`): Outline color.
654+
- **outline_width** (*Optional*, int): Outline width.
655+
- **outline_opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Opacity of the outline. Defaults to ``COVER``.
656+
- **outline_pad** (*Optional*, int): Padding of the outline. Defaults to ``0``.
657+
- **shadow_color** (*Optional*, :ref:`color <lvgl-color>`): Shadow color.
658+
- **shadow_width** (*Optional*, int): Shadow width.
659+
- **shadow_opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Opacity of the shadow. Defaults to ``COVER``.
660+
- **shadow_offset_x** (*Optional*, int): Shadow offset X.
661+
- **shadow_offset_y** (*Optional*, int): Shadow offset Y.
662+
- **shadow_spread** (*Optional*, int): Shadow spread.
663+
664+
- ``lvgl.canvas.draw_polygon`` draws a polygon:
665+
- **id** (**Required**): The ID of the canvas widget.
666+
- **points** (**Required**, list): List of points forming the polygon vertices.
667+
- Other options as for ``lvgl.canvas.draw_rectangle``.
668+
669+
- ``lvgl.canvas.draw_text`` draws text:
670+
- **id** (**Required**): The ID of the canvas widget.
671+
- **x** (**Required**, int): X coordinate.
672+
- **y** (**Required**, int): Y coordinate.
673+
- **text** (**Required**, string): Text to draw.
674+
- **max_width** (**Required**, int): Max width in pixels.
675+
- **align** (*Optional*, enum): Alignment of the text relative to ``x`` and ``max_width``. One of ``LEFT``, ``CENTER``, ``RIGHT``, ``AUTO``.
676+
- **color** (*Optional*, :ref:`color <lvgl-color>`): Text color.
677+
- **opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Text opacity. Defaults to ``COVER``.
678+
- **font** (*Optional*, string): Font to use.
679+
- **decor** (*Optional*, list): Choose decorations for the text: ``NONE``, ``UNDERLINE``, ``STRIKETHROUGH`` (multiple can be specified as YAML list). Defaults to ``NONE``.
680+
- **letter_space** (*Optional*, int16): Extra character spacing of the text. Defaults to ``0``.
681+
- **line_space** (*Optional*, int16): Line spacing of the text. Defaults to ``0``.
682+
683+
- ``lvgl.canvas.draw_line`` draws a line:
684+
- **id** (**Required**): The ID of the canvas widget.
685+
- **points** (**Required**, list): List of points forming the line, each with:
686+
- **x** (**Required**, int): X coordinate.
687+
- **y** (**Required**, int): Y coordinate.
688+
- **color** (*Optional*, :ref:`color <lvgl-color>`): Line color.
689+
- **width** (*Optional*, int): Line width.
690+
- **opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Line opacity. Defaults to ``COVER``.
691+
- **round_start** (*Optional*, boolean): Round the start of the line. Defaults to ``false``.
692+
- **round_end** (*Optional*, boolean): Round the end of the line. Defaults to ``false``.
693+
694+
- ``lvgl.canvas.draw_arc`` draws an arc:
695+
- **id** (**Required**): The ID of the canvas widget.
696+
- **x** (**Required**, int): Center X coordinate.
697+
- **y** (**Required**, int): Center Y coordinate.
698+
- **radius** (**Required**, int): Arc radius.
699+
- **start_angle** (**Required**, 0-360): Start angle.
700+
- **end_angle** (**Required**, 0-360): End angle.
701+
- **color** (*Optional*, :ref:`color <lvgl-color>`): Arc color.
702+
- **width** (*Optional*, int): Arc line width.
703+
- **opa** (*Optional*, :ref:`opacity <lvgl-opacity>`): Arc opacity. Defaults to ``COVER``.
704+
- **rounded** (*Optional*, boolean): Round the start/end of the arc.
705+
706+
- ``lvgl.canvas.draw_image`` draws an image:
707+
- **id** (**Required**): The ID of the canvas widget.
708+
- **x** (**Required**, int): X coordinate.
709+
- **y** (**Required**, int): Y coordinate.
710+
- **src** (**Required**, string): Image source.
711+
- **angle** (*Optional*, 0-360): Rotation angle.
712+
- **zoom** (*Optional*, float): Zoom factor 0.1-10.0 (default 1.0)
713+
- **pivot_x** (*Optional*, int): X pivot point for rotation.
714+
- **pivot_y** (*Optional*, int): Y pivot point for rotation.
715+
716+
.. code-block:: yaml
717+
718+
# Example widget:
719+
- canvas:
720+
id: my_canvas
721+
width: 240
722+
height: 240
723+
transparent: false
724+
725+
# Example drawing actions, executed at startup:
726+
on_boot:
727+
then:
728+
# Fill canvas with white
729+
- lvgl.canvas.fill:
730+
id: my_canvas
731+
color: white
732+
# Draw a blue rectangle
733+
- lvgl.canvas.draw_rectangle:
734+
id: my_canvas
735+
x: 10
736+
y: 10
737+
width: 100
738+
height: 50
739+
bg_color: blue
740+
# Draw some red text
741+
- lvgl.canvas.draw_text:
742+
id: my_canvas
743+
x: 20
744+
y: 20
745+
text: "Hello World"
746+
max_width: 100
747+
color: red
748+
749+
610750
.. _lvgl-widget-checkbox:
611751

612752
``checkbox``
@@ -1444,6 +1584,7 @@ The ``slider`` can be also integrated as :doc:`Number </components/number/lvgl>`
14441584

14451585
See :ref:`lvgl-cookbook-bright` and :ref:`lvgl-cookbook-volume` for examples which demonstrate how to use a slider to control entities in Home Assistant.
14461586

1587+
.. _lvgl-widget-canvas:
14471588
.. _lvgl-widget-spinbox:
14481589

14491590
``spinbox``

conf.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
# The short X.Y version.
7575
version = "2025.4"
7676
# The full version, including alpha/beta/rc tags.
77-
release = "2025.4.0b1"
77+
release = "2025.4.0b2"
7878

7979
# The language for content autogenerated by Sphinx. Refer to documentation
8080
# for a list of supported languages.

guides/supporters.rst

+4-1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ Contributors
172172
- `august huber (@augs) <https://github.com/augs>`__
173173
- `aus (@aus) <https://github.com/aus>`__
174174
- `AustinMorris (@AustinMorris) <https://github.com/AustinMorris>`__
175+
- `Aviad Raviv (@aviadra) <https://github.com/aviadra>`__
175176
- `Avirsaam (@Avirsaam) <https://github.com/Avirsaam>`__
176177
- `Arsène von Wyss (@avonwyss) <https://github.com/avonwyss>`__
177178
- `Andrew Weddle (@aweddle2) <https://github.com/aweddle2>`__
@@ -281,6 +282,7 @@ Contributors
281282
- `Brian Hanifin (@brianhanifin) <https://github.com/brianhanifin>`__
282283
- `brianrjones69 (@brianrjones69) <https://github.com/brianrjones69>`__
283284
- `brickets (@brickets) <https://github.com/brickets>`__
285+
- `Ruben Brites (@Brites89) <https://github.com/Brites89>`__
284286
- `Ben Brooks (@brooksben11) <https://github.com/brooksben11>`__
285287
- `brtchip-tuannguyen (@brtchip-tuannguyen) <https://github.com/brtchip-tuannguyen>`__
286288
- `Vaclav (@bruxy70) <https://github.com/bruxy70>`__
@@ -1088,6 +1090,7 @@ Contributors
10881090
- `Kuba Szczodrzyński (@kuba2k2) <https://github.com/kuba2k2>`__
10891091
- `Jakub Šimo (@kubik369) <https://github.com/kubik369>`__
10901092
- `Mark Kuchel (@kuchel77) <https://github.com/kuchel77>`__
1093+
- `Kurt Fuchs (@KurtFuchs) <https://github.com/KurtFuchs>`__
10911094
- `kvvoff (@kvvoff) <https://github.com/kvvoff>`__
10921095
- `Ken Davidson (@kwdavidson) <https://github.com/kwdavidson>`__
10931096
- `Kyle Hendricks (@kylehendricks) <https://github.com/kylehendricks>`__
@@ -2108,4 +2111,4 @@ Contributors
21082111
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
21092112
- `Zynth-dev (@Zynth-dev) <https://github.com/Zynth-dev>`__
21102113

2111-
*This page was last updated April 9, 2025.*
2114+
*This page was last updated April 15, 2025.*

0 commit comments

Comments
 (0)