1 /**
2  * @file lv_example_fragment_1.c
3  * @brief Basic usage of obj fragment
4  */
5 #include "../../lv_examples.h"
6 
7 #if LV_USE_FRAGMENT && LV_BUILD_EXAMPLES
8 
9 static void sample_fragment_ctor(lv_fragment_t * self, void * args);
10 
11 static lv_obj_t * sample_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent);
12 
13 static void sample_container_del(lv_event_t * e);
14 
15 static lv_obj_t * root = NULL;
16 
17 struct sample_fragment_t {
18     lv_fragment_t base;
19     const char * name;
20 };
21 
22 static const lv_fragment_class_t sample_cls = {
23     .constructor_cb = sample_fragment_ctor,
24     .create_obj_cb = sample_fragment_create_obj,
25     .instance_size = sizeof(struct sample_fragment_t)
26     };
27 
lv_example_fragment_1(void)28 void lv_example_fragment_1(void)
29 {
30     root = lv_obj_create(lv_scr_act());
31     lv_obj_set_size(root, LV_PCT(100), LV_PCT(100));
32     lv_fragment_manager_t * manager = lv_fragment_manager_create(NULL);
33     /* Clean up the fragment manager before objects in containers got deleted */
34     lv_obj_add_event_cb(root, sample_container_del, LV_EVENT_DELETE, manager);
35 
36     lv_fragment_t * fragment = lv_fragment_create(&sample_cls, "Fragment");
37     lv_fragment_manager_replace(manager, fragment, &root);
38 }
39 
sample_fragment_ctor(lv_fragment_t * self,void * args)40 static void sample_fragment_ctor(lv_fragment_t * self, void * args)
41 {
42     ((struct sample_fragment_t *) self)->name = args;
43 }
44 
sample_fragment_create_obj(lv_fragment_t * self,lv_obj_t * parent)45 static lv_obj_t * sample_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent)
46 {
47     lv_obj_t * label = lv_label_create(parent);
48     lv_obj_set_style_bg_opa(label, LV_OPA_COVER, 0);;
49     lv_label_set_text_fmt(label, "Hello, %s!", ((struct sample_fragment_t *) self)->name);
50     return label;
51 }
52 
sample_container_del(lv_event_t * e)53 static void sample_container_del(lv_event_t * e)
54 {
55     lv_fragment_manager_t * manager = (lv_fragment_manager_t *) lv_event_get_user_data(e);
56     lv_fragment_manager_del(manager);
57 }
58 
59 #endif
60