1 /**
2  * @file lv_demo_transform.c
3  * Recommended resolution 400x400
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 #include "lv_demo_transform.h"
10 
11 #if LV_USE_DEMO_TRANSFORM
12 
13 /*********************
14  *      DEFINES
15  *********************/
16 
17 /**********************
18  *      TYPEDEFS
19  **********************/
20 typedef struct {
21     const void * image;
22     const char * name;
23     const char * description;
24 } card_info_t;
25 
26 /**********************
27  *  STATIC PROTOTYPES
28  **********************/
29 static void arc_event_cb(lv_event_t * e);
30 static void slider_event_cb(lv_event_t * e);
31 static lv_obj_t * card_create(void);
32 
33 /**********************
34  *  STATIC VARIABLES
35  **********************/
36 static lv_style_t style_card;
37 static lv_style_t style_avatar;
38 static lv_style_t style_btn;
39 static lv_obj_t * card_to_transform;
40 LV_IMAGE_DECLARE(img_transform_avatar_15);
41 
42 /**********************
43  *      MACROS
44  **********************/
45 
46 /**********************
47  *   GLOBAL FUNCTIONS
48  **********************/
lv_demo_transform(void)49 void lv_demo_transform(void)
50 {
51     static const int32_t grid_cols[] = {LV_GRID_CONTENT, 4, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
52     static const int32_t grid_rows[] = {LV_GRID_CONTENT, -10, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
53 
54     lv_style_init(&style_card);
55     lv_style_set_width(&style_card, 300);
56     lv_style_set_height(&style_card, 120);
57     lv_style_set_layout(&style_card, LV_LAYOUT_GRID);
58     lv_style_set_grid_column_dsc_array(&style_card, grid_cols);
59     lv_style_set_grid_row_dsc_array(&style_card, grid_rows);
60     lv_style_set_shadow_width(&style_card, 20);
61     lv_style_set_shadow_offset_y(&style_card, 5);
62     lv_style_set_shadow_color(&style_card, lv_color_hex3(0xccc));
63     lv_style_set_border_width(&style_card, 0);
64     lv_style_set_radius(&style_card, 12);
65     lv_style_set_base_dir(&style_card, LV_BASE_DIR_AUTO);
66 
67     lv_style_init(&style_avatar);
68     lv_style_set_shadow_width(&style_avatar, 20);
69     lv_style_set_shadow_offset_y(&style_avatar, 5);
70     lv_style_set_shadow_color(&style_avatar, lv_color_hex3(0xbbb));
71     lv_style_set_radius(&style_avatar, LV_RADIUS_CIRCLE);
72 
73     lv_style_init(&style_btn);
74     lv_style_set_width(&style_btn, 140);
75     lv_style_set_height(&style_btn, 37);
76     lv_style_set_bg_color(&style_btn, lv_color_hex(0x759efe));
77     lv_style_set_bg_grad_color(&style_btn, lv_color_hex(0x4173ff));
78     lv_style_set_bg_grad_dir(&style_btn, LV_GRAD_DIR_HOR);
79     lv_style_set_radius(&style_btn, LV_RADIUS_CIRCLE);
80     lv_style_set_shadow_width(&style_btn, 0);
81 
82     lv_obj_t * card;
83     card = card_create();
84     lv_obj_set_style_opa(card, LV_OPA_50, 0);
85     lv_obj_center(card);
86 
87     card_to_transform = card_create();
88     lv_obj_center(card_to_transform);
89 
90     int32_t disp_w = lv_display_get_horizontal_resolution(NULL);
91     lv_obj_t * arc = lv_arc_create(lv_screen_active());
92     lv_obj_set_size(arc, disp_w - 20, disp_w - 20);
93     lv_arc_set_range(arc, 0, 270);
94     lv_arc_set_value(arc, 225);
95     lv_obj_add_event_cb(arc, arc_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
96     lv_obj_add_flag(arc, LV_OBJ_FLAG_ADV_HITTEST);
97     lv_obj_center(arc);
98 
99     lv_obj_t * slider = lv_slider_create(lv_screen_active());
100     lv_obj_set_width(slider, lv_pct(70));
101     lv_obj_align(slider, LV_ALIGN_BOTTOM_MID, 0, -20);
102     lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
103     lv_slider_set_range(slider, 128, 300);
104     lv_slider_set_value(slider, 256, LV_ANIM_OFF);
105 }
106 
107 /**********************
108  *   STATIC FUNCTIONS
109  **********************/
110 
card_create(void)111 static lv_obj_t * card_create(void)
112 {
113     lv_obj_t * card = lv_obj_create(lv_screen_active());
114     lv_obj_add_style(card, &style_card, 0);
115     lv_obj_remove_flag(card, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_CHAIN_HOR);
116 
117     lv_obj_t * avatar = lv_image_create(card);
118     lv_image_set_src(avatar, &img_transform_avatar_15);
119     lv_obj_set_grid_cell(avatar, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 4);
120     lv_obj_add_style(avatar, &style_avatar, 0);
121 
122     lv_obj_t * name = lv_label_create(card);
123     lv_label_set_text(name, "Pavel Svoboda");
124     lv_obj_set_grid_cell(name, LV_GRID_ALIGN_START, 2, 1, LV_GRID_ALIGN_CENTER, 0, 1);
125     lv_obj_set_style_text_font(name, &lv_font_montserrat_18, 0);
126 
127     lv_obj_t * btn = lv_button_create(card);
128     lv_obj_remove_flag(card, LV_OBJ_FLAG_SCROLL_CHAIN_HOR);
129     lv_obj_set_grid_cell(btn, LV_GRID_ALIGN_START, 2, 1, LV_GRID_ALIGN_CENTER, 3, 1);
130     lv_obj_add_style(btn, &style_btn, 0);
131 
132     LV_IMAGE_DECLARE(img_multilang_like);
133     lv_obj_t * btn_img = lv_image_create(btn);
134     lv_image_set_src(btn_img, &img_multilang_like);
135     lv_obj_align(btn_img, LV_ALIGN_LEFT_MID, 30, 0);
136 
137     lv_obj_t * btn_label = lv_label_create(btn);
138     lv_label_set_text(btn_label, "Like");
139     lv_obj_align(btn_label, LV_ALIGN_LEFT_MID, 60, 1);
140 
141     lv_obj_scroll_to_view(card, LV_ANIM_OFF);
142 
143     return card;
144 }
145 
arc_event_cb(lv_event_t * e)146 static void arc_event_cb(lv_event_t * e)
147 {
148     lv_obj_t * arc = lv_event_get_target(e);
149 
150     int32_t v = (int32_t)lv_arc_get_angle_end(arc);
151     lv_obj_set_style_transform_rotation(card_to_transform, v * 10, 0);
152 }
153 
slider_event_cb(lv_event_t * e)154 static void slider_event_cb(lv_event_t * e)
155 {
156     lv_obj_t * slider = lv_event_get_target(e);
157     int32_t v = lv_slider_get_value(slider);
158     lv_obj_set_style_transform_scale_x(card_to_transform, v, 0);
159     lv_obj_set_style_transform_scale_y(card_to_transform, v, 0);
160 }
161 
162 #endif
163