pub fn draw_text_ex(
text: &str,
x: f32,
y: f32,
params: TextParams<'_>,
) -> TextDimensionsExpand description
Draw text with custom params such as font, font size and font scale Returns text size
Examples found in repository?
examples/text_measures.rs (lines 66-75)
3fn draw_text_annotated(text: &str, font: Option<&Font>, x: f32, baseline: f32) {
4 let size = measure_text(text, font, 100, 1.0);
5
6 // Full background rect
7 draw_rectangle(x, baseline - size.offset_y, size.width, size.height, BLUE);
8
9 // Base line
10 draw_rectangle(x, baseline - 2.0, size.width, 4.0, RED);
11
12 // Base line annotation
13 draw_rectangle(x + size.width, baseline - 1.0, 120.0, 1.0, GRAY);
14 draw_text(
15 "baseline",
16 x + size.width + 10.0,
17 baseline - 5.0,
18 30.0,
19 WHITE,
20 );
21
22 // Top line
23 draw_rectangle(x, baseline - 2.0 - size.offset_y, size.width, 4.0, RED);
24
25 // Top line annotation
26 draw_rectangle(
27 x + size.width,
28 baseline - size.offset_y - 1.0,
29 120.0,
30 1.0,
31 GRAY,
32 );
33 draw_text(
34 "topline",
35 x + size.width + 10.0,
36 baseline - size.offset_y - 5.0,
37 30.0,
38 WHITE,
39 );
40
41 // Bottom line
42 draw_rectangle(
43 x,
44 baseline - 2.0 - size.offset_y + size.height,
45 size.width,
46 4.0,
47 RED,
48 );
49
50 // Bottom line annotation
51 draw_rectangle(
52 x + size.width,
53 baseline - size.offset_y + size.height - 1.0,
54 120.0,
55 1.0,
56 GRAY,
57 );
58 draw_text(
59 "bottomline",
60 x + size.width + 10.0,
61 baseline - size.offset_y + size.height - 5.0,
62 30.0,
63 WHITE,
64 );
65
66 draw_text_ex(
67 text,
68 x,
69 baseline,
70 TextParams {
71 font_size: 100,
72 font,
73 ..Default::default()
74 },
75 );
76}More examples
examples/text.rs (line 14)
4async fn main() {
5 let font = load_ttf_font("./examples/DancingScriptRegular.ttf")
6 .await
7 .unwrap();
8
9 let mut angle = 0.0;
10
11 loop {
12 clear_background(BLACK);
13
14 draw_text_ex("Custom font size:", 20.0, 20.0, TextParams::default());
15 let mut y = 20.0;
16
17 for font_size in (30..100).step_by(20) {
18 let text = "abcdef";
19 let params = TextParams {
20 font_size,
21 ..Default::default()
22 };
23
24 y += font_size as f32;
25 draw_text_ex(text, 20.0, y, params);
26 }
27
28 draw_text_ex("Dynamic font scale:", 20.0, 400.0, TextParams::default());
29 draw_text_ex(
30 "abcd",
31 20.0,
32 450.0,
33 TextParams {
34 font_size: 50,
35 font_scale: get_time().sin() as f32 / 2.0 + 1.0,
36 ..Default::default()
37 },
38 );
39
40 draw_text_ex("Custom font:", 400.0, 20.0, TextParams::default());
41 draw_text_ex(
42 "abcd",
43 400.0,
44 70.0,
45 TextParams {
46 font_size: 50,
47 font: Some(&font),
48 ..Default::default()
49 },
50 );
51
52 draw_text_ex(
53 "abcd",
54 400.0,
55 160.0,
56 TextParams {
57 font_size: 100,
58 font: Some(&font),
59 ..Default::default()
60 },
61 );
62
63 draw_text_ex(
64 "abcd",
65 screen_width() / 4.0 * 2.0,
66 screen_height() / 3.0 * 2.0,
67 TextParams {
68 font_size: 70,
69 font: Some(&font),
70 rotation: angle,
71 ..Default::default()
72 },
73 );
74
75 let center = get_text_center("abcd", Option::None, 70, 1.0, angle * 2.0);
76 draw_text_ex(
77 "abcd",
78 screen_width() / 4.0 * 3.0 - center.x,
79 screen_height() / 3.0 * 2.0 - center.y,
80 TextParams {
81 font_size: 70,
82 rotation: angle * 2.0,
83 ..Default::default()
84 },
85 );
86
87 angle -= 0.030;
88
89 next_frame().await
90 }
91}examples/arkanoid.rs (lines 52-57)
4async fn main() {
5 const BLOCKS_W: usize = 10;
6 const BLOCKS_H: usize = 10;
7 const SCR_W: f32 = 20.0;
8 const SCR_H: f32 = 20.0;
9
10 let mut blocks: [[bool; BLOCKS_W]; BLOCKS_H] = [[true; BLOCKS_W]; BLOCKS_H];
11 let mut ball_x = 12.;
12 let mut ball_y = 7.;
13 let mut dx = 3.5;
14 let mut dy = -3.5;
15 let mut platform_x = 10.;
16 let mut stick = true;
17 let platform_width = 5.;
18 let platform_height = 0.2;
19
20 // build camera with following coordinate system:
21 // (0., 0) .... (SCR_W, 0.)
22 // (0., SCR_H) .... (SCR_W, SCR_H)
23 set_camera(&Camera2D {
24 zoom: vec2(1. / SCR_W * 2., 1. / SCR_H * 2.),
25 target: vec2(SCR_W / 2., SCR_H / 2.),
26 ..Default::default()
27 });
28
29 loop {
30 clear_background(SKYBLUE);
31
32 let delta = get_frame_time();
33
34 if is_key_down(KeyCode::Right) && platform_x < SCR_W - platform_width / 2. {
35 platform_x += 3.0 * delta;
36 }
37 if is_key_down(KeyCode::Left) && platform_x > platform_width / 2. {
38 platform_x -= 3.0 * delta;
39 }
40
41 if stick == false {
42 ball_x += dx * delta;
43 ball_y += dy * delta;
44 } else {
45 let (font_size, font_scale, font_aspect) = camera_font_scale(1.);
46 let text_params = TextParams {
47 font_size,
48 font_scale,
49 font_scale_aspect: font_aspect,
50 ..Default::default()
51 };
52 draw_text_ex(
53 "Press space to start",
54 SCR_W / 2. - 5.,
55 SCR_H / 2.,
56 text_params,
57 );
58
59 ball_x = platform_x;
60 ball_y = SCR_H - 0.5;
61
62 stick = !is_key_down(KeyCode::Space);
63 }
64
65 if ball_x <= 0. || ball_x > SCR_W {
66 dx *= -1.;
67 }
68 if ball_y <= 0.
69 || (ball_y > SCR_H - platform_height - 0.15 / 2.
70 && ball_x >= platform_x - platform_width / 2.
71 && ball_x <= platform_x + platform_width / 2.)
72 {
73 dy *= -1.;
74 }
75 if ball_y >= SCR_H {
76 ball_y = 10.;
77 dy = -dy.abs();
78 stick = true;
79 }
80
81 for j in 0..BLOCKS_H {
82 for i in 0..BLOCKS_W {
83 if blocks[j][i] {
84 let block_w = SCR_W / BLOCKS_W as f32;
85 let block_h = 7.0 / BLOCKS_H as f32;
86 let block_x = i as f32 * block_w + 0.05;
87 let block_y = j as f32 * block_h + 0.05;
88
89 draw_rectangle(block_x, block_y, block_w - 0.1, block_h - 0.1, DARKBLUE);
90 if ball_x >= block_x
91 && ball_x < block_x + block_w
92 && ball_y >= block_y
93 && ball_y < block_y + block_h
94 {
95 dy *= -1.;
96 blocks[j][i] = false;
97 }
98 }
99 }
100 }
101
102 draw_circle(ball_x, ball_y, 0.2, RED);
103 draw_rectangle(
104 platform_x - platform_width / 2.,
105 SCR_H - platform_height,
106 platform_width,
107 platform_height,
108 DARKPURPLE,
109 );
110
111 next_frame().await
112 }
113}