logo
Expand description

Monospaced bitmap fonts.

This module contains support for drawing monospaced bitmap fonts and provides several built-in fonts.

Additional custom fonts can be added by the application or other crates. This is demonstrated in the text-custom-font example in the simulator crate.

Examples

The examples below use the Font6x8 font, however any of the built-in fonts in this module or custom fonts can be substituted.

Draw text without using egtext macro

Text can be drawn to a display by creating a Text object and attaching a text style to it by using a Styled object. By creating the text style manually, without using the egtext macro, it can be reused to style multiple text objects.

use embedded_graphics::{
    fonts::{Font6x8, Text},
    pixelcolor::Rgb565,
    prelude::*,
    style::{TextStyle, TextStyleBuilder},
};

// Create a new text style
let style = TextStyleBuilder::new(Font6x8)
    .text_color(Rgb565::YELLOW)
    .background_color(Rgb565::BLUE)
    .build();

// Create a text at position (20, 30) and draw it using the previously defined style
Text::new("Hello Rust!", Point::new(20, 30))
    .into_styled(style)
    .draw(&mut display)?;

Draw text using the egtext macro

Creating styled text can be simplified by using the egtext and text_style macros. All style properties in TextStyle can be set by using assignments inside the text_style macro call.

The following example draws the same text as the previous example but uses the egtext macro to build the necessary styled text objects, and the text_style macro to style it.

use embedded_graphics::{egtext, fonts::Font6x8, pixelcolor::Rgb565, prelude::*, text_style};

egtext!(
    text = "Hello Rust!",
    top_left = (20, 30),
    style = text_style!(
        font = Font6x8,
        text_color = Rgb565::YELLOW,
        background_color = Rgb565::BLUE,
    )
)
.draw(&mut display)?;

It is also possible to provide a style created without using the text_style macro. In this example, [TextStyleBuilder] is used.

use embedded_graphics::{
    egtext,
    fonts::Font6x8,
    pixelcolor::Rgb565,
    prelude::*,
    style::{TextStyle, TextStyleBuilder},
};

egtext!(
    text = "Hello Rust!",
    top_left = (20, 30),
    style = TextStyleBuilder::new(Font6x8)
        .text_color(Rgb565::YELLOW)
        .background_color(Rgb565::BLUE)
        .build()
)
.draw(&mut display)?;

Translate text by (20px, 30px)

use embedded_graphics::{
    fonts::{Font6x8, Text},
    pixelcolor::BinaryColor,
    prelude::*,
    style::TextStyle,
};

Text::new("Hello Rust!", Point::zero())
    .into_styled(TextStyle::new(Font6x8, BinaryColor::On))
    .translate(Point::new(20, 30))
    .draw(&mut display)?;

// this is equivalent to:

Text::new("Hello Rust!", Point::new(20, 30))
    .into_styled(TextStyle::new(Font6x8, BinaryColor::On))
    .draw(&mut display)?;

Use write!() and arrayvec to render a formatted string

This example uses arrayvec’s ArrayString to render a floating point value using the write!() macro. These strings have a fixed maximum length, but allow the use of Rust’s builtin string formatting.

use arrayvec::ArrayString;
use core::fmt::Write;
use embedded_graphics::{egtext, fonts::Font6x8, pixelcolor::Rgb565, prelude::*, text_style};

let value = 12.34567;

// Create a fixed buffer of length 12
let mut buf = ArrayString::<[_; 12]>::new();

// Output `Value: 12.35`
write!(&mut buf, "Value: {:.2}", value).expect("Failed to write to buffer");

egtext!(
    text = &buf,
    top_left = Point::zero(),
    style = text_style!(
        font = Font6x8,
        text_color = Rgb565::YELLOW,
        background_color = Rgb565::BLUE,
    )
)
.draw(&mut display)?;

Built-in fonts

TypeScreenshot
Font6x66x6 font spritemap screenshot
Font6x86x8 font spritemap screenshot
Font6x126x12 font spritemap screenshot
Font8x168x16 font spritemap screenshot
Font12x1612x16 font spritemap screenshot
Font24x32The 24x32 font is a pixel doubled version of the 12x16 font.

Structs

6x6 pixel variable width font.

6x8 pixel monospace font.

6x12 pixel monospace font.

8x16 pixel monospace font.

12x16 pixel monospace font.

24x32 pixel monospace font.

Pixel iterator for styled text.

A text object.

Traits

Monospaced bitmap font.