mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 12:15:33 +01:00
Provide a bounds to the DisplayRenderingPanel
This allows users to customise their drawing depending on the available space
This commit is contained in:
parent
3fabe545ee
commit
2fc6714c80
@ -19,7 +19,7 @@ display::Rect DisplayRenderingPanel::measure_item_internal(display::Display *dis
|
||||
}
|
||||
|
||||
void DisplayRenderingPanel::render_internal(display::Display *display, display::Rect bounds) {
|
||||
this->lambda_(*display);
|
||||
this->lambda_(*display, bounds);
|
||||
}
|
||||
|
||||
} // namespace graphical_layout
|
||||
|
@ -9,8 +9,7 @@
|
||||
namespace esphome {
|
||||
namespace graphical_layout {
|
||||
|
||||
/* See display.h for original declaration */
|
||||
using display_writer_t = std::function<void(display::Display &)>;
|
||||
using display_panel_writer_t = std::function<void(display::Display &, display::Rect)>;
|
||||
|
||||
/** The DisplayRenderingPanel is a UI item that renders a custom lambda to the display whilst
|
||||
* participating in the layout process
|
||||
@ -23,12 +22,12 @@ class DisplayRenderingPanel : public LayoutItem {
|
||||
|
||||
template<typename V> void set_width(V width) { this->width_ = width; };
|
||||
template<typename V> void set_height(V height) { this->height_ = height; };
|
||||
void set_lambda(display_writer_t lambda) { this->lambda_ = std::move(lambda); };
|
||||
void set_lambda(display_panel_writer_t lambda) { this->lambda_ = std::move(lambda); };
|
||||
|
||||
protected:
|
||||
TemplatableValue<int> width_{0};
|
||||
TemplatableValue<int> height_{0};
|
||||
display_writer_t lambda_{nullptr};
|
||||
display_panel_writer_t lambda_{nullptr};
|
||||
};
|
||||
|
||||
} // namespace graphical_layout
|
||||
|
@ -1,9 +1,10 @@
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_WIDTH, CONF_HEIGHT, CONF_LAMBDA
|
||||
from esphome.components.display import DisplayRef
|
||||
from esphome.components.display import display_ns, DisplayRef
|
||||
|
||||
graphical_layout_ns = cg.esphome_ns.namespace("graphical_layout")
|
||||
Rect = display_ns.class_("Rect")
|
||||
DisplayRenderingPanel = graphical_layout_ns.class_("DisplayRenderingPanel")
|
||||
|
||||
CONF_DISPLAY_RENDERING_PANEL = "display_rendering_panel"
|
||||
@ -26,11 +27,15 @@ async def config_to_layout_item(pvariable_builder, item_config, child_item_build
|
||||
width = await cg.templatable(item_config[CONF_WIDTH], args=[], output_type=cg.int_)
|
||||
cg.add(var.set_width(width))
|
||||
|
||||
height = await cg.templatable(item_config[CONF_HEIGHT], args=[], output_type=cg.int_)
|
||||
height = await cg.templatable(
|
||||
item_config[CONF_HEIGHT], args=[], output_type=cg.int_
|
||||
)
|
||||
cg.add(var.set_height(height))
|
||||
|
||||
lambda_ = await cg.process_lambda(
|
||||
item_config[CONF_LAMBDA], [(DisplayRef, "it")], return_type=cg.void
|
||||
item_config[CONF_LAMBDA],
|
||||
[(DisplayRef, "it"), (Rect, "bounds")],
|
||||
return_type=cg.void,
|
||||
)
|
||||
cg.add(var.set_lambda(lambda_))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user