This commit is contained in:
J. Nick Koston
2025-12-30 11:14:41 -10:00
parent cc79334da7
commit 89e0797657

View File

@@ -2,7 +2,6 @@
#include "esphome/core/component.h"
#include "esphome/core/color.h"
#include "esphome/core/string_ref.h"
#include "esphome/components/display/display_buffer.h"
#include "esphome/components/light/addressable_light.h"
@@ -26,14 +25,13 @@ class AddressableLightDisplay : public display::DisplayBuffer {
if (enabled_ && !enabled) { // enabled -> disabled
// - Tell the parent light to refresh, effectively wiping the display. Also
// restores the previous effect (if any).
if (this->last_effect_.has_value()) {
auto &ref = *this->last_effect_;
light_state_->make_call().set_effect(ref.c_str(), ref.size()).perform();
if (this->last_effect_index_.has_value()) {
light_state_->make_call().set_effect(*this->last_effect_index_).perform();
}
} else if (!enabled_ && enabled) { // disabled -> enabled
// - Save the current effect (pointer to rodata, valid for program lifetime).
this->last_effect_ = light_state_->get_effect_name_ref();
// - Save the current effect index.
this->last_effect_index_ = light_state_->get_current_effect_index();
// - Disable any current effect.
light_state_->make_call().set_effect(0).perform();
}
@@ -60,7 +58,7 @@ class AddressableLightDisplay : public display::DisplayBuffer {
int32_t width_;
int32_t height_;
std::vector<Color> addressable_light_buffer_;
optional<StringRef> last_effect_;
optional<uint32_t> last_effect_index_;
optional<std::function<int(int, int)>> pixel_mapper_f_;
};
} // namespace addressable_light