1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
#![no_std]
//! The [ProFont](https://web.archive.org/web/20180412214402/http://tobiasjung.name/profont/)
//! monospace programming font for use with
//! [embedded-graphics](https://github.com/jamwaffles/embedded-graphics). Font data taken from the
//! [ProFont homepage](https://web.archive.org/web/20180412214402/http://tobiasjung.name/profont/).
//!
//! # Examples
//!
//! Draw the text "Hello world" to a mock display using the 7pt ProFont font.
//!
//! ```rust
//! use embedded_graphics::{
//! mock_display::MockDisplay,
//! mono_font::MonoTextStyle,
//! pixelcolor::Rgb888,
//! prelude::*,
//! text::Text,
//! };
//! use profont::PROFONT_7_POINT;
//!
//! # fn main() -> Result<(), core::convert::Infallible> {
//! let mut display = MockDisplay::new();
//!
//! let text_style = MonoTextStyle::new(&PROFONT_7_POINT, Rgb888::RED);
//!
//! Text::new("Hello world", Point::new(0, 7), text_style).draw(&mut display)?;
//! # Ok(()) }
//! ```
//!
//! For a more complete example see [the example in the ssd1675
//! crate](https://github.com/wezm/ssd1675/blob/master/examples/raspberry_pi_inky_phat.rs).
//!
//! ### Glyph Coverage
//!
//! This crate provides support for [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)
//! (latin1), although do note that the font is missing a few glyphs in this range.
use embedded_graphics::{
geometry::Size,
image::ImageRaw,
mono_font::{mapping::StrGlyphMapping, DecorationDimensions, MonoFont},
};
const CHARS_PER_ROW: u32 = 32;
/// Character ranges for all fonts.
///
/// This consists of two character ranges - ASCII from ' ' to '~', then ISO 8859-1 from ` `
/// (HTML notation) to `ÿ`. Unknown characters fall back to `?`.
const GLYPH_MAPPING: StrGlyphMapping =
StrGlyphMapping::new("\0 ~\0\u{00A0}ÿ", '?' as usize - ' ' as usize);
/// The 7 point size with a character size of 5x10 pixels.
pub const PROFONT_7_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont7Point.raw"),
CHARS_PER_ROW * 5,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(5, 10),
character_spacing: 0,
baseline: 7,
underline: DecorationDimensions::new(8, 1),
strikethrough: DecorationDimensions::new(6, 1),
};
/// The 9 point size with a character size of 6x11 pixels.
pub const PROFONT_9_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont9Point.raw"),
CHARS_PER_ROW * 6,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(6, 11),
character_spacing: 0,
baseline: 8,
underline: DecorationDimensions::new(10, 1),
strikethrough: DecorationDimensions::new(6, 1),
};
/// The 10 point size with a character size of 6x12 pixels.
pub const PROFONT_10_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont10Point.raw"),
CHARS_PER_ROW * 6,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(6, 12),
character_spacing: 1,
baseline: 9,
underline: DecorationDimensions::new(10 + 1, 1),
strikethrough: DecorationDimensions::new(7, 1),
};
/// The 12 point size with a character size of 7x15 pixels.
pub const PROFONT_12_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont12Point.raw"),
CHARS_PER_ROW * 7,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(7, 15),
character_spacing: 1,
baseline: 11,
underline: DecorationDimensions::new(13, 1),
strikethrough: DecorationDimensions::new(8, 1),
};
/// The 14 point size with a character size of 10x17 pixels.
pub const PROFONT_14_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont14Point.raw"),
CHARS_PER_ROW * 10,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(10, 17),
character_spacing: 0,
baseline: 13,
underline: DecorationDimensions::new(15, 1),
strikethrough: DecorationDimensions::new(9, 2),
};
/// The 18 point size with a character size of 12x22 pixels.
pub const PROFONT_18_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont18Point.raw"),
CHARS_PER_ROW * 12,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(12, 22),
character_spacing: 0,
baseline: 17,
underline: DecorationDimensions::new(19, 2),
strikethrough: DecorationDimensions::new(12, 2),
};
/// The 24 point size with a character size of 16x29 pixels.
pub const PROFONT_24_POINT: MonoFont = MonoFont {
image: ImageRaw::new_binary(
include_bytes!("../data/ProFont24Point.raw"),
CHARS_PER_ROW * 16,
),
glyph_mapping: &GLYPH_MAPPING,
character_size: Size::new(16, 29),
character_spacing: 0,
baseline: 24,
underline: DecorationDimensions::new(26, 2),
strikethrough: DecorationDimensions::new(16, 2),
};