diff --git a/boards/shields/nice_view_custom/widgets/peripheral_status.c b/boards/shields/nice_view_custom/widgets/peripheral_status.c index 3742cad..ff61796 100644 --- a/boards/shields/nice_view_custom/widgets/peripheral_status.c +++ b/boards/shields/nice_view_custom/widgets/peripheral_status.c @@ -87,6 +87,27 @@ const lv_img_dsc_t *anim_imgs[] = { &hammerbeam30, }; +void rotateArr(const lv_img_dsc_t *arr[], int n, uint32_t d) { + if (n <= 1) return; + d = d % n; + if (d == 0) return; + + const lv_img_dsc_t *tmp[n]; + for (int i = 0; i < n; i++) { + tmp[i] = arr[(i + d) % n]; + } + for (int i = 0; i < n; i++) { + arr[i] = tmp[i]; + } +} + +uint32_t d; + +void anim_imgs_shift_init(void) { + int n = sizeof(anim_imgs) / sizeof(anim_imgs[0]); + d = sys_rand32_get() % n; + rotateArr(anim_imgs, n, d); +} static sys_slist_t widgets = SYS_SLIST_STATIC_INIT(&widgets); @@ -176,6 +197,8 @@ int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) { lv_obj_align(top, LV_ALIGN_TOP_RIGHT, 0, 0); lv_canvas_set_buffer(top, widget->cbuf, CANVAS_SIZE, CANVAS_SIZE, LV_IMG_CF_TRUE_COLOR); + anim_imgs_shift_init(); + lv_obj_t * art = lv_animimg_create(widget->obj); lv_obj_center(art); lv_animimg_set_src(art, (const void **) anim_imgs, 30); @@ -191,4 +214,7 @@ int zmk_widget_status_init(struct zmk_widget_status *widget, lv_obj_t *parent) { return 0; } -lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget) { return widget->obj; } \ No newline at end of file + +lv_obj_t *zmk_widget_status_obj(struct zmk_widget_status *widget) { return widget->obj; } + +