feat: Embeber fuente AdwaitaSans-Regular.ttf
- Añadir src/render/fonts/AdwaitaSans-Regular.ttf (860KB) - Crear src/render/embedded_font.zig con @embedFile - Añadir TtfFont.initEmbedded() para carga sin dependencias - Exportar embedded_font en zcatgui.zig Ahora cualquier programa que use zcatgui tiene TTF disponible automáticamente sin archivos externos. Licencia: SIL Open Font License (redistribución OK) 🤖 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
a11e1ea842
commit
22d5e51769
4 changed files with 72 additions and 0 deletions
64
src/render/embedded_font.zig
Normal file
64
src/render/embedded_font.zig
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
//! Fuente TTF embebida para uso sin dependencias externas
|
||||
//!
|
||||
//! Incluye AdwaitaSans-Regular para renderizado de texto con antialiasing.
|
||||
//! Licencia: SIL Open Font License (permite redistribución embebida).
|
||||
|
||||
const std = @import("std");
|
||||
const TtfFont = @import("ttf.zig").TtfFont;
|
||||
|
||||
/// Datos binarios de la fuente embebida (cargados en tiempo de compilación)
|
||||
pub const adwaita_sans_data: []const u8 = @embedFile("fonts/AdwaitaSans-Regular.ttf");
|
||||
|
||||
/// Tamaño de la fuente embebida en bytes
|
||||
pub const adwaita_sans_size: usize = adwaita_sans_data.len;
|
||||
|
||||
/// Inicializa TtfFont desde la fuente embebida AdwaitaSans-Regular
|
||||
///
|
||||
/// Ejemplo:
|
||||
/// ```zig
|
||||
/// var ttf = try embedded_font.initEmbeddedFont(allocator);
|
||||
/// defer ttf.deinit();
|
||||
/// ttf.setSize(14);
|
||||
/// renderer.setTtfFont(&ttf);
|
||||
/// ```
|
||||
pub fn initEmbeddedFont(allocator: std.mem.Allocator) !TtfFont {
|
||||
return TtfFont.initFromMemory(allocator, adwaita_sans_data);
|
||||
}
|
||||
|
||||
test "embedded font data is valid" {
|
||||
const testing = std.testing;
|
||||
|
||||
// Verificar que hay datos
|
||||
try testing.expect(adwaita_sans_data.len > 0);
|
||||
|
||||
// Verificar que parece un TTF válido (magic number)
|
||||
// TTF/OTF comienza con 0x00010000 o 'OTTO' o 'true' o 'typ1'
|
||||
try testing.expect(adwaita_sans_data.len >= 4);
|
||||
|
||||
// 0x00010000 = TrueType
|
||||
const is_truetype = adwaita_sans_data[0] == 0x00 and
|
||||
adwaita_sans_data[1] == 0x01 and
|
||||
adwaita_sans_data[2] == 0x00 and
|
||||
adwaita_sans_data[3] == 0x00;
|
||||
|
||||
// 'OTTO' = OpenType con CFF
|
||||
const is_opentype = adwaita_sans_data[0] == 'O' and
|
||||
adwaita_sans_data[1] == 'T' and
|
||||
adwaita_sans_data[2] == 'T' and
|
||||
adwaita_sans_data[3] == 'O';
|
||||
|
||||
try testing.expect(is_truetype or is_opentype);
|
||||
}
|
||||
|
||||
test "embedded font can be loaded" {
|
||||
const allocator = std.testing.allocator;
|
||||
|
||||
var ttf = try initEmbeddedFont(allocator);
|
||||
defer ttf.deinit();
|
||||
|
||||
// Verificar que se puede usar
|
||||
ttf.setSize(14);
|
||||
|
||||
// Verificar que tiene la tabla cmap
|
||||
try std.testing.expect(ttf.cmap_offset > 0);
|
||||
}
|
||||
BIN
src/render/fonts/AdwaitaSans-Regular.ttf
Normal file
BIN
src/render/fonts/AdwaitaSans-Regular.ttf
Normal file
Binary file not shown.
|
|
@ -388,6 +388,13 @@ pub const TtfFont = struct {
|
|||
return self;
|
||||
}
|
||||
|
||||
/// Initialize from embedded font (AdwaitaSans)
|
||||
/// Convenience function for zero external dependencies
|
||||
pub fn initEmbedded(allocator: Allocator) !Self {
|
||||
const embedded = @import("embedded_font.zig");
|
||||
return initFromMemory(allocator, embedded.adwaita_sans_data);
|
||||
}
|
||||
|
||||
/// Deinitialize font
|
||||
pub fn deinit(self: *Self) void {
|
||||
// Free cached glyphs
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ pub const render = struct {
|
|||
pub const ttf = @import("render/ttf.zig");
|
||||
pub const TtfFont = ttf.TtfFont;
|
||||
pub const FontRef = ttf.FontRef;
|
||||
pub const embedded_font = @import("render/embedded_font.zig");
|
||||
pub const animation = @import("render/animation.zig");
|
||||
pub const effects = @import("render/effects.zig");
|
||||
pub const antialiasing = @import("render/antialiasing.zig");
|
||||
|
|
|
|||
Loading…
Reference in a new issue