feat(draw): add lv_draw_letter support (#7490)
Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
@@ -51,3 +51,15 @@ Draw a vector graphic to the canvas
|
||||
|
||||
.. lv_example:: widgets/canvas/lv_example_canvas_8
|
||||
:language: c
|
||||
|
||||
Draw Fancy Letter Effects
|
||||
-------------------------
|
||||
|
||||
.. lv_example:: widgets/canvas/lv_example_canvas_9
|
||||
:language: c
|
||||
|
||||
Draw Fancy Letter Effects 2
|
||||
---------------------------
|
||||
|
||||
.. lv_example:: widgets/canvas/lv_example_canvas_10
|
||||
:language: c
|
||||
|
||||
68
examples/widgets/canvas/lv_example_canvas_10.c
Normal file
68
examples/widgets/canvas/lv_example_canvas_10.c
Normal file
@@ -0,0 +1,68 @@
|
||||
#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 = "windstorrrrrrrrrrrrrrrrm~>>>";
|
||||
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 + lv_trigo_cos((t) * 5) * 40 / 32767 - 10)
|
||||
#define CURVE2_Y(t, T) ((t) * lv_trigo_sin(((t) + (T)) * 5) * 40 / 32767 / 80 + CANVAS_HEIGHT / 2)
|
||||
|
||||
int32_t pre_x = CURVE2_X(-1);
|
||||
int32_t pre_y = CURVE2_Y(-1, 0);
|
||||
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 + 30, 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_10(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
|
||||
68
examples/widgets/canvas/lv_example_canvas_9.c
Normal file
68
examples/widgets/canvas/lv_example_canvas_9.c
Normal file
@@ -0,0 +1,68 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user