1 | use skia_bindings::SkTextUtils; |
2 | |
3 | use crate::{prelude::*, Canvas, EncodedText, Font, Paint, Path, Point}; |
4 | |
5 | pub use skia_bindings::SkTextUtils_Align as Align; |
6 | variant_name!(Align::Center); |
7 | |
8 | pub fn draw_str( |
9 | canvas: &Canvas, |
10 | text: impl AsRef<str>, |
11 | p: impl Into<Point>, |
12 | font: &Font, |
13 | paint: &Paint, |
14 | align: Align, |
15 | ) { |
16 | draw_text(canvas, text.as_ref(), p, font, paint, align) |
17 | } |
18 | |
19 | pub fn draw_text( |
20 | canvas: &Canvas, |
21 | text: impl EncodedText, |
22 | p: impl Into<Point>, |
23 | font: &Font, |
24 | paint: &Paint, |
25 | align: Align, |
26 | ) { |
27 | let (ptr: *const c_void, size: usize, encoding: TextEncoding) = text.as_raw(); |
28 | let p = p.into(); |
29 | unsafe { |
30 | SkTextUtils::Draw( |
31 | arg1:canvas.native_mut(), |
32 | text:ptr, |
33 | size, |
34 | arg2:encoding.into_native(), |
35 | p.x, |
36 | p.y, |
37 | arg3:font.native(), |
38 | arg4:paint.native(), |
39 | arg5:align, |
40 | ) |
41 | } |
42 | } |
43 | |
44 | impl Canvas { |
45 | pub fn draw_str_align( |
46 | &self, |
47 | text: impl AsRef<str>, |
48 | p: impl Into<Point>, |
49 | font: &Font, |
50 | paint: &Paint, |
51 | align: Align, |
52 | ) -> &Self { |
53 | self.draw_text_align(text.as_ref(), p, font, paint, align) |
54 | } |
55 | |
56 | pub fn draw_text_align( |
57 | &self, |
58 | text: impl EncodedText, |
59 | p: impl Into<Point>, |
60 | font: &Font, |
61 | paint: &Paint, |
62 | align: Align, |
63 | ) -> &Self { |
64 | draw_text(self, text, p, font, paint, align); |
65 | self |
66 | } |
67 | } |
68 | |
69 | pub fn get_path(text: impl EncodedText, p: impl Into<Point>, font: &Font) -> Path { |
70 | let (ptr: *const c_void, size: usize, encoding: TextEncoding) = text.as_raw(); |
71 | let p = p.into(); |
72 | let mut path: Handle = Path::default(); |
73 | unsafe { |
74 | SkTextUtils::GetPath( |
75 | text:ptr, |
76 | length:size, |
77 | arg1:encoding.into_native(), |
78 | p.x, |
79 | p.y, |
80 | arg2:font.native(), |
81 | arg3:path.native_mut(), |
82 | ) |
83 | } |
84 | path |
85 | } |
86 | |
87 | impl Path { |
88 | pub fn from_str(text: impl AsRef<str>, p: impl Into<Point>, font: &Font) -> Self { |
89 | get_path(text.as_ref(), p, font) |
90 | } |
91 | } |
92 | |