mirror of
https://github.com/esphome/esphome.git
synced 2024-11-26 00:48:19 +01:00
Added support for setting the current animation frame (#3681)
This commit is contained in:
parent
fef39b9fbe
commit
77fb02729e
2 changed files with 18 additions and 0 deletions
|
@ -591,6 +591,18 @@ void Animation::prev_frame() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Animation::set_frame(int frame) {
|
||||||
|
unsigned abs_frame = abs(frame);
|
||||||
|
|
||||||
|
if (abs_frame < this->animation_frame_count_) {
|
||||||
|
if (frame >= 0) {
|
||||||
|
this->current_frame_ = frame;
|
||||||
|
} else {
|
||||||
|
this->current_frame_ = this->animation_frame_count_ - abs_frame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DisplayPage::DisplayPage(display_writer_t writer) : writer_(std::move(writer)) {}
|
DisplayPage::DisplayPage(display_writer_t writer) : writer_(std::move(writer)) {}
|
||||||
void DisplayPage::show() { this->parent_->show_page(this); }
|
void DisplayPage::show() { this->parent_->show_page(this); }
|
||||||
void DisplayPage::show_next() { this->next_->show(); }
|
void DisplayPage::show_next() { this->next_->show(); }
|
||||||
|
|
|
@ -491,6 +491,12 @@ class Animation : public Image {
|
||||||
void next_frame();
|
void next_frame();
|
||||||
void prev_frame();
|
void prev_frame();
|
||||||
|
|
||||||
|
/** Selects a specific frame within the animation.
|
||||||
|
*
|
||||||
|
* @param frame If possitive, advance to the frame. If negative, recede to that frame from the end frame.
|
||||||
|
*/
|
||||||
|
void set_frame(int frame);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int current_frame_;
|
int current_frame_;
|
||||||
int animation_frame_count_;
|
int animation_frame_count_;
|
||||||
|
|
Loading…
Reference in a new issue