Added support for setting the current animation frame (#3681)

This commit is contained in:
davestubbs 2022-08-08 23:28:05 +01:00 committed by GitHub
parent fef39b9fbe
commit 77fb02729e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 0 deletions

View file

@ -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(); }

View file

@ -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_;