summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/widgets/canvas
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
commitdd27c3530432ea0b09f01e604bf577f31d8ef841 (patch)
treebbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/canvas
parent6fd588e970470b15936187980829916d0dbe77bb (diff)
downloadtangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/canvas')
m---------lib/lvgl0
-rw-r--r--lib/lvgl/examples/widgets/canvas/index.rst13
-rw-r--r--lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.c53
-rw-r--r--lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.py43
-rw-r--r--lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.c44
-rw-r--r--lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.py43
6 files changed, 196 insertions, 0 deletions
diff --git a/lib/lvgl b/lib/lvgl
deleted file mode 160000
-Subproject 0732400e7b564dd0e7dc4a924619d8e19c5b23a
diff --git a/lib/lvgl/examples/widgets/canvas/index.rst b/lib/lvgl/examples/widgets/canvas/index.rst
new file mode 100644
index 00000000..b2cd7d4d
--- /dev/null
+++ b/lib/lvgl/examples/widgets/canvas/index.rst
@@ -0,0 +1,13 @@
+
+Drawing on the Canvas and rotate
+""""""""""""""""""""""""""""""""""
+
+.. lv_example:: widgets/canvas/lv_example_canvas_1
+ :language: c
+
+Transparent Canvas with chroma keying
+""""""""""""""""""""""""""""""""""""""
+
+.. lv_example:: widgets/canvas/lv_example_canvas_2
+ :language: c
+
diff --git a/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.c b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.c
new file mode 100644
index 00000000..6dd9ab0d
--- /dev/null
+++ b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.c
@@ -0,0 +1,53 @@
+#include "../../lv_examples.h"
+#if LV_USE_CANVAS && LV_BUILD_EXAMPLES
+
+
+#define CANVAS_WIDTH 200
+#define CANVAS_HEIGHT 150
+
+void lv_example_canvas_1(void)
+{
+ lv_draw_rect_dsc_t rect_dsc;
+ lv_draw_rect_dsc_init(&rect_dsc);
+ rect_dsc.radius = 10;
+ rect_dsc.bg_opa = LV_OPA_COVER;
+ rect_dsc.bg_grad.dir = LV_GRAD_DIR_HOR;
+ rect_dsc.bg_grad.stops[0].color = lv_palette_main(LV_PALETTE_RED);
+ rect_dsc.bg_grad.stops[1].color = lv_palette_main(LV_PALETTE_BLUE);
+ rect_dsc.border_width = 2;
+ rect_dsc.border_opa = LV_OPA_90;
+ rect_dsc.border_color = lv_color_white();
+ rect_dsc.shadow_width = 5;
+ rect_dsc.shadow_ofs_x = 5;
+ rect_dsc.shadow_ofs_y = 5;
+
+ lv_draw_label_dsc_t label_dsc;
+ lv_draw_label_dsc_init(&label_dsc);
+ label_dsc.color = lv_palette_main(LV_PALETTE_ORANGE);
+
+ static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_TRUE_COLOR(CANVAS_WIDTH, CANVAS_HEIGHT)];
+
+ lv_obj_t * canvas = lv_canvas_create(lv_scr_act());
+ lv_canvas_set_buffer(canvas, cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, LV_IMG_CF_TRUE_COLOR);
+ lv_obj_center(canvas);
+ lv_canvas_fill_bg(canvas, lv_palette_lighten(LV_PALETTE_GREY, 3), LV_OPA_COVER);
+
+ lv_canvas_draw_rect(canvas, 70, 60, 100, 70, &rect_dsc);
+
+ lv_canvas_draw_text(canvas, 40, 20, 100, &label_dsc, "Some text on text canvas");
+
+ /*Test the rotation. It requires another buffer where the original image is stored.
+ *So copy the current image to buffer and rotate it to the canvas*/
+ static lv_color_t cbuf_tmp[CANVAS_WIDTH * CANVAS_HEIGHT];
+ memcpy(cbuf_tmp, cbuf, sizeof(cbuf_tmp));
+ lv_img_dsc_t img;
+ img.data = (void *)cbuf_tmp;
+ img.header.cf = LV_IMG_CF_TRUE_COLOR;
+ img.header.w = CANVAS_WIDTH;
+ img.header.h = CANVAS_HEIGHT;
+
+ lv_canvas_fill_bg(canvas, lv_palette_lighten(LV_PALETTE_GREY, 3), LV_OPA_COVER);
+ lv_canvas_transform(canvas, &img, 120, LV_IMG_ZOOM_NONE, 0, 0, CANVAS_WIDTH / 2, CANVAS_HEIGHT / 2, true);
+}
+
+#endif
diff --git a/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.py b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.py
new file mode 100644
index 00000000..d07cee4b
--- /dev/null
+++ b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_1.py
@@ -0,0 +1,43 @@
+_CANVAS_WIDTH = 200
+_CANVAS_HEIGHT = 150
+LV_IMG_ZOOM_NONE = 256
+
+rect_dsc = lv.draw_rect_dsc_t()
+rect_dsc.init()
+rect_dsc.radius = 10
+rect_dsc.bg_opa = lv.OPA.COVER
+rect_dsc.bg_grad.dir = lv.GRAD_DIR.HOR
+rect_dsc.bg_grad.stops[0].color = lv.palette_main(lv.PALETTE.RED)
+rect_dsc.bg_grad.stops[1].color = lv.palette_main(lv.PALETTE.BLUE)
+rect_dsc.border_width = 2
+rect_dsc.border_opa = lv.OPA._90
+rect_dsc.border_color = lv.color_white()
+rect_dsc.shadow_width = 5
+rect_dsc.shadow_ofs_x = 5
+rect_dsc.shadow_ofs_y = 5
+
+label_dsc = lv.draw_label_dsc_t()
+label_dsc.init()
+label_dsc.color = lv.palette_main(lv.PALETTE.YELLOW)
+
+cbuf = bytearray(_CANVAS_WIDTH * _CANVAS_HEIGHT * 4)
+
+canvas = lv.canvas(lv.scr_act())
+canvas.set_buffer(cbuf, _CANVAS_WIDTH, _CANVAS_HEIGHT, lv.img.CF.TRUE_COLOR)
+canvas.center()
+canvas.fill_bg(lv.palette_lighten(lv.PALETTE.GREY, 3), lv.OPA.COVER)
+
+canvas.draw_rect(70, 60, 100, 70, rect_dsc)
+canvas.draw_text(40, 20, 100, label_dsc, "Some text on text canvas")
+
+# Test the rotation. It requires another buffer where the original image is stored.
+# So copy the current image to buffer and rotate it to the canvas
+
+img = lv.img_dsc_t()
+img.data = cbuf[:]
+img.header.cf = lv.img.CF.TRUE_COLOR
+img.header.w = _CANVAS_WIDTH
+img.header.h = _CANVAS_HEIGHT
+
+canvas.fill_bg(lv.palette_lighten(lv.PALETTE.GREY, 3), lv.OPA.COVER)
+canvas.transform(img, 30, LV_IMG_ZOOM_NONE, 0, 0, _CANVAS_WIDTH // 2, _CANVAS_HEIGHT // 2, True)
diff --git a/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.c b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.c
new file mode 100644
index 00000000..a857c668
--- /dev/null
+++ b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.c
@@ -0,0 +1,44 @@
+#include "../../lv_examples.h"
+#if LV_USE_CANVAS && LV_BUILD_EXAMPLES
+
+#define CANVAS_WIDTH 50
+#define CANVAS_HEIGHT 50
+
+/**
+ * Create a transparent canvas with Chroma keying and indexed color format (palette).
+ */
+void lv_example_canvas_2(void)
+{
+ /*Create a button to better see the transparency*/
+ lv_btn_create(lv_scr_act());
+
+ /*Create a buffer for the canvas*/
+ static lv_color_t cbuf[LV_CANVAS_BUF_SIZE_INDEXED_1BIT(CANVAS_WIDTH, CANVAS_HEIGHT)];
+
+ /*Create a canvas and initialize its palette*/
+ lv_obj_t * canvas = lv_canvas_create(lv_scr_act());
+ lv_canvas_set_buffer(canvas, cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, LV_IMG_CF_INDEXED_1BIT);
+ lv_canvas_set_palette(canvas, 0, LV_COLOR_CHROMA_KEY);
+ lv_canvas_set_palette(canvas, 1, lv_palette_main(LV_PALETTE_RED));
+
+ /*Create colors with the indices of the palette*/
+ lv_color_t c0;
+ lv_color_t c1;
+
+ c0.full = 0;
+ c1.full = 1;
+
+ /*Red background (There is no dedicated alpha channel in indexed images so LV_OPA_COVER is ignored)*/
+ lv_canvas_fill_bg(canvas, c1, LV_OPA_COVER);
+
+ /*Create hole on the canvas*/
+ uint32_t x;
+ uint32_t y;
+ for(y = 10; y < 30; y++) {
+ for(x = 5; x < 20; x++) {
+ lv_canvas_set_px_color(canvas, x, y, c0);
+ }
+ }
+
+}
+#endif
diff --git a/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.py b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.py
new file mode 100644
index 00000000..faefc875
--- /dev/null
+++ b/lib/lvgl/examples/widgets/canvas/lv_example_canvas_2.py
@@ -0,0 +1,43 @@
+CANVAS_WIDTH = 50
+CANVAS_HEIGHT = 50
+LV_COLOR_CHROMA_KEY = lv.color_hex(0x00ff00)
+
+def LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h):
+ return int(((w / 8) + 1) * h)
+
+def LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h):
+ return LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) + 4 * 2
+
+def LV_CANVAS_BUF_SIZE_INDEXED_1BIT(w, h):
+ return LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h)
+
+#
+# Create a transparent canvas with Chroma keying and indexed color format (palette).
+#
+
+# Create a button to better see the transparency
+btn=lv.btn(lv.scr_act())
+
+# Create a buffer for the canvas
+cbuf= bytearray(LV_CANVAS_BUF_SIZE_INDEXED_1BIT(CANVAS_WIDTH, CANVAS_HEIGHT))
+
+# Create a canvas and initialize its palette
+canvas = lv.canvas(lv.scr_act())
+canvas.set_buffer(cbuf, CANVAS_WIDTH, CANVAS_HEIGHT, lv.img.CF.INDEXED_1BIT)
+canvas.set_palette(0, LV_COLOR_CHROMA_KEY)
+canvas.set_palette(1, lv.palette_main(lv.PALETTE.RED))
+
+# Create colors with the indices of the palette
+c0 = lv.color_t()
+c1 = lv.color_t()
+
+c0.full = 0
+c1.full = 1
+
+# Red background (There is no dedicated alpha channel in indexed images so LV_OPA_COVER is ignored)
+canvas.fill_bg(c1, lv.OPA.COVER)
+
+# Create hole on the canvas
+for y in range(10,30):
+ for x in range(5,20):
+ canvas.set_px(x, y, c0)