static void timer_handler(void *context) { uint32_t next_delay; // Advance to the next APNG frame, and get the delay for this frame if(gbitmap_sequence_update_bitmap_next_frame(s_sequence, s_bitmap_cursor, &next_delay)) { // Set the new frame into the BitmapLayer bitmap_layer_set_bitmap(s_bitmap_cursor_layer, s_bitmap_cursor); layer_mark_dirty(bitmap_layer_get_layer(s_bitmap_cursor_layer)); // Timer for that frame's delay app_timer_register(next_delay, timer_handler, NULL); } }
static void timer_handler(void *context) { uint32_t next_delay; // Advance to the next APNG frame if(gbitmap_sequence_update_bitmap_next_frame(s_sequence, s_bitmap, &next_delay)) { bitmap_layer_set_bitmap(s_bitmap_layer, s_bitmap); layer_mark_dirty(bitmap_layer_get_layer(s_bitmap_layer)); app_timer_register(next_delay, timer_handler, NULL); // Timer for that delay } else { // Start again gbitmap_sequence_restart(s_sequence); } }