mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-08 12:28:12 +02:00
throbber: Don't skip last frame when waiting for end.
If the stop_trigger is set and we are waiting for the last frame to stop the animation, make sure we don't accidentally skip the last frame. It could happen if the machine is busy and can't keep up with the frames or when the animation has more than 60 frames (30FPS * 2 seconds).
This commit is contained in:
parent
a588b3f7d1
commit
121783eff1
1 changed files with 10 additions and 1 deletions
|
|
@ -144,6 +144,7 @@ animate_at_time (ply_throbber_t *throbber,
|
|||
ply_pixel_buffer_t *const *frames;
|
||||
bool should_continue;
|
||||
double percent_in_sequence;
|
||||
int last_frame_number;
|
||||
|
||||
number_of_frames = ply_array_get_size (throbber->frames);
|
||||
|
||||
|
|
@ -152,11 +153,19 @@ animate_at_time (ply_throbber_t *throbber,
|
|||
|
||||
should_continue = true;
|
||||
percent_in_sequence = fmod (time, THROBBER_DURATION) / THROBBER_DURATION;
|
||||
last_frame_number = throbber->frame_number;
|
||||
throbber->frame_number = (int) (number_of_frames * percent_in_sequence);
|
||||
|
||||
if (throbber->stop_trigger != NULL)
|
||||
if (throbber->stop_trigger != NULL) {
|
||||
/* If we are trying to stop, make sure we don't skip the last
|
||||
* frame and loop around. Clamp it to the last frame.
|
||||
*/
|
||||
if (last_frame_number > throbber->frame_number)
|
||||
throbber->frame_number = number_of_frames - 1;
|
||||
|
||||
if (throbber->frame_number == number_of_frames - 1)
|
||||
should_continue = false;
|
||||
}
|
||||
|
||||
frames = (ply_pixel_buffer_t *const *) ply_array_get_pointer_elements (throbber->frames);
|
||||
ply_pixel_buffer_get_size (frames[throbber->frame_number], &throbber->frame_area);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue