feat(fonts): Sistema de fuentes multi-tamaño con 8x16 Latin-1
Nuevas fuentes bitmap 8x16 (altura VGA estándar, mejor legibilidad): - font_8x16: ASCII básico (95 caracteres) - font_8x16_latin1: Latin-1 completo (224 caracteres) Sistema FontSize para selección por categoría: - getFontForSize(.small) → 8x8 Latin-1 (compacto) - getFontForSize(.medium) → 8x16 Latin-1 (estándar UI) - getFontForSizeAscii() variantes para menor memoria Soporte completo español/europeo: ñ, Ñ, á, é, í, ó, ú, ü, ¿, ¡, ç, ß Documentación actualizada en REFERENCE.md con tabla de fuentes y ejemplos de uso. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
520c5d7343
commit
784fecac01
4 changed files with 783 additions and 11 deletions
49
REFERENCE.md
49
REFERENCE.md
|
|
@ -601,19 +601,47 @@ renderer.getClip(); // Current clip rect
|
|||
|
||||
### Font System
|
||||
|
||||
zcatgui provides multiple bitmap fonts for different use cases:
|
||||
|
||||
| Font | Size | Characters | Use Case |
|
||||
|--------------------|-------|------------|----------------------------------|
|
||||
| `default_font` | 8x8 | ASCII | Compact displays, terminals |
|
||||
| `default_font_latin1` | 8x8 | Latin-1 | Compact + Spanish/European |
|
||||
| `font_8x16` | 8x16 | ASCII | Standard UI, good readability |
|
||||
| `font_8x16_latin1` | 8x16 | Latin-1 | Standard UI + Spanish/European |
|
||||
|
||||
**Latin-1 Character Support**: ñ, Ñ, á, é, í, ó, ú, ü, ¿, ¡, ç, ß, and all Western European accented characters.
|
||||
|
||||
**Bitmap Fonts** (`src/render/font.zig`):
|
||||
```zig
|
||||
const Font = zcatgui.render.Font;
|
||||
const render = zcatgui.render;
|
||||
|
||||
// Built-in 8x8 font
|
||||
const font = zcatgui.render.default_font;
|
||||
// Direct font access
|
||||
const font = render.default_font_latin1; // 8x8 with Spanish support
|
||||
const font_tall = render.font_8x16_latin1; // 8x16 taller, more readable
|
||||
|
||||
// Font by size category (recommended)
|
||||
const small_font = render.getFontForSize(.small); // 8x8 Latin-1
|
||||
const medium_font = render.getFontForSize(.medium); // 8x16 Latin-1
|
||||
|
||||
// ASCII-only variants (smaller memory)
|
||||
const ascii_font = render.getFontForSizeAscii(.medium);
|
||||
|
||||
// Font operations
|
||||
font.charWidth() // 8
|
||||
font.charHeight() // 8
|
||||
font.textWidth("Hello") // 40
|
||||
font.charHeight() // 8 or 16
|
||||
font.textWidth("Hello") // width in pixels
|
||||
|
||||
font.drawChar(fb, x, y, 'A', color, clip);
|
||||
font.drawText(fb, x, y, "Hello", color, clip);
|
||||
font.drawText(fb, x, y, "¿Hola, España!", color, clip);
|
||||
```
|
||||
|
||||
**Setting Default Font in Renderer**:
|
||||
```zig
|
||||
var renderer = SoftwareRenderer.init(&framebuffer);
|
||||
|
||||
// Use 8x16 Latin-1 for better readability and Spanish support
|
||||
renderer.setDefaultFont(@constCast(&render.font_8x16_latin1));
|
||||
```
|
||||
|
||||
**TrueType Fonts** (`src/render/ttf.zig`):
|
||||
|
|
@ -623,10 +651,15 @@ const TtfFont = zcatgui.render.TtfFont;
|
|||
var ttf = try TtfFont.loadFromFile(allocator, "font.ttf");
|
||||
defer ttf.deinit();
|
||||
|
||||
const metrics = ttf.getMetrics();
|
||||
ttf.renderGlyph(codepoint, size);
|
||||
ttf.setSize(16); // Set render size
|
||||
const metrics = ttf.getGlyphMetrics('A');
|
||||
ttf.textWidth("Hello");
|
||||
```
|
||||
|
||||
> **Note**: TTF rendering currently uses placeholder glyphs. Full TTF rasterization
|
||||
> (bezier curve rendering) is planned for future releases. For production use,
|
||||
> prefer the bitmap fonts which have complete glyph rendering.
|
||||
|
||||
---
|
||||
|
||||
## Animation & Effects
|
||||
|
|
|
|||
|
|
@ -155,6 +155,80 @@ pub const default_font_latin1 = Font{
|
|||
.num_chars = 224, // 32-255
|
||||
};
|
||||
|
||||
// =============================================================================
|
||||
// 8x16 Fonts (Taller, standard VGA height - better readability)
|
||||
// =============================================================================
|
||||
|
||||
/// 8x16 ASCII font (characters 32-126)
|
||||
/// Taller font for better readability in UI applications.
|
||||
pub const font_8x16 = Font{
|
||||
.glyphs = &font_data.font_8x16_ascii,
|
||||
.char_width = 8,
|
||||
.char_height = 16,
|
||||
.first_char = 32,
|
||||
.num_chars = 95,
|
||||
};
|
||||
|
||||
/// 8x16 Latin-1 font (characters 32-255)
|
||||
/// Taller font with full Western European character support.
|
||||
/// Recommended for UI applications that need both readability and Spanish support.
|
||||
pub const font_8x16_latin1 = Font{
|
||||
.glyphs = &font_data.font_8x16_latin1,
|
||||
.char_width = 8,
|
||||
.char_height = 16,
|
||||
.first_char = 32,
|
||||
.num_chars = 224, // 32-255
|
||||
};
|
||||
|
||||
// =============================================================================
|
||||
// Font Size Presets (convenience aliases)
|
||||
// =============================================================================
|
||||
|
||||
/// Font size categories for easy selection
|
||||
pub const FontSize = enum {
|
||||
/// Small: 8x8 bitmap (compact, good for dense data)
|
||||
small,
|
||||
/// Medium: 8x16 bitmap (standard VGA, good readability)
|
||||
medium,
|
||||
/// Large: placeholder for future 12x24 or similar
|
||||
large,
|
||||
};
|
||||
|
||||
/// Get the best font for a given size category
|
||||
/// Returns Latin-1 fonts (full Western European support)
|
||||
pub fn getFontForSize(size: FontSize) Font {
|
||||
return switch (size) {
|
||||
.small => default_font_latin1,
|
||||
.medium => font_8x16_latin1,
|
||||
.large => font_8x16_latin1, // TODO: Add larger font
|
||||
};
|
||||
}
|
||||
|
||||
/// Get ASCII-only font for a given size (smaller memory footprint)
|
||||
pub fn getFontForSizeAscii(size: FontSize) Font {
|
||||
return switch (size) {
|
||||
.small => default_font,
|
||||
.medium => font_8x16,
|
||||
.large => font_8x16, // TODO: Add larger font
|
||||
};
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Available Fonts Summary
|
||||
// =============================================================================
|
||||
//
|
||||
// | Name | Size | Chars | Use Case |
|
||||
// |--------------------|-------|---------|----------------------------------|
|
||||
// | default_font | 8x8 | ASCII | Compact displays, terminals |
|
||||
// | default_font_latin1| 8x8 | Latin-1 | Compact + Spanish/European |
|
||||
// | font_8x16 | 8x16 | ASCII | Standard UI, good readability |
|
||||
// | font_8x16_latin1 | 8x16 | Latin-1 | Standard UI + Spanish/European |
|
||||
//
|
||||
// For TTF fonts, see ttf.zig (requires TtfFont.loadFromFile)
|
||||
// Note: TTF rendering currently uses placeholder glyphs.
|
||||
// Full TTF rasterization requires bezier curve implementation.
|
||||
//
|
||||
|
||||
// =============================================================================
|
||||
// Tests
|
||||
// =============================================================================
|
||||
|
|
|
|||
|
|
@ -1,11 +1,23 @@
|
|||
//! Font Data - Bitmap font glyph data
|
||||
//!
|
||||
//! Contains glyph data for various bitmap fonts:
|
||||
//! - 8x8 ASCII (32-126) - Basic ASCII
|
||||
//! - 8x8 Latin-1 (32-255) - Full Western European (Spanish, French, German, etc.)
|
||||
//! - 8x16 Latin-1 - Taller, more readable font
|
||||
//!
|
||||
//! ## Available Fonts
|
||||
//! | Name | Size | Characters | Bytes | Use Case |
|
||||
//! |-------------------|-------|------------|--------|-----------------------------|
|
||||
//! | font_8x8_ascii | 8x8 | 95 (ASCII) | 760 | Compact, English only |
|
||||
//! | font_8x8_latin1 | 8x8 | 224 (Latin-1)| 1792 | Compact + Spanish/European |
|
||||
//! | font_8x16_ascii | 8x16 | 95 (ASCII) | 1520 | Standard, English only |
|
||||
//! | font_8x16_latin1 | 8x16 | 224 (Latin-1)| 3584 | Standard + Spanish/European |
|
||||
//!
|
||||
//! ## Character Support
|
||||
//! - ASCII (32-126): Basic printable characters
|
||||
//! - Latin-1 Extended (128-255): Spanish (ñ, á, é, í, ó, ú, ¿, ¡), French (ç, è, ê),
|
||||
//! German (ä, ö, ü, ß), Portuguese, Italian, and more Western European characters
|
||||
//!
|
||||
//! ## Format
|
||||
//! All fonts use 1-bit-per-pixel format (packed into bytes, MSB first).
|
||||
//! Each row is stored as bytes, with leftmost pixel as MSB.
|
||||
|
||||
// =============================================================================
|
||||
// 8x8 ASCII Font (32-126) - 95 characters
|
||||
|
|
@ -497,3 +509,649 @@ pub const font_8x8_latin1 = blk: {
|
|||
|
||||
break :blk data;
|
||||
};
|
||||
|
||||
// =============================================================================
|
||||
// 8x16 Latin-1 Font (32-255) - Taller, more readable font
|
||||
// =============================================================================
|
||||
|
||||
/// 8x16 ASCII font data (characters 32-126)
|
||||
/// Each character is 16 bytes (16 rows, 1 byte per row, MSB = leftmost pixel)
|
||||
/// This is the standard VGA font height, better for UI applications.
|
||||
pub const font_8x16_ascii = [95 * 16]u8{
|
||||
// Space (32)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ! (33)
|
||||
0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18,
|
||||
0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// " (34)
|
||||
0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// # (35)
|
||||
0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C,
|
||||
0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
|
||||
// $ (36)
|
||||
0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06,
|
||||
0x06, 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00,
|
||||
// % (37)
|
||||
0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18,
|
||||
0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00,
|
||||
// & (38)
|
||||
0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// ' (39)
|
||||
0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ( (40)
|
||||
0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
||||
// ) (41)
|
||||
0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C,
|
||||
0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
// * (42)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF,
|
||||
0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// + (43)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E,
|
||||
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// , (44)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
|
||||
// - (45)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// . (46)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// / (47)
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18,
|
||||
0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
// 0 (48)
|
||||
0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xD6, 0xD6,
|
||||
0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||
// 1 (49)
|
||||
0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||
// 2 (50)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30,
|
||||
0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 3 (51)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06,
|
||||
0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 4 (52)
|
||||
0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE,
|
||||
0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00,
|
||||
// 5 (53)
|
||||
0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06,
|
||||
0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 6 (54)
|
||||
0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 7 (55)
|
||||
0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18,
|
||||
0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
// 8 (56)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 9 (57)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06,
|
||||
0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
// : (58)
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ; (59)
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
// < (60)
|
||||
0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60,
|
||||
0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00,
|
||||
// = (61)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// > (62)
|
||||
0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06,
|
||||
0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||
// ? (63)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18,
|
||||
0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// @ (64)
|
||||
0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE,
|
||||
0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// A (65)
|
||||
0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE,
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// B (66)
|
||||
0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66,
|
||||
0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||
// C (67)
|
||||
0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0,
|
||||
0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// D (68)
|
||||
0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66,
|
||||
0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00,
|
||||
// E (69)
|
||||
0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68,
|
||||
0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// F (70)
|
||||
0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68,
|
||||
0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
// G (71)
|
||||
0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE,
|
||||
0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00,
|
||||
// H (72)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// I (73)
|
||||
0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// J (74)
|
||||
0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
|
||||
0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
// K (75)
|
||||
0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78,
|
||||
0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
|
||||
// L (76)
|
||||
0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60,
|
||||
0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// M (77)
|
||||
0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// N (78)
|
||||
0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE,
|
||||
0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// O (79)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// P (80)
|
||||
0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60,
|
||||
0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
// Q (81)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00,
|
||||
// R (82)
|
||||
0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C,
|
||||
0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
|
||||
// S (83)
|
||||
0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C,
|
||||
0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// T (84)
|
||||
0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// U (85)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// V (86)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
// W (87)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6,
|
||||
0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00,
|
||||
// X (88)
|
||||
0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38,
|
||||
0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// Y (89)
|
||||
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// Z (90)
|
||||
0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30,
|
||||
0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// [ (91)
|
||||
0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// \ (92)
|
||||
0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18,
|
||||
0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// ] (93)
|
||||
0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
|
||||
0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// ^ (94)
|
||||
0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// _ (95)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
// ` (96)
|
||||
0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// a (97)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// b (98)
|
||||
0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66,
|
||||
0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// c (99)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// d (100)
|
||||
0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// e (101)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// f (102)
|
||||
0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60,
|
||||
0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
// g (103)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
|
||||
// h (104)
|
||||
0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66,
|
||||
0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
|
||||
// i (105)
|
||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// j (106)
|
||||
0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06,
|
||||
0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00,
|
||||
// k (107)
|
||||
0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78,
|
||||
0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
|
||||
// l (108)
|
||||
0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// m (109)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6,
|
||||
0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// n (110)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
// o (111)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// p (112)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00,
|
||||
// q (113)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00,
|
||||
// r (114)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66,
|
||||
0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
// s (115)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60,
|
||||
0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// t (116)
|
||||
0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30,
|
||||
0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00,
|
||||
// u (117)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// v (118)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66,
|
||||
0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// w (119)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6,
|
||||
0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00,
|
||||
// x (120)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38,
|
||||
0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// y (121)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00,
|
||||
// z (122)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18,
|
||||
0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// { (123)
|
||||
0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18,
|
||||
0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00,
|
||||
// | (124)
|
||||
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// } (125)
|
||||
0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18,
|
||||
0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
|
||||
// ~ (126)
|
||||
0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/// 8x16 Latin-1 extended characters (128-255)
|
||||
/// 16 bytes per character (16 rows)
|
||||
pub const font_8x16_latin1_ext = [128 * 16]u8{
|
||||
// 128-159: Control/special characters
|
||||
// 128: Euro (€)
|
||||
0x00, 0x00, 0x3C, 0x66, 0xC0, 0xF8, 0xC0, 0xF8,
|
||||
0xC0, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 129: unused
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 130-159: (simplified - mostly blank or basic)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, // 130
|
||||
0x00, 0x00, 0x0E, 0x18, 0x18, 0x3C, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 131
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, // 132
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, // 133
|
||||
0x00, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // 134
|
||||
0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 135
|
||||
0x00, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 136
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 137
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 138
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 139
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 140
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 141
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 142
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 143
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 144
|
||||
0x00, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 145
|
||||
0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 146
|
||||
0x00, 0x6C, 0x36, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 147
|
||||
0x00, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 148
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 149
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 150
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 151
|
||||
0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 152
|
||||
0x00, 0xFE, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 153
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 154
|
||||
0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 155
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 156
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 157
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 158
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 159
|
||||
|
||||
// 160: Non-breaking space
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 161: Inverted exclamation (¡) - SPANISH
|
||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18,
|
||||
0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// 162: Cent (¢)
|
||||
0x00, 0x00, 0x00, 0x18, 0x18, 0x7C, 0xC6, 0xC0,
|
||||
0xC0, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00, 0x00,
|
||||
// 163: Pound (£)
|
||||
0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60,
|
||||
0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||
// 164: Currency (¤)
|
||||
0x00, 0x00, 0x00, 0x00, 0xC6, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 165: Yen (¥)
|
||||
0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E,
|
||||
0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// 166: Broken bar (¦)
|
||||
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
|
||||
0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
// 167: Section (§)
|
||||
0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00,
|
||||
// 168: Diaeresis (¨)
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 169: Copyright (©)
|
||||
0x00, 0x00, 0x3C, 0x42, 0x99, 0xA1, 0xA1, 0xA1,
|
||||
0x99, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 170: Feminine ordinal (ª)
|
||||
0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 171: Left guillemet («)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8,
|
||||
0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 172: Not (¬)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06,
|
||||
0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 173: Soft hyphen
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 174: Registered (®)
|
||||
0x00, 0x00, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5,
|
||||
0xA5, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 175: Macron (¯)
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 176: Degree (°)
|
||||
0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 177: Plus-minus (±)
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18,
|
||||
0x18, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 178: Superscript 2 (²)
|
||||
0x00, 0x00, 0x38, 0x0C, 0x18, 0x30, 0x3C, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 179: Superscript 3 (³)
|
||||
0x00, 0x00, 0x38, 0x0C, 0x18, 0x0C, 0x38, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 180: Acute (´)
|
||||
0x00, 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 181: Micro (µ)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xFE, 0xC0, 0xC0, 0x00, 0x00,
|
||||
// 182: Pilcrow (¶)
|
||||
0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B,
|
||||
0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
|
||||
// 183: Middle dot (·)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 184: Cedilla (¸)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0x38, 0x00,
|
||||
// 185: Superscript 1 (¹)
|
||||
0x00, 0x00, 0x18, 0x38, 0x18, 0x18, 0x3C, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 186: Masculine ordinal (º)
|
||||
0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 187: Right guillemet (»)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36,
|
||||
0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 188: One quarter (¼)
|
||||
0x00, 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0x0C, 0x18,
|
||||
0x30, 0x66, 0xCE, 0x9E, 0x06, 0x00, 0x00, 0x00,
|
||||
// 189: One half (½)
|
||||
0x00, 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0x0C, 0x18,
|
||||
0x30, 0x6E, 0xD3, 0x06, 0x0C, 0x1F, 0x00, 0x00,
|
||||
// 190: Three quarters (¾)
|
||||
0x00, 0x00, 0xE0, 0x30, 0x62, 0x36, 0xEC, 0x18,
|
||||
0x30, 0x66, 0xCE, 0x9E, 0x06, 0x00, 0x00, 0x00,
|
||||
// 191: Inverted question (¿) - SPANISH
|
||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
|
||||
0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
// 192: A grave (À)
|
||||
0x60, 0x30, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 193: A acute (Á) - SPANISH
|
||||
0x0C, 0x18, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 194: A circumflex (Â)
|
||||
0x10, 0x38, 0x6C, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 195: A tilde (Ã)
|
||||
0x76, 0xDC, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 196: A diaeresis (Ä)
|
||||
0x6C, 0x6C, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 197: A ring (Å)
|
||||
0x38, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0xC6,
|
||||
0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 198: AE (Æ)
|
||||
0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 199: C cedilla (Ç)
|
||||
0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0,
|
||||
0xC0, 0xC2, 0x66, 0x3C, 0x18, 0x0C, 0x38, 0x00,
|
||||
// 200: E grave (È)
|
||||
0x60, 0x30, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78,
|
||||
0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 201: E acute (É) - SPANISH
|
||||
0x0C, 0x18, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78,
|
||||
0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 202: E circumflex (Ê)
|
||||
0x10, 0x38, 0x6C, 0xFE, 0x66, 0x62, 0x68, 0x78,
|
||||
0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 203: E diaeresis (Ë)
|
||||
0x6C, 0x6C, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78,
|
||||
0x68, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
// 204: I grave (Ì)
|
||||
0x60, 0x30, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 205: I acute (Í) - SPANISH
|
||||
0x0C, 0x18, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 206: I circumflex (Î)
|
||||
0x18, 0x3C, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 207: I diaeresis (Ï)
|
||||
0x66, 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 208: Eth (Ð)
|
||||
0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0xF6, 0x66,
|
||||
0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00,
|
||||
// 209: N tilde (Ñ) - SPANISH
|
||||
0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE,
|
||||
0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
|
||||
// 210: O grave (Ò)
|
||||
0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 211: O acute (Ó) - SPANISH
|
||||
0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 212: O circumflex (Ô)
|
||||
0x10, 0x38, 0x6C, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 213: O tilde (Õ)
|
||||
0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 214: O diaeresis (Ö)
|
||||
0x6C, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 215: Multiplication (×)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38,
|
||||
0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 216: O stroke (Ø)
|
||||
0x00, 0x00, 0x7E, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6,
|
||||
0xE6, 0xE6, 0xC6, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||
// 217: U grave (Ù)
|
||||
0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 218: U acute (Ú) - SPANISH
|
||||
0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 219: U circumflex (Û)
|
||||
0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 220: U diaeresis (Ü) - SPANISH
|
||||
0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 221: Y acute (Ý)
|
||||
0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 222: Thorn (Þ)
|
||||
0x00, 0x00, 0xF0, 0x60, 0x7C, 0x66, 0x66, 0x66,
|
||||
0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
// 223: Sharp s (ß) - German
|
||||
0x00, 0x00, 0x38, 0x6C, 0x6C, 0x6C, 0x78, 0x6C,
|
||||
0x66, 0x66, 0x66, 0x6C, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
// 224: a grave (à)
|
||||
0x00, 0x00, 0x60, 0x30, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 225: a acute (á) - SPANISH
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 226: a circumflex (â)
|
||||
0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 227: a tilde (ã)
|
||||
0x00, 0x00, 0x76, 0xDC, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 228: a diaeresis (ä)
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 229: a ring (å)
|
||||
0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 230: ae (æ)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36,
|
||||
0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00,
|
||||
// 231: c cedilla (ç)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x0C, 0x38, 0x00,
|
||||
// 232: e grave (è)
|
||||
0x00, 0x00, 0x60, 0x30, 0x00, 0x7C, 0xC6, 0xFE,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 233: e acute (é) - SPANISH
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xFE,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 234: e circumflex (ê)
|
||||
0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 235: e diaeresis (ë)
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xC6, 0xFE,
|
||||
0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 236: i grave (ì)
|
||||
0x00, 0x00, 0x60, 0x30, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 237: i acute (í) - SPANISH
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 238: i circumflex (î)
|
||||
0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 239: i diaeresis (ï)
|
||||
0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 240: eth (ð)
|
||||
0x00, 0x00, 0x36, 0x1C, 0x0C, 0x3C, 0x6C, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
// 241: n tilde (ñ) - SPANISH
|
||||
0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
// 242: o grave (ò)
|
||||
0x00, 0x00, 0x60, 0x30, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 243: o acute (ó) - SPANISH
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 244: o circumflex (ô)
|
||||
0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 245: o tilde (õ)
|
||||
0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 246: o diaeresis (ö)
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
|
||||
// 247: Division (÷)
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// 248: o stroke (ø)
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xCE, 0xD6,
|
||||
0xD6, 0xD6, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00,
|
||||
// 249: u grave (ù)
|
||||
0x00, 0x00, 0x60, 0x30, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 250: u acute (ú) - SPANISH
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 251: u circumflex (û)
|
||||
0x00, 0x10, 0x38, 0x6C, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 252: u diaeresis (ü) - SPANISH
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
// 253: y acute (ý)
|
||||
0x00, 0x00, 0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00,
|
||||
// 254: thorn (þ)
|
||||
0x00, 0x00, 0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66,
|
||||
0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00,
|
||||
// 255: y diaeresis (ÿ)
|
||||
0x00, 0x00, 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
|
||||
0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00,
|
||||
};
|
||||
|
||||
/// Full 8x16 Latin-1 font covering characters 32-255
|
||||
pub const font_8x16_latin1 = blk: {
|
||||
var data: [224 * 16]u8 = undefined;
|
||||
|
||||
// Copy ASCII portion (32-126 = 95 chars)
|
||||
@memcpy(data[0 .. 95 * 16], &font_8x16_ascii);
|
||||
|
||||
// Character 127 (DEL) - use a box character
|
||||
const del_char = [16]u8{ 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x00, 0x00 };
|
||||
@memcpy(data[95 * 16 .. 96 * 16], &del_char);
|
||||
|
||||
// Copy Latin-1 extended (128-255 = 128 chars)
|
||||
@memcpy(data[96 * 16 .. 224 * 16], &font_8x16_latin1_ext);
|
||||
|
||||
break :blk data;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -79,8 +79,15 @@ pub const render = struct {
|
|||
pub const SoftwareRenderer = @import("render/software.zig").SoftwareRenderer;
|
||||
const font_module = @import("render/font.zig");
|
||||
pub const Font = font_module.Font;
|
||||
pub const FontSize = font_module.FontSize;
|
||||
pub const getFontForSize = font_module.getFontForSize;
|
||||
pub const getFontForSizeAscii = font_module.getFontForSizeAscii;
|
||||
// 8x8 fonts (compact)
|
||||
pub const default_font = font_module.default_font;
|
||||
pub const default_font_latin1 = font_module.default_font_latin1;
|
||||
// 8x16 fonts (taller, VGA standard, better readability)
|
||||
pub const font_8x16 = font_module.font_8x16;
|
||||
pub const font_8x16_latin1 = font_module.font_8x16_latin1;
|
||||
pub const font_data = font_module.font_data;
|
||||
pub const ttf = @import("render/ttf.zig");
|
||||
pub const TtfFont = ttf.TtfFont;
|
||||
|
|
|
|||
Loading…
Reference in a new issue