Function draw_text_ex

Source
pub fn draw_text_ex(
    text: &str,
    x: f32,
    y: f32,
    params: TextParams<'_>,
) -> TextDimensions
Expand 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
Hide additional 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}