123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- #include <string.h>
- #include <lvgl/lvgl_img_loader.h>
- static int picarray_load(lvgl_img_loader_t * loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset);
- static uint16_t picarray_get_count(lvgl_img_loader_t *loader);
- static int picregion_load(lvgl_img_loader_t * loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset);
- static void picregion_unload(lvgl_img_loader_t * loader, lv_img_dsc_t * dsc);
- static void picregion_preload(lvgl_img_loader_t * loader, uint16_t index);
- static uint16_t picregion_get_count(lvgl_img_loader_t *loader);
- static int picgroup_load(lvgl_img_loader_t * loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset);
- static void picgroup_unload(lvgl_img_loader_t * loader, lv_img_dsc_t * dsc);
- static void picgroup_preload(lvgl_img_loader_t * loader, uint16_t index);
- static uint16_t picgroup_get_count(lvgl_img_loader_t * loader);
- static const lvgl_img_loader_fn_t picarray_loader_fn = {
- .load = picarray_load,
- .get_count = picarray_get_count,
- };
- static const lvgl_img_loader_fn_t picregion_loader_fn = {
- .load = picregion_load,
- .unload = picregion_unload,
- .preload = picregion_preload,
- .get_count = picregion_get_count,
- };
- static const lvgl_img_loader_fn_t picgroup_loader_fn = {
- .load = picgroup_load,
- .unload = picgroup_unload,
- .preload = picgroup_preload,
- .get_count = picgroup_get_count,
- };
- int lvgl_img_loader_set_picarray(lvgl_img_loader_t * loader,
- const lv_img_dsc_t * dsc, const lv_point_t * offsets, uint16_t num)
- {
- memset(loader, 0, sizeof(*loader));
- loader->fn = &picarray_loader_fn;
- loader->picarray.dsc = dsc;
- loader->picarray.offsets = offsets;
- loader->picarray.count = num;
- loader->last_preload_idx = -1;
- return 0;
- }
- int lvgl_img_loader_set_picregion(lvgl_img_loader_t * loader, uint32_t scene_id,
- lvgl_res_picregion_t * picregion)
- {
- memset(loader, 0, sizeof(*loader));
- loader->fn = &picregion_loader_fn;
- loader->picregion.scene_id = scene_id;
- loader->picregion.node = picregion;
- loader->last_preload_idx = -1;
- return 0;
- }
- int lvgl_img_loader_set_picgroup(lvgl_img_loader_t * loader, uint32_t scene_id,
- lvgl_res_group_t * picgroup, const uint32_t * ids, uint16_t num)
- {
- memset(loader, 0, sizeof(*loader));
- loader->fn = &picgroup_loader_fn;
- loader->picgroup.scene_id = scene_id;
- loader->picgroup.node = picgroup;
- loader->picgroup.ids = ids;
- loader->picgroup.count = num;
- loader->last_preload_idx = -1;
- return 0;
- }
- int lvgl_img_loader_set_custom(lvgl_img_loader_t *loader,
- const lvgl_img_loader_fn_t * fn, void * user_data)
- {
- memset(loader, 0, sizeof(*loader));
- loader->fn = fn;
- loader->user_data = user_data;
- loader->last_preload_idx = -1;
- return 0;
- }
- static int picarray_load(lvgl_img_loader_t * loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset)
- {
- if (offset) {
- if (loader->picarray.offsets) {
- offset->x = loader->picarray.offsets[index].x;
- offset->y = loader->picarray.offsets[index].y;
- } else {
- offset->x = 0;
- offset->y = 0;
- }
- }
- memcpy(dsc, &loader->picarray.dsc[index], sizeof(*dsc));
- return 0;
- }
- static uint16_t picarray_get_count(lvgl_img_loader_t * loader)
- {
- return loader->picarray.count;
- }
- static int picregion_load(lvgl_img_loader_t * loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset)
- {
- int res = lvgl_res_load_pictures_from_picregion(loader->picregion.node, index, index, dsc);
- if (res == 0 && offset != NULL) {
- offset->x = 0;
- offset->y = 0;
- }
- return res;
- }
- static void picregion_unload(lvgl_img_loader_t *loader, lv_img_dsc_t * dsc)
- {
- if (dsc->data) {
- lvgl_res_unload_pictures(dsc, 1);
- dsc->data = NULL;
- }
- }
- static void picregion_preload(lvgl_img_loader_t *loader, uint16_t index)
- {
- lvgl_res_preload_pictures_from_picregion(loader->picregion.scene_id,
- loader->picregion.node, index, index);
- }
- static uint16_t picregion_get_count(lvgl_img_loader_t *loader)
- {
- return loader->picregion.node->frames;
- }
- static int picgroup_load(lvgl_img_loader_t *loader, uint16_t index, lv_img_dsc_t * dsc, lv_point_t * offset)
- {
- return lvgl_res_load_pictures_from_group(loader->picgroup.node,
- loader->picgroup.ids + index, dsc, offset, 1);
- }
- static void picgroup_unload(lvgl_img_loader_t *loader, lv_img_dsc_t * dsc)
- {
- if (dsc->data) {
- lvgl_res_unload_pictures(dsc, 1);
- dsc->data = NULL;
- }
- }
- static void picgroup_preload(lvgl_img_loader_t *loader, uint16_t index)
- {
- lvgl_res_preload_pictures_from_group(loader->picgroup.scene_id,
- loader->picgroup.node, loader->picgroup.ids + index, 1);
- }
- static uint16_t picgroup_get_count(lvgl_img_loader_t *loader)
- {
- return loader->picgroup.count;
- }
|