#include "../../lv_examples.h" #if LV_USE_CANVAS && LV_BUILD_EXAMPLES #define CANVAS_WIDTH 300 #define CANVAS_HEIGHT 200 static void timer_cb(lv_timer_t * timer) { static int32_t counter = 0; const char * string = "lol~ I'm wavvvvvvving~>>>"; const int16_t string_len = lv_strlen(string); lv_obj_t * canvas = lv_timer_get_user_data(timer); lv_layer_t layer; lv_canvas_init_layer(canvas, &layer); lv_canvas_fill_bg(canvas, lv_color_white(), LV_OPA_COVER); lv_draw_letter_dsc_t letter_dsc; lv_draw_letter_dsc_init(&letter_dsc); letter_dsc.color = lv_color_hex(0xff0000); letter_dsc.font = lv_font_default(); { #define CURVE2_X(t) (t * 2 + 10) #define CURVE2_Y(t) (lv_trigo_sin((t) * 5) * 40 / 32767 + CANVAS_HEIGHT / 2) int32_t pre_x = CURVE2_X(-1); int32_t pre_y = CURVE2_Y(-1); for(int16_t i = 0; i < string_len; i++) { const int32_t angle = i * 5; const int32_t x = CURVE2_X(angle); const int32_t y = CURVE2_Y(angle + counter / 2); letter_dsc.unicode = (uint32_t)string[i % string_len]; letter_dsc.rotation = lv_atan2(y - pre_y, x - pre_x) * 10; letter_dsc.color = lv_color_hsv_to_rgb(i * 10, 100, 100); lv_draw_letter(&layer, &letter_dsc, &(lv_point_t) { .x = x, .y = y }); pre_x = x; pre_y = y; } } lv_canvas_finish_layer(canvas, &layer); counter++; } void lv_example_canvas_9(void) { /*Create a buffer for the canvas*/ LV_DRAW_BUF_DEFINE_STATIC(draw_buf, CANVAS_WIDTH, CANVAS_HEIGHT, LV_COLOR_FORMAT_ARGB8888); LV_DRAW_BUF_INIT_STATIC(draw_buf); lv_obj_t * canvas = lv_canvas_create(lv_screen_active()); lv_obj_set_size(canvas, CANVAS_WIDTH, CANVAS_HEIGHT); lv_obj_center(canvas); lv_canvas_set_draw_buf(canvas, &draw_buf); lv_timer_create(timer_cb, 16, canvas); } #endif